'Categories', 'structured_data' => [ '@context' => 'https://schema.org', '@type' => 'CollectionPage', 'name' => 'Categories', ], ])->build()->toArray(); expect($seo['json_ld'] ?? []) ->toHaveCount(1) ->and($seo['json_ld'][0]['@type'] ?? null)->toBe('CollectionPage'); }); it('normalizes JSON string structured data schemas', function () { $seo = SeoDataBuilder::fromArray([ 'title' => 'Categories', 'structured_data' => '{"@context":"https://schema.org","@type":"CollectionPage","name":"Categories"}', ])->build()->toArray(); expect($seo['json_ld'] ?? []) ->toHaveCount(1) ->and($seo['json_ld'][0]['@context'] ?? null)->toBe('https://schema.org') ->and($seo['json_ld'][0]['@type'] ?? null)->toBe('CollectionPage'); }); it('normalizes canonical page urls to the configured public app domain', function () { config()->set('app.url', 'https://skinbase.org'); $seo = SeoDataBuilder::fromArray([ 'canonical' => 'https://thumb.skinbase.top/search?q=winstep', ])->build()->toArray(); expect($seo['canonical'] ?? null)->toBe('https://skinbase.org/search?q=winstep'); });