Skip to main content
Back to Blog
SEO 7 min read

Technical SEO Checklist for Next.js Websites

A practical technical SEO checklist for Next.js: server-rendered HTML, metadata, canonicals, sitemaps, structured data, Core Web Vitals, status codes and the testing tools that prove it all works.

Waqar Sharif Yar

Founder & CEOUpdated

Quick Takeaway

Technical SEO for a Next.js site means making sure every important page returns its full content in server-rendered HTML, has a unique title, description and canonical URL, is listed in a sitemap, returns the right status code, passes Core Web Vitals, and carries valid structured data. Then you verify each of these with real tools, not assumptions.

Key takeaways

  • Put content in the initial HTML. Do not make crawlers execute JavaScript to see your main text.
  • Use the Metadata API for titles, descriptions, canonicals and social tags, so they are generated on the server.
  • Give every page one canonical URL, and keep trailing slashes, redirects and sitemap entries consistent with it.
  • Treat Core Web Vitals as field data from real users, not just a Lighthouse score.
  • Test with Search Console, the Rich Results Test and a plain "view source" check.

Next.js gives you the tools to build a fast, search-friendly site, but it will not do the SEO for you. Plenty of well-built Next.js sites lose traffic to avoidable problems: content that only appears after JavaScript runs, duplicate URLs, missing canonicals, or pages that return the wrong status code.

This checklist covers what to verify, how the relevant Next.js feature helps, and how to test it. It is the same foundation we build into client sites through our SEO and web development services, and it underpins the AI search optimization work that sits on top.

Next.js features and the SEO job they do

Next.js App Router features mapped to technical SEO tasks
SEO taskNext.js featureWhat to check
Titles, descriptions, social tagsmetadata export or generateMetadataUnique per page, rendered in the server HTML
Canonical URLalternates.canonical in metadataAbsolute HTTPS URL, matches your preferred form
XML sitemapapp/sitemap.tsOnly canonical, indexable, 200-status URLs
Crawl rulesapp/robots.tsNothing important blocked; sitemap declared
Correct status codesnotFound() and a not-found pageMissing pages return 404, not 200
Social preview imagesopengraph-image files or metadata imagesEvery shareable page has one
Fontsnext/fontSelf-hosted, no layout shift on load
Imagesnext/imageSized, lazy-loaded below the fold, priority for the LCP image

1. Make sure content is in the initial HTML

Googlebot can render JavaScript, but rendering is a second, slower step and it can fail on heavy or broken scripts. Many other crawlers, including a number of AI crawlers, may not run JavaScript at all. The safe approach is to have your headings, body text, links and structured data in the HTML the server sends. In Next.js that means server components, static generation or server-side rendering for anything you want indexed, with client components reserved for interactivity.

The 10-second test

Fetch your page with a plain HTTP request, or use "view source" in the browser (not the inspector). If your headline and main paragraphs are in that raw HTML, crawlers can read them. If the body is an empty container, they may not.

2. Titles, descriptions and canonicals

Use the Metadata API so these are generated on the server. Each indexable page needs its own title and meta description, an absolute canonical URL, and one clear H1.

export const metadata = {
  title: 'Technical SEO Checklist for Next.js',
  description: 'What to verify, and how to test it.',
  alternates: { canonical: 'https://www.example.com/blog/technical-seo/' },
}
A minimal metadata export with a canonical URL

Set a metadataBase in your root layout so relative URLs resolve correctly, and use generateMetadata for dynamic routes such as blog posts.

3. One URL per page

  • Pick one hostname (with or without www) and redirect the other to it.
  • Pick a trailing-slash convention and enforce it. Next.js has a trailingSlash setting, and your canonicals, sitemap and internal links should all match.
  • Strip or canonicalise tracking parameters so the same page is not indexed under many URLs.
  • Redirect old URLs with a permanent redirect rather than deleting them.

Static exports need host-level redirects

If you build with output "export", Next.js config redirects and headers do not run, because there is no server. Set redirects and security headers at your host or CDN instead, for example in a vercel.json file or your web server configuration.

4. Sitemap and robots

Generate the sitemap from the same data as your pages, so a new page cannot be forgotten. List only URLs that are canonical, indexable and return 200. Declare the sitemap in robots.txt, and check that robots.txt is not accidentally blocking CSS, JavaScript or important sections. If you want to decide how AI crawlers may use your content, see our guide to robots.txt and llms.txt for AI crawlers.

5. Structured data

Add JSON-LD in a server component so it is present in the HTML. Use types that match the page: Organization and WebSite site-wide, Article or BlogPosting for posts, BreadcrumbList for navigation, and Service for service pages. Only mark up what is visibly on the page, and validate it before release.

