Skip to content
Mert Yılmaz
CVTürkçeContact
All posts

A technical SEO checklist for Next.js (App Router)

Published

Short answer

Give every page a unique title, description and canonical URL with the Metadata API, render content on the server, add a sitemap and robots file, use hreflang for each language, add JSON-LD structured data, keep Core Web Vitals healthy, and verify everything in Google Search Console. Restructuring the frontend at SubmitApp raised the Lighthouse SEO score from 50% to 98%, and I handle technical SEO and Search Console for Harmoni Yazılım.

1. A unique title, description and canonical for every page

Use the Metadata API to generate a unique title and description per page. If the same content is reachable at several URLs, use canonical to name the main one.

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

2. Render content on the server

Generate the text you want search engines to see on the server or at build time. Content that only loads in the browser can be indexed late or incompletely. Static pages are fast, too.

3. Sitemap and robots

In the App Router, app/sitemap.ts and app/robots.ts generate these as code. Put only the URLs you want indexed in the sitemap.

import type { MetadataRoute } from "next";

export default function sitemap(): MetadataRoute.Sitemap {
  return [
    { url: "https://example.com/tr", lastModified: "2026-10-21" },
    { url: "https://example.com/en", lastModified: "2026-10-21" },
  ];
}

4. hreflang on multilingual sites

Give each language its own URL (for example /tr and /en) and link the pages to each other with alternates.languages. If the language is chosen only by a cookie, search engines never see the other language.

alternates: {
  canonical: "/en",
  languages: { tr: "/tr", en: "/en", "x-default": "/" },
}

5. Structured data

Use JSON-LD to say plainly what the page is: Person and ProfessionalService for a person or business, BlogPosting for articles, FAQPage for question-and-answer blocks. Structured data doesn't guarantee rankings, but it helps search engines and AI summaries understand the content correctly.

6. Performance and Core Web Vitals

  • Generate pages statically wherever you can.
  • Load fonts with next/font and drop the weights you don't use.
  • Size images with next/image and give them dimensions so the layout doesn't shift.
  • Avoid unnecessary client-side JavaScript.

7. Verify in Search Console

Add the site to Google Search Console, submit the sitemap and check important URLs with the URL inspection tool. The indexing report shows which pages are left out and why.

Questions

Is Next.js SEO-friendly out of the box?
Server-rendered content helps but isn't enough. You still have to set the title, description, canonical, sitemap and hreflang yourself.
Why shouldn't a multilingual site pick the language with a cookie?
Search engines don't send cookies. Without a separate URL per language, bots only see the default one.
How long do SEO results take?
There's no fixed time. For new sites it is usually weeks to months and depends on the competition.

I do this kind of work

Written by Mert Yılmaz, freelance fullstack developer.