Partie 5 sur 22

sitemap.ts et robots.ts : conventions de fichiers plutôt que XML manuel

sitemap.ts et robots.ts : conventions de fichiers plutôt que XML manuel

L'App Router génère les deux à partir de code typé : fini le XML statique périmé :

// app/sitemap.ts
import type { MetadataRoute } from "next";

export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
  const posts = await getPosts();

  const postEntries = posts.map((post) => ({
    url: `https://example.com/en/blog/${post.slug}`,
    lastModified: post.updatedAt,
    alternates: {
      languages: {
        pl: `https://example.com/pl/blog/${post.plSlug}`,
        ru: `https://example.com/ru/blog/${post.ruSlug}`,
      },
    },
  }));

  return [{ url: "https://example.com", priority: 1 }, ...postEntries];
}
// app/robots.ts
import type { MetadataRoute } from "next";

export default function robots(): MetadataRoute.Robots {
  return {
    rules: [{ userAgent: "*", allow: "/", disallow: ["/api/", "/admin/"] }],
    sitemap: "https://example.com/sitemap.xml",
  };
}

Des détails qui comptent :

  • lastModified doit être la vraie date de mise à jour du contenu, et non new Date() à chaque build : mentir sur la fraîcheur apprend à Google à ignorer ce champ.
  • Plus de 50 000 URL ? Utilisez generateSitemaps() pour découper en plusieurs fichiers.
  • Ne bloquez pas le CSS/JS dans robots.txt : Google en a besoin pour rendre la page.
  • Un Disallow dans robots.txt ne retire pas les pages de l'index : il arrête seulement l'exploration. Pour qu'une page n'apparaisse pas dans les résultats, utilisez noindex via les métadonnées (robots: { index: false }) et ne la bloquez pas dans robots.txt (une page bloquée ne peut pas être lue, donc personne ne verra le noindex).

Checklist :

  • sitemap.ts ne contient que des adresses canoniques, indexables, au statut 200
  • lastModified reflète de vrais changements
  • Sitemap soumis dans Google Search Console et Bing Webmaster Tools
  • noindex vs robots.txt utilisés correctement (ils règlent des problèmes différents)

Vous préférez que quelqu'un s'en charge pour vous ?

J'audite et je corrige le SEO technique des sites Next.js : indexation, vitesse, hreflang et visibilité dans les moteurs d'IA.

Service de SEO technique