vibecheck0.3.0
Search visibilityseositemap-missingwarning

Missing or invalid sitemap.xml in Next.js

A sitemap hands search engines a machine-readable list of your URLs plus last-modified dates, so they index new and updated pages faster and more completely. Without one, crawlers have to discover every page by following links, which misses orphaned pages and slows indexing. Client-rendered SPAs are hit hardest because there are few crawlable links to follow.

Symptoms

  • /sitemap.xml returns a 404 or your SPA’s index.html
  • New pages take a long time to appear in search
  • Search Console reports no submitted sitemap
  • Orphaned pages (no inbound links) never get indexed

How VibeCheck catches it

In your widget · Problems

warningseoMissing or invalid sitemap.xml

To your coding agent · MCP

agent › get_detected_issues
{ detector: "seo", issue: "Missing or invalid sitemap.xml", threshold: "/sitemap.xml is not a 2xx XML response" }

The same string in your widget and in your agent’s context — no screenshot, no copy-paste.

Root causes

  • No sitemap is generated at build or request time
  • The SPA dev server returns index.html for /sitemap.xml, so it is not real XML
  • The sitemap exists but is not referenced from robots.txt

The fix for Next.js

Add app/sitemap.ts exporting a default function that returns a MetadataRoute.Sitemap array. Next serves it at /sitemap.xml with the right content type; make it dynamic to include data-driven routes.

app/sitemap.tsts
import type { MetadataRoute } from 'next'

export default function sitemap(): MetadataRoute.Sitemap {
  return [
    { url: 'https://acme.com/', lastModified: new Date() },
    { url: 'https://acme.com/pricing' },
  ]
}

Next.js docs →

Steps

  1. Generate an XML sitemap of your indexable URLs at build or request time
  2. Serve it at /sitemap.xml with an application/xml content type
  3. Add a Sitemap: line to robots.txt and submit it in Search Console

See the general, framework-agnostic fix →

FAQ

Do small sites need a sitemap?
A well-linked small site can be crawled without one, but a sitemap still speeds up discovery of new and updated pages and is essential for SPAs with few crawlable links.
Why does VibeCheck flag my sitemap as invalid?
The probe treats /sitemap.xml as missing unless it responds 2xx with an XML content type. A SPA dev server returning index.html for unknown paths reads as “not a real sitemap”.
Should I reference the sitemap in robots.txt?
Yes. Add a “Sitemap: https://acme.com/sitemap.xml” line to robots.txt so crawlers find it even before you submit it in Search Console.