TL;DR
Your Next.js site looks fine in the browser but Google does not index subpages — in 2026 the usual causes are missing sitemap, noindex in metadata, client-only rendering without HTML in the first response and wrong canonicals across locales. Below: GSC setup, URL Inspection step by step, sitemap.ts in App Router, SSR/SSG checklist and common errors after deploy on DevStudioIT Cloud.
Who this is for
- Marketing seeing “Discovered – currently not indexed” in Search Console
- Next.js developers (App Router) responsible for technical SEO
- Companies after migration or redesign with organic traffic drop
- Multilingual site owners with hreflang issues
Keyword (SEO)
google search console indexing nextjs, url inspection sitemap, nextjs ssg ssr seo 2026, site not indexed google
GSC — first steps after deploy
- Add property (domain
example.comor URL prefixhttps://www.example.com) - Verify DNS TXT or HTML file — record stays permanently
- Submit
/sitemap.xmlunder Sitemaps - Check Pages → Indexed vs Not indexed (filter by reason)
- For key URLs: URL Inspection → “Test live URL” → “Request indexing”
Do not spam “Request indexing” for hundreds of URLs — Google has daily limits. Prioritize: homepage, services, top blog, campaign landings.
URL Inspection — reading results
| Status | Meaning | Typical action |
|---|---|---|
| URL is on Google | OK | Monitor CTR in Performance |
| Crawled – currently not indexed | Quality / duplicate / thin | Strengthen content, canonical |
| Discovered – not indexed | Crawl budget / internal links | Menu links, sitemap |
| Excluded by ‘noindex’ | Tag in HTML | Remove robots: { index: false } |
| Soft 404 | Empty page to Google | Content + 200, not fake 404 |
| Redirect error | Redirect chain | Max 1 hop 301 |
“View crawled page” → HTML tab: does Google see H1 and paragraphs, or only empty <div id="root">?
Next.js App Router — metadata and indexability
Server Components render HTML server-side by default — good for SEO. Problems start with 'use client' on the entire page without SSR fallback.
// app/en/services/page.tsx
import type { Metadata } from 'next';
export const metadata: Metadata = {
title: 'Services — DevStudio.it',
description: 'Corporate websites and Next.js apps for business.',
alternates: {
canonical: 'https://www.example.com/en/services',
languages: {
pl: 'https://www.example.com/pl/oferta',
en: 'https://www.example.com/en/services',
de: 'https://www.example.com/de/leistungen',
},
},
robots: { index: true, follow: true },
};
export default function ServicesPage() {
return (/* server-rendered content */);
}Avoid global noindex on staging — env leak to production is a classic. On DevStudioIT Cloud (devstudioit.cloud) staging uses a separate domain with robots.txt Disallow all.
SSR vs SSG vs ISR — what Google prefers
| Strategy | Next.js | Indexing | When |
|---|---|---|---|
| SSG | generateStaticParams |
Fastest crawl, stable HTML | Blog, services, FAQ |
| SSR | dynamic = 'force-dynamic' |
OK, slower crawl | Dashboard, personalization |
| ISR | revalidate: 3600 |
OK, cache + freshness | Case study listing |
| CSR only | entire page client | Risk empty HTML | Avoid on SEO URLs |
Corporate sites and blogs: SSG/ISR for 95% of URLs. SSR only where content depends on session.
Sitemap in App Router
// app/sitemap.ts
import { MetadataRoute } from 'next';
import { getBlogPosts } from '@/lib/content';
import { locales } from '@/i18n';
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const base = 'https://www.example.com';
const staticPaths = ['', '/services', '/contact'];
const entries: MetadataRoute.Sitemap = [];
for (const locale of locales) {
for (const path of staticPaths) {
entries.push({
url: `${base}/${locale}${path}`,
lastModified: new Date(),
changeFrequency: path === '' ? 'weekly' : 'monthly',
priority: path === '' ? 1 : 0.8,
});
}
}
const posts = await getBlogPosts();
for (const post of posts) {
entries.push({
url: `${base}/${post.locale}/blog/${post.slug}`,
lastModified: post.updated,
});
}
return entries;
}Submit in GSC: https://www.example.com/sitemap.xml. With ISR the sitemap refreshes on build — no manual entry per post (per project README).
robots.txt
// app/robots.ts
import { MetadataRoute } from 'next';
export default function robots(): MetadataRoute.Robots {
return {
rules: { userAgent: '*', allow: '/', disallow: ['/api/', '/admin/'] },
sitemap: 'https://www.example.com/sitemap.xml',
};
}Check GSC → Settings → robots.txt tester. Blocking /api/ is OK; blocking /_next/ only if you know why (Google needs JS/CSS).
Multilingual and hreflang
Same translationId in blog frontmatter (e.g. google-search-console-indexing-nextjs-2026) plus alternates.languages in metadata = consistent hreflang. Error: PL page canonical points to EN — Google indexes one version, rest show “Duplicate without user-selected canonical”.
Dynamic data (forms) in Branchly (branchly.cloud) does not affect crawl — public pages must not require login.
Core Web Vitals and indexing
CWV is not a direct “index switch”, but slow mobile LCP lowers crawl efficiency. After deploy on DevStudioIT Cloud:
next/imagewith priority on LCP- Font
display: swap - Avoid layout shift under cookie banner
GSC → Experience → Core Web Vitals — fix “Poor” URLs before mass request indexing.
Diagnostics — 10 checks when “nothing gets indexed”
curl -I URL— 200, not 403/401- View source — H1 in HTML (not only after hydration)
- Search
site:example.com— how many pages indexed - GSC Coverage — dominant exclusion reason
noindex/X-Robots-Tagin headers- Canonical points to another domain (staging leak)
- Sitemap contains 404 URLs
- Redirect loop www/apex
- Content <300 words on key landings
- No internal links to new subpages
FAQ
How long after request indexing?
From hours to 2 weeks — depends on domain authority. New domain slower than refresh on established one.
Does Google index Next.js JavaScript?
Yes — rendering queue. SSR/SSG gives faster, more reliable results than pure CSR.
Separate sitemap per locale?
One sitemap with all URLs + hreflang in metadata is enough for most projects.
Should /api/ be in sitemap?
No — do not index API. Only public HTML pages.
Staging on DevStudioIT Cloud — avoid indexing?
Basic auth, noindex in metadata, separate subdomain + Disallow in robots. Never same canonical as production.
CTA
Next.js site missing from Google or GSC shows hundreds of errors?
- Technical SEO audit — GSC, sitemap, SSR/SSG, DevStudioIT Cloud
- Technical SEO audit checklist — extended list
About the author
We build fast websites, web/mobile apps, AI chatbots and hosting setups — with a focus on SEO and conversion.
Recommended links
From theory to production — Branchly, our hosting stack and shipped work.
