Fimo
Back to blog
Marketing

Next.js SEO Checklist: Your Site Renders on the Server, So Why Isn't It Ranking?

Next.js SEO Checklist: Your Site Renders on the Server, So Why Isn't It Ranking?
5 minutes

A simplified Next.js SEO checklist. Coding agents usually skip these six things even with a server-rendered nextjs site.

Key Takeaways

  • Next.js renders your pages on the server, one of six things that decide whether a page ranks and gets cited, and the only one nobody has to ask for.
  • The other five, a title per page, a sitemap and robots file on the live domain, one address per page, JSON-LD from the page's own content and next/image on every picture, are a sentence each in the Next.js SEO checklist below.
  • Ask your agent to prerender every public page, because pages built per visit send their title after the first chunk of HTML to anything off Next.js's built-in bot list, which doesn't name the ChatGPT, Claude or Perplexity crawlers.

Coding agents reach for Next.js the moment a prompt mentions a blog or SEO, and rightly, because it builds every page on the server and hands crawlers finished HTML. That reputation is why so many founders sit a month after launch with a site built in an afternoon (Webflow never saw it coming) and a Search Console full of pages Google has seen and shelved.

Rendering is one of six things that decide whether Next.js SEO works, and the only one the framework does by itself. The other five are a few lines of code each, an agent skips them unless it's told, and this post is what to tell it.


Body

Is Next.js good for SEO? Yes, for rendering

Next.js builds pages on the server by default, so Google and the crawlers behind ChatGPT and Perplexity get your words on the first request instead of an empty shell to fill by running JavaScript. The evidence on which crawlers run JavaScript is in our JavaScript SEO post.

Six Next.js SEO best practices your agent skipped

The words load after the page does

Every page in the App Router, the folder layout current Next.js projects use, is built on the server unless its file starts with "use client", which turns it into a Client Component, code that runs in the visitor's browser. Agents flip that switch the moment a section needs a button, and if the same component also fetches the copy, the server sends a placeholder and the words arrive later, which for a crawler that doesn't run JavaScript means never.

Every page has the same title, or none

A page's metadata, the title and description Google shows in results, comes from one export per page, a metadata object or a generateMetadata function, and only from server-built pages, so a "use client" page loses its title with its words. Agents set it once in the root layout and forget the pages, so a 40-page site turns up in Google as 40 results called "Acme", which Google's title guidance calls boilerplate and rewrites. Pages built fresh on each visit have a further catch, because their title can arrive after the first chunk of HTML unless the visitor is on Next.js's built-in bot list, which names Bingbot, Twitterbot, Slackbot and Google's secondary crawlers but, as of 21 September 2026, not GPTBot, ClaudeBot or PerplexityBot. Prerendered pages, built once ahead of time, have the title baked in, which is why the prompt below asks for them.

There's no sitemap, or it points at the wrong address

A sitemap is the list of pages you want indexed and a robots file tells crawlers what they may fetch, and Next.js serves both from one file each, sitemap.ts and robots.ts, but nothing creates them until asked, and Google says a sitemap matters most for a new site with few external links, which is yours. The subtler failure is an agent hardcoding the base address, so the sitemap lists localhost or the preview deployment, which Vercel marks noindex, a map of pages Google was told to ignore.

Every page answers at two addresses

Google treats yoursite.com/pricing and its www, http and trailing-slash versions as four pages until something tells it otherwise, and if nothing does, it picks one itself, which is what "Duplicate without user-selected canonical" in Search Console means. Next.js redirects /about/ to /about on its own, and the rest is redirects plus the canonical tag, one line in the head that says which address counts, set in the same metadata export, which agents leave out because nothing visibly breaks without it.

There's no structured data, or it describes last quarter

Structured data is a block of JSON-LD, a small script that tells machines what the page is, who wrote it and when, and Next.js recommends a script tag straight in the page. Google calls JSON-LD its preferred format, insists it match what's visible, and lists it among the fundamentals for AI Overviews, no special schema needed. Agents skip it, or generate it once with a placeholder author and a launch date that never changes. Once machines can read you, our website GEO checklist covers getting cited.

Your hero image is four megabytes and Google noticed

Core Web Vitals are Google's three speed scores, how fast the biggest thing on screen appears (under 2.5 seconds), how quickly the page responds to a tap (under 200 milliseconds) and how much it jumps while loading (under 0.1), which Google says line up with what its ranking systems reward. Next.js ships an Image component that resizes, compresses and lazy-loads pictures and holds their space, and an agent that pasted a plain img tag with a 4,000-pixel hero got none of that.

The Next.js SEO checklist 

