SEONext.jsBest Practices

The Next.js SEO checklist for 2026: what actually matters

An opinionated, practical SEO checklist for Next.js apps. Skip the 200-item audits. This is the 10% of work that delivers 90% of the results for modern sites.

By Reactify Solutions10 min read
The Next.js SEO checklist for 2026: what actually matters

Most SEO audits produce 200-item checklists that nobody ever finishes. This is not that. This is the 10% of the work that delivers 90% of the results for a typical Next.js site in 2026, in the order we would actually do it on a real project.

1. Nail the Metadata API on every route

Every page.tsx should export either metadata or generateMetadata with at minimum:

  • title. Unique per page, 50 to 60 characters.
  • description. Unique per page, 150 to 160 characters, sells the page, not the company.
  • alternates.canonical. Prevents duplicate-content penalties when URLs pick up UTM parameters.
  • openGraph and twitter. Title, description, image. Without these, your links look terrible in WhatsApp, Slack, and LinkedIn.

Set a metadataBase URL in the root layout so every relative URL resolves correctly. Use the title.template option so page titles get a consistent suffix without repeating it.

2. sitemap.ts and robots.ts, do not skip these

Next.js App Router lets you generate both from code. A dynamic sitemap that enumerates your blog posts, product pages, or solution pages gets them discovered days faster than a static XML file you forgot to update.

app/sitemap.ts
typescript
export default async function sitemap() {
  const posts = await getAllPosts();
  return [
    { url: "https://example.com", priority: 1 },
    ...posts.map((p) => ({
      url: `https://example.com/articles/${p.slug}`,
      lastModified: new Date(p.publishDate),
      priority: 0.7,
    })),
  ];
}

In robots.ts, disallow paths like /signin, /api, and preview routes. Allow everything else.

3. Structured data for the things that matter

JSON-LD @graph in your root layout for Organization and WebSite. Then, per page type, add whichever schema actually describes your content.

  • BlogPosting on blog detail pages, with datePublished, author, and image.
  • Product or SoftwareApplication for product pages.
  • BreadcrumbList on anything nested. It feeds Google's breadcrumb rich result.
  • FAQPage if you have real FAQs. This one still triggers rich results for a lot of queries.

Test everything in Google's Rich Results Test before shipping. Invalid schema is worse than no schema.

4. Core Web Vitals, the cheap wins first

Core Web Vitals are a ranking signal. The wins that matter for a typical Next.js site:

  • next/image everywhere. Set priority on the LCP image, set explicit width and height, and let Next serve AVIF or WebP.
  • next/font for all web fonts. Self-hosted, with display: swap. Kills the flash of unstyled text and cuts layout shift.
  • Preload the LCP image if it is from a remote host that Next cannot serve through its own image pipeline.
  • Dynamic import heavy client components. Calendars, chart libs, code editors. Do not ship them in the initial bundle.

Measure in production, not locally. Use PageSpeed Insights on real URLs and check the Chrome UX Report (CrUX) data. That is what Google actually uses.

5. generateStaticParams and generateMetadata on dynamic routes

For any dynamic route with a known finite set of pages (blog posts, products, solutions, categories), add generateStaticParams so they pre-render at build time. You get faster TTFB, cheaper serving, and Google crawls them as true static pages.

app/articles/[slug]/page.tsx
tsx
export async function generateStaticParams() {
  const posts = await getAllPosts();
  return posts.map((p) => ({ slug: p.slug }));
}

export async function generateMetadata({ params }) {
  const post = await getPost(params.slug);
  return {
    title: post.title,
    description: post.metaDescription,
    alternates: { canonical: `/articles/${post.slug}` },
    openGraph: { /* ... */ },
  };
}

6. Internal linking is still king

The single highest-impact activity in technical SEO is still internal linking. Blog posts should link to product pages and other posts. Product pages should link to supporting content. Your homepage should link to your money pages with descriptive anchor text, not "click here."

Use next/link, not raw anchor tags with window.location, so Next pre-fetches and Google sees the link graph clearly.

7. Analytics and Search Console from day one

You cannot improve what you do not measure. On day one of a new site:

  • Google Search Console. Verify with a DNS TXT record, submit the sitemap, set up email alerts for coverage issues.
  • GA4 or a privacy-respecting alternative like Plausible, Umami, or PostHog.
  • An uptime monitor. Downtime during crawl windows hurts rankings.

8. Common mistakes we still see in 2026

  • "image" or "logo" as alt text. Every image needs descriptive, keyword-informed alt text.
  • h1 on every section. One h1 per page, then h2, h3 in semantic order.
  • Catch-all robots.txt disallow. A missing file is better than a typo that blocks the whole site.
  • Infinite-scroll pagination without URL state. Google cannot crawl page 2 if page 2 does not have a URL.
  • Parameter-based canonicalization. ?utm_source= variants should canonicalize to the parameter-free URL.

The real unlock: content

Technical SEO gets you to a fair starting line. It does not rank pages that do not deserve to rank. After the checklist above, the highest-impact work is publishing genuinely useful content on topics you know better than anyone else, preferably backed by numbers from your own product or client work.

If you want a second opinion on a Next.js site's SEO foundation, or help scaling up a content program without churning out thin AI slop, we would love to talk.

ready when you are

Want to build something amazing? Let's bring it to life.

At Reactify Solutions, we turn your ideas into exceptional applications. From concept to deployment, we are here to make your vision a reality.