4.3 KiB
4.3 KiB
Next.js SEO And Build Checklist
Use this checklist for audits, implementation review, and final handoff. Apply only the sections relevant to the task.
Discovery
- Confirm Next.js version from
package.jsonand lockfile. - Confirm router type: App Router, Pages Router, or hybrid.
- Confirm package manager and scripts.
- Review
next.config.*. - Review deployment target if visible in repo.
- Locate route definitions and content/data source.
- Locate existing SEO helpers, metadata builders, schema builders, sitemap, robots, redirects, and middleware.
Metadata
- Unique title per indexable page.
- Unique meta description per indexable page.
- Canonical URL is absolute, normalized, and self-referencing.
- Root title template is intentional.
- Open Graph title, description, URL, type, image, and site name are correct.
- Twitter card values are correct.
- Robots directives match index policy.
- Metadata does not depend on browser-only state.
- Dynamic metadata handles missing records with
notFound()or a clear fallback policy.
Structured Data
- JSON-LD type matches visible page content.
- Entity IDs and URLs match canonical URLs.
- Required fields are present.
- Recommended fields are present when source data exists.
- Product price, availability, review, SKU, brand, and image data match visible product content.
- Article author, date, modified date, headline, image, and publisher match visible article content.
- Breadcrumb JSON-LD matches visible or implied navigation hierarchy.
- JSON serialization is safe.
Crawl Paths
- Main navigation uses crawlable links.
- Important listing/detail pages are reachable without form-only or script-only flows.
- Pagination and filters have an intentional index/canonical/noindex policy.
- Empty states do not create thin indexable pages unless intended.
404,notFound(), redirects, and unpublished states behave correctly.
Sitemap
- Uses canonical production origin.
- Includes only indexable canonical URLs.
- Excludes private, draft, duplicate, auth, cart, checkout, account, search-result, and noindex routes.
- Includes localized alternates when supported by source data.
- Uses realistic
lastModified. - Handles large URL sets with sitemap splitting when needed.
- Is referenced from robots.
Robots
- Allows intended public pages.
- Disallows private or duplicate areas.
- Does not block static assets needed for rendering.
- References the sitemap.
- Does not accidentally block the whole site in production.
International SEO
- Locale URL strategy is consistent.
- Canonical points to the locale-specific URL.
hreflangalternates include only real translated equivalents.x-defaultis intentional.- Localized metadata is not copied blindly from another language.
- Slugs, breadcrumbs, schema, and Open Graph data respect locale.
Rendering
- Crawl-critical content is present in server-rendered HTML.
- Client Components are limited to interactive parts.
- Route rendering mode is intentional: static, ISR, dynamic, or client-only.
generateStaticParamscovers expected static routes.- Cache and revalidation behavior match content freshness.
- Accidental dynamic rendering has been checked.
Performance
- LCP image is optimized and sized.
- Non-critical images are lazy-loaded.
- Fonts are optimized and do not cause avoidable layout shift.
- Third-party scripts use the correct strategy.
- Bundle size impact is checked for new libraries.
- Layout shift risks are checked for banners, hero media, product grids, and dynamic content.
Accessibility Signals
- One clear
h1per primary page. - Heading hierarchy is meaningful.
- Images have useful alt text or empty alt for decorative images.
- Links have descriptive accessible names.
- Product/article/category content is readable without visual-only cues.
Build Verification
- Run typecheck.
- Run lint.
- Run focused tests if available.
- Run production build.
- Inspect build output for rendering mode changes.
- Check warnings related to metadata, dynamic server usage, image config, middleware, redirects, or unsupported runtime.
Handoff
- Summarize changed SEO behavior.
- List affected routes and files.
- Include verification commands and results.
- Call out unresolved source-data, CMS, backend, deployment, or business-policy decisions.
- Identify the next owner when decisions are outside frontend/SEO implementation.