Be realistic about rich results

Google now limits FAQ rich results to well-known government and health sites, so FAQ markup will not usually produce a special result for a business site. Question-and-answer sections are still valuable for readers and for answer engines, and valid markup helps machines understand the page.

6. Core Web Vitals

Core Web Vitals and the thresholds Google treats as good
MetricMeasuresGood threshold
LCP (Largest Contentful Paint)How fast the main content appears2.5 seconds or less
INP (Interaction to Next Paint)How quickly the page responds to input200 milliseconds or less
CLS (Cumulative Layout Shift)How much the layout jumps around0.1 or less

These are judged on real-user field data, at the 75th percentile, so a perfect Lighthouse run does not guarantee a pass. Common Next.js wins are: keep the LCP element out of client-only animation, use next/font, size images, defer heavy components with dynamic imports, and avoid shipping large libraries to pages that do not need them.

7. Status codes and error pages

A page that does not exist should return a real 404, not a 200 with a friendly message (a "soft 404"). Use notFound() in dynamic routes and provide a helpful not-found page with links back to your main sections. Check that redirects are single hops, and that server errors do not return 200.

  • Use the Link component or plain anchors with real href values, so crawlers can follow them.
  • Do not rely on click handlers or router.push for navigation you want indexed.
  • Make sure every important page is linked from somewhere reachable, not just the sitemap.
  • Use descriptive anchor text rather than "click here".

How to test all of this

  1. Step 1: View the raw HTML

    Confirm the H1, main text, links and JSON-LD are present without running scripts.

  2. Step 2: Use Search Console URL Inspection

    Check the rendered HTML, the detected canonical and whether the page is indexed.

  3. Step 3: Run the Rich Results Test and a schema validator

    Confirm structured data parses without errors.

  4. Step 4: Check PageSpeed Insights field data

    Look at the real-user Core Web Vitals, not only the lab score.

  5. Step 5: Crawl your own site

    Look for broken links, redirect chains, duplicate titles and pages missing from the sitemap.

If you would like this audited on your own site, our SEO team runs exactly this checklist, and you can book a free strategy call to start. Getting the foundations right also helps everything covered in our post on how AI search engines choose what to cite.

Technical SEO checklist: common questions

Technical SEO gets pages crawled; content gets them ranked. See our guide to writing blog posts that rank in Google and AI search. Planning a rebuild? Follow our website redesign SEO checklist so you keep the rankings you already have.

Is Next.js good for SEO?

Yes, when used well. It can send fully rendered HTML, manage metadata on the server, generate sitemaps and optimize fonts and images. It does not guarantee good SEO by itself, since problems like duplicate URLs, missing canonicals and heavy client-side rendering are still possible.

Can Google index client-side rendered React?

Google can render JavaScript, but it is a slower second step and can fail on heavy or broken scripts. Server-rendered or statically generated HTML is safer and faster to index, and is also friendlier to other crawlers that may not run JavaScript.

How do I set a canonical URL in Next.js?

Use the alternates.canonical field in the Metadata API, with an absolute HTTPS URL that matches your preferred hostname and trailing-slash format. Use generateMetadata for dynamic routes.

What are good Core Web Vitals scores?

Google treats LCP of 2.5 seconds or less, INP of 200 milliseconds or less and CLS of 0.1 or less as good, measured on real-user data at the 75th percentile.

Do I need structured data for SEO?

It is not required to rank, but it helps search engines and other machines understand what a page is. Add types that match the page, keep them accurate and validate them, but do not expect every type to produce a rich result.

Free: 100 AI Automation Ideas for Small Business

A practical checklist of 100 tasks you can automate, grouped by department. Enter your email for the printable version and occasional tips.

No spam. Unsubscribe any time by replying “unsubscribe”. See our privacy notice.

Sources and further reading

Services related to this article

SEO 7 min read

AI Crawlers in robots.txt: Allow or Block (+ llms.txt)

GPTBot, ClaudeBot, PerplexityBot, Google-Extended: who is crawling your site and why. Learn which AI crawlers to allow, which to block, what llms.txt really does, and what matters more for AI visibility.

SEO 6 min read

Website Redesign Without Losing SEO: A Step-by-Step Checklist

How to redesign or rebuild a website without losing Google rankings and traffic: inventory what works, map and redirect old URLs, test before launch, and monitor the move, based on Google's own site-move guidance.

Need a Hand?

Need HelpImplementing This?

Reading about it is one thing, shipping it is another. Book a free strategy call and we will help you put it into practice in your business.

  • Free 30-minute strategy call
  • No commitment required
  • Reply by email or WhatsApp