Technical SEO with Next.js: A Practical Checklist
By Arash Latifi — Founder, The DevArt
Metadata, speed, Core Web Vitals and structured data — what I implement in every Next.js project for search visibility.
SEO has two halves: content and technical. Content writers handle the first; but if the technical half is broken, even the best article never gets seen. I've seen businesses publish excellent content for months and never reach page one because of slow pages, duplicate metadata, or a half-broken sitemap. Here's the checklist I run through in every Next.js project — no unnecessary complexity, but with an eye on business outcomes.
Why does this checklist matter? Technical SEO is Google's trust infrastructure. If Google can't crawl fast, understand what each page is about, and know which version is canonical, it wastes crawl budget and your rankings slip. With Next.js we can get that infrastructure right from day one, not as a patch later.
1. Complete, unique metadata per page
With the Next.js App Router, generateMetadata lets you build title, description and canonical URL per page. Three simple rules I never skip:
- One unique title per page, containing the primary keyword — never copy titles across pages
- Meta descriptions that genuinely earn the click — not keyword stuffing
- Correct canonicals, especially with multilingual versions
For multi-locale sites, don't forget alternates.languages; that single hreflang tag tells Google which audience each language serves. For example, the Persian page with fa-IR and the English page with en-US should reference each other reciprocally. Without hreflang, Google may show the wrong language version and bounce rate climbs.
Practical tip: keep titles under 60 characters and descriptions between 140–160 characters. Use dynamic variables for product or blog pages — e.g. "{Product} | Buy {Category} | {Brand}" — to stay scalable. And always populate openGraph and twitter inside generateMetadata; social sharing is an indirect but real visibility signal.
2. Speed: the biggest SEO winner
Google measures speed through Core Web Vitals. Three numbers I check weekly in Search Console:
- LCP (largest contentful paint) under 2.5s
- CLS (layout shift) under 0.1
- INP (interaction latency) under 200ms
In Next.js you fix these with a few good habits:
- Use
next/imagefor all images — automatic sizing, lazy loading, modern AVIF/WebP, andpriorityonly for the hero image - Fonts via
next/font— no FOUT, no extra requests, withdisplay: optionalto avoid shifts - Keep client components small; anything without interaction renders on the server. Every extra kilobyte of JavaScript hurts INP
- Smart caching:
fetchwithrevalidateand Route Segment Config for semi-dynamic pages
From a marketing perspective, speed directly converts. Google data shows every 0.1s delay in LCP can cut conversion by up to 8%. A user who waits 4 seconds leaves before seeing your offer. That's why I treat speed not as a tech metric but as the first step of the sales funnel.
For monitoring, use Lighthouse CI on every pull request and Vercel Analytics or CrUX for real-user data. Lab numbers are useful, but field data is what actually decides rankings.
3. Structured data (Schema)
Structured data is the shared language between you and Google. With JSON-LD you tell Google what the page is about and increase your chance of rich results:
- Local businesses:
LocalBusinessorProfessionalServicewith address, hours and rating - Articles:
Articlewith publish date, author and hero image - FAQs:
FAQPage— a chance to appear as an accordion in results - Breadcrumbs:
BreadcrumbListfor showing navigation in snippets
Implementation is simple: one script tag with JSON inside a server component. On a blog page I populate Article with headline, image and author; on a contact page I populate ProfessionalService with address and telephone. This helps Google understand your entity and show you better in the Knowledge Graph.
Common mistake: copying one generic schema to every page. Each page needs its own accurate schema and values must exactly match the visible content, otherwise Google ignores it.
4. Sitemap and robots: two small files, big impact
Two small files that make a big difference and are often forgotten:
sitemap.tsin Next.js lists every indexable URL with its last-modified date. Include only indexable pages — remove 404s, drafts and filter parametersrobots.tsdeclares what should be indexed and where the sitemap lives. For staging, useDisallow: /so test versions never get indexed
For large sites, split the sitemap into chunks and build a sitemap index. And always register the sitemap in Search Console and check Coverage errors weekly. A URL that appears in the sitemap but whose canonical points elsewhere sends a contradictory signal.
5. Rendering, indexability and crawl experience
Next.js balances SSR, SSG and ISR beautifully. For SEO my rule is: anything that should be indexed must be in the initial HTML — not after JavaScript hydration. So:
- Render main content, headings and internal links on the server
- Use
loading.tsxandSuspenseto help crawlers understand structure, not to hide content - Build real internal links with
<Link>, notonClickon adiv - Handle 404s and redirects with
notFound()andredirect()so the correct status code is returned
Also auto-generate canonical, noindex for low-value pages (like internal search results) and hreflang from the locale. This focus keeps crawl budget on money pages.
6. Where technical meets marketing
In real projects, technical SEO without solid information architecture is incomplete. Visual hierarchy, heading structure and even the placement of the contact button affect crawlability and conversion. If H1s are duplicated or key content stays inside closed tabs, Google undervalues it.
When architecture is SEO-driven from the start, every section has a job: the hero delivers the core message in 5 seconds, services are marked up with correct schema, the blog interlinks as topic clusters, and the footer shortens the path to money pages. Result? Users convert faster and Google understands faster which query you should rank for.
For businesses this means SEO is not a cost but an investment. You build the right architecture once and earn organic traffic for months without ad spend — provided technical and design are aligned from day one.
7. Real content is still king
Technical SEO opens the door; content keeps the guest inside. An active blog answering real customer questions is the strongest long-term ranking tool — and with Next.js you can manage it with MDX or any headless CMS.
For each topic cluster, build a pillar page and link sub-articles to it with natural anchors. Write titles as questions — exactly what users search — and give a concise answer at the top, then detail below. This pattern pleases users and boosts your chance of Featured Snippets.
8. Final pre-launch checklist
Before every deploy I tick these 10:
- Unique title, description and canonical
- Reciprocal hreflang for fa/en
- Images via
next/imagewith descriptivealt - Fonts via
next/fontwith no external loads - Valid JSON-LD (tested with Rich Results Test)
- Sitemap and robots without junk URLs
- Single unique H1 and logical H2/H3 hierarchy
- Descriptive internal anchors (not "click here")
- Green Core Web Vitals in PageSpeed Insights
- Custom 404 and 301 redirects for legacy URLs
Bottom line
Technical SEO isn't magic; it's a set of correct, repeatable practices that, when paired with solid architecture, brings both rankings and customers. If you have — or plan to build — a Next.js project and want SEO baked into the architecture from day one, not patched on later, I can help. In DevArt I weave SEO from wireframe to deploy so your site is understandable to Google and trustworthy to users from week one.
Ready to rank? Get a free technical SEO audit — I'll send an initial report and roadmap within 48 hours, no strings attached, with a clear proposal for the next step.