# SEO Audit System v1 Summary ## Changed Areas - Added shared SEO support under `app/Support/Seo/` - Added shared Blade SEO renderer in `resources/views/partials/seo/head.blade.php` - Added shared Inertia SEO renderer in `resources/js/components/seo/SeoHead.jsx` - Updated layout integration in `resources/views/layouts/nova.blade.php` and `resources/views/layouts/_legacy.blade.php` - Wired major public controllers and views across homepage, artworks, browse/discover, categories, tags, profiles, collections, leaderboard, blog, stories, news, Nova Cards, community/gallery pages, and static/footer pages - Added and updated feature tests for key public SEO surfaces ## SEO Architecture Introduced ### Core files - `config/seo.php` - `app/Support/Seo/SeoData.php` - `app/Support/Seo/BreadcrumbTrail.php` - `app/Support/Seo/SeoDataBuilder.php` - `app/Support/Seo/SeoFactory.php` - `resources/views/partials/seo/head.blade.php` - `resources/js/components/seo/SeoHead.jsx` ### Contract - Controllers and pages can pass a normalized `seo` payload explicitly - Blade layouts can also normalize legacy `page_*` and `meta.*` data through `SeoFactory::fromViewData()` - `useUnifiedSeo` is the opt-in switch for the shared renderer - JSON-LD, Open Graph, Twitter tags, canonical tags, robots, breadcrumbs, and optional keywords are emitted from one place ## Supported Page Types Explicitly covered or normalized through the shared system: - Homepage - Artwork detail pages - Explore / browse / discover pages - Category pages - Tag pages - Creator / profile pages - Collection listing and collection detail pages - Leaderboard pages - Blog pages - Stories pages - News pages - Public Nova Cards pages - FAQ, rules, privacy, terms, about/help/contact/legal, staff, RSS feeds, and other public static/footer pages - Community / gallery-style public pages such as latest uploads, featured artworks, member photos, downloads today, comments latest, and monthly commentators ## Title / Description / Canonical / OG Strategy - Title and description generation is page-type-aware where the app has a dedicated resolver - Legacy pages still normalize cleanly through fallback mapping of `page_title`, `page_meta_description`, `page_canonical`, `page_robots`, and `meta.*` - Canonicals are generated with Laravel route and URL helpers rather than hardcoded hosts - Open Graph and Twitter tags are standardized through the shared renderer - Fallback OG images resolve from page data first, then from configured defaults - Search and low-value pages can be marked noindex through the same DTO/builder contract ## Structured Data Added JSON-LD is emitted centrally and currently supports the main public shapes used by the site: - `WebSite` - `BreadcrumbList` - `CollectionPage` - `ProfilePage` - `FAQPage` - `ImageObject` - `CreativeWork` - `Article` Schema is added only where it matches visible page content. ## Indexing / Robots Decisions - Public canonical pages default to `index,follow` - Search and similar low-value surfaces can be marked noindex through the shared builder - Private/internal pages remain outside the shared public SEO rollout - The system is structured to align with future sitemap generation through canonical/indexable page types ## Breadcrumb / Internal Linking Fixes - Added `BreadcrumbTrail` normalization - Removed duplicate `Home > Home` style breadcrumb issues - Ensured breadcrumb JSON-LD is emitted once through the shared renderer when breadcrumbs exist ## Tests Added / Updated Key coverage includes: - `tests/Feature/HomePageTest.php` - `tests/Feature/FooterPagesTest.php` - `tests/Feature/Collections/CollectionsV5FeatureTest.php` - `tests/Feature/LeaderboardPageTest.php` - `tests/Feature/RoutingUnificationTest.php` - `tests/Feature/Stories/CreatorStoryWorkflowTest.php` - `tests/Feature/NovaCards/NovaCardPublicPagesTest.php` - `tests/Feature/ArtworkJsonLdTest.php` - `tests/Feature/TagPageTest.php` - `tests/Feature/BrowseApiTest.php` These tests cover canonical tags, JSON-LD, OG output, no-duplicate-head regressions, and core public page availability. ## Follow-up Recommendations ### SEO v2 - Add a formal sitemap generator built directly from the canonical/indexable page-type contract - Expand explicit page-type resolver methods for the remaining lower-value legacy pages that still rely on fallback normalization - Add broader page-family assertions for static pages, news/tag/category pages, and community gallery pages - Add snapshot-style tests for the shared head output if head regressions become frequent - Consider central reporting for pages with fallback-only metadata so future migrations are easier to track