All checklists
SEO Checklist
12 items

Next.js SEO checklist

Next.js App Router has first-class SEO primitives. Most developers use less than half of them. This checklist covers every metadata API, static generation pattern, and structured data integration available in Next.js 14+.

5
critical
6
important
1
nice-to-have

Critical

— 5 items

Export metadata objects from every page and layout

critical
title-present

Use the Next.js Metadata API. Export a metadata object or generateMetadata() function from page.tsx and layout.tsx. This replaces <Head> from Pages Router.

Use generateMetadata() for dynamic routes

critical
description-present

Pages like /blog/[slug] need generateMetadata() to fetch data and set unique titles and descriptions per page. Static metadata objects cannot handle dynamic content.

Create a sitemap.ts file in your app directory

critical

Export a default function from app/sitemap.ts that returns MetadataRoute.Sitemap. Include all public pages with proper lastModified dates and priorities.

Set alternates.canonical on every page

critical
canonical-url

Include canonical URLs in your metadata export. For dynamic routes, build the canonical from the slug parameter. Prevents duplicate content from query params or trailing slashes.

Validate all metadata with Indxel

critical

Run npx indxel check on your Next.js project. It scans all routes, validates metadata exports, and catches missing titles, descriptions, and OG tags before deploy.

Important

— 6 items

Implement generateStaticParams() for SSG

important

Pre-render dynamic routes at build time. This improves performance and ensures search engines can crawl all pages without JavaScript execution.

Add a robots.ts file

important
robots-not-blocking

Export a default function from app/robots.ts. Allow all crawlers on production, block specific paths like /api/ and /dashboard/. Reference your sitemap URL.

Generate OG images with ImageResponse

important
og-image

Create opengraph-image.tsx files in route directories. Use next/og ImageResponse to generate dynamic OG images at build time. No external service needed.

Add JSON-LD structured data via script tags

important
structured-data-present

Inject JSON-LD in your pages using <script type="application/ld+json">. Add Organization on the homepage, Article on blog posts, FAQPage on FAQ sections.

Configure the title template in root layout

important

Set title: { default: 'Site Name', template: '%s | Site Name' } in your root layout metadata. Child pages inherit the template automatically.

Optimize images with next/image

important

Use the Image component for automatic WebP/AVIF conversion, lazy loading, and responsive sizing. Set explicit width and height to prevent layout shifts.

Nice-to-have

— 1 item

Add loading.tsx for instant perceived performance

nice-to-have

Create loading.tsx files in route directories. They show immediately while the page loads, reducing Largest Contentful Paint and improving Core Web Vitals scores.

Frequently asked questions

Does Next.js App Router handle SEO automatically?

No. Next.js provides the APIs (metadata exports, sitemap.ts, robots.ts, ImageResponse), but you must implement them correctly on every route. Indxel validates that you did.

Should I use static or dynamic metadata?

Use static metadata (export const metadata) for pages with fixed content like /about or /pricing. Use generateMetadata() for dynamic routes like /blog/[slug] where the title depends on data.

How do I handle SEO for client components in Next.js?

You cannot export metadata from client components. Keep your page.tsx as a server component and export metadata there. Client interactivity goes in child components marked with 'use client'.

Related checklists

Pre-Launch SEO Checklist

14 items

Structured Data Checklist

12 items

Performance SEO Checklist

11 items

Automate this checklist

Stop checking manually. Indxel validates SEO rules on every build and blocks broken deploys.

$npx indxel check
Get startedBrowse all checklists
Indxel

SEO validation that runs in your terminal and blocks bad deploys.

GitHubnpm

Product

  • Documentation
  • Pricing
  • Plus Plan
  • CI/CD Guard
  • Indexation
  • Free Tools
  • Blog

Comparisons

  • vs Semrush
  • vs Ahrefs
  • vs Moz
  • vs Screaming Frog
  • All comparisons

Integrations

  • Vercel
  • GitHub Actions
  • Netlify
  • Docker
  • All integrations

Resources

  • Frameworks & use cases
  • Next.js
  • For freelancers
  • For agencies
  • SEO Glossary

Built with care. MIT Licensed.

PrivacyTermsLegalContact