What goes wrongIn plain EnglishHow you check itWho fixes it 
Content fetched in Client ComponentsThe words arrive after the page, so some crawlers never see themView Page Source, search for a full sentence from your heroYour agent, one prompt
Same title everywhere, or metadata streamed lateGoogle shows 40 results with one name, and pages built per visit send the title after the first chunk of HTML to crawlers off Next.js's bot listSearch Google for site:yourdomain.com and read the titlesYour agent, generateMetadata plus prerendering
No sitemap or robots, or a sitemap on the wrong domainGoogle has no map, or a map of pages it's told to ignoreOpen yourdomain.com/sitemap.xml and /robots.txt in a browserYour agent, sitemap.ts and robots.ts
Two addresses per page, no canonicalGoogle picks a winner for you and drops the restType the www, http and slash variants and watch whether they redirect, then check Search Console's canonicalYour agent, redirects plus metadata alternates
No JSON-LD, or stale JSON-LDMachines don't know what the page is, or believe last quarter's versionPaste any page into the Rich Results TestYour agent, generated from page data
Plain img tags, huge heroSlow first paint, page jumps, Core Web Vitals in the redPaste any page into PageSpeed InsightsYour agent, next/image

The six Next.js SEO checks for an AI-built site, accurate as of September 2026.

The bottom line is, if you never asked your agent for these, assume you have all six until the checks say otherwise.

The prompt fix: paste this before the next build

Everything above collapses into one paragraph for Claude Code, Codex or Cursor, one sentence per item.

"Build this site with the Next.js App Router. Fetch all page content in Server Components and limit 'use client' to interactive components. Give every public page its own title and meta description through generateMetadata with a title template in the root layout, a self-referencing canonical through metadata alternates, and JSON-LD generated from the same data as the visible content. Add sitemap.ts and robots.ts that use the production domain. Redirect www and http to one https host. Use next/image for every image with width, height and alt set. Prerender every public page, and before you finish, fetch a built page without a browser and show me that the title, description, canonical, JSON-LD and body copy are all in the initial HTML."

For the code behind each line, Strapi's Next.js SEO guide covers both routers in more depth than we do here.

How Fimo keeps your Next.js SEO working after launch

The six checks come undone with every page an agent or a teammate adds, so we built Fimo to take that upkeep off your desk.

Here's how it works.

You connect the repository your coding agent built, whatever agent wrote it and whatever stack it chose, Next.js among many others. For an existing site that's one command, npx fimo@latest link, which doesn't replace your code or change your framework.

Fimo serves the site server-rendered, with titles, descriptions and social cards on every page, never blank or duplicated, and a sitemap and robots file generated and kept in sync as pages ship and retire.

The SEO audit goes over titles, descriptions and internal links on the schedule you set, the broken-link sweeper walks every URL, the post-deploy check runs after every release, and asset optimisation is an action the agent stops and asks you about. Core Web Vitals stay yours to read in Search Console.

Every run lands in its own branch with a report, a preview and a diff, and nothing reaches production until someone on your team merges it.

Why this doesn't get done, and what a month costs

The site already runs on Next.js, so the SEO box looks ticked, the person who prompted it went back to running the company, and agents don't volunteer any of this because a preview looks finished without it. Meanwhile every post you publish enters Google under the homepage's title with no canonical, and since AI Overviews only draw on indexed pages eligible for a snippet, a duplicate never gets the chance.

Rendering was the first job of six

Next.js made your pages readable, not findable, and the five jobs it left are a prompt away. Try Fimo for free and let the agents keep the list ticked while you run the company!


FAQ

Common questions

Is Next.js good for SEO?

Next.js's own SEO course, the clearest walkthrough of the rendering modes, calls static generation "probably the best" for SEO and client-side rendering "perfect for data heavy dashboards", and since you can mix them per page, it depends what your agent picked for each one.

Is Next.js better than React for SEO?

Next.js is React with a server in front of it, so its pages arrive finished while a plain React app built with Vite arrives as a shell the browser fills in. If yours is the second kind, our React SEO post covers the three ways out.

Is Next.js App Router SEO different from the Pages Router?

Same tags, different files. The Pages Router set them with a Head component in each page, the App Router uses metadata exports plus files for the sitemap, robots and social images, so an older tutorial points your agent at the wrong files.

How do I check what Google sees on a Next.js page?

Search Console's URL Inspection tool shows the HTML Google fetched, a screenshot and the canonical Google chose, and its live test shows whether a fix worked before the next crawl, though not duplicate or canonical status.

Can AI crawlers read a Next.js site?

Yes, when the words are in the initial HTML, which Server Components give you, and your robots file lets them in, since a robots.ts copied from a 2023 template may still block GPTBot. AI Overviews use Googlebot itself, so blocking Google-Extended doesn't remove you from them.