sitemap.xml
sitemap.(xml|js|ts)
est un fichier spécial qui correspond au format XML Sitemaps pour aider les robots d'indexation des moteurs de recherche à explorer votre site plus efficacement.
Fichiers Sitemap (.xml)
Pour les applications plus petites, vous pouvez créer un fichier sitemap.xml
et le placer à la racine de votre répertoire app
.
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://acme.com</loc>
<lastmod>2023-04-06T15:02:24.021Z</lastmod>
<changefreq>yearly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://acme.com/about</loc>
<lastmod>2023-04-06T15:02:24.021Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://acme.com/blog</loc>
<lastmod>2023-04-06T15:02:24.021Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
</urlset>
Génération d'un sitemap avec du code (.js, .ts)
Vous pouvez utiliser la convention de fichier sitemap.(js|ts)
pour générer programmatiquement un sitemap en exportant une fonction par défaut qui retourne un tableau d'URL. Si vous utilisez TypeScript, un type Sitemap
est disponible.
import { MetadataRoute } from 'next'
export default function sitemap(): MetadataRoute.Sitemap {
return [
{
url: 'https://acme.com',
lastModified: new Date(),
changeFrequency: 'yearly',
priority: 1,
},
{
url: 'https://acme.com/about',
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: 'https://acme.com/blog',
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.5,
},
]
}
export default function sitemap() {
return [
{
url: 'https://acme.com',
lastModified: new Date(),
changeFrequency: 'yearly',
priority: 1,
},
{
url: 'https://acme.com/about',
lastModified: new Date(),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: 'https://acme.com/blog',
lastModified: new Date(),
changeFrequency: 'weekly',
priority: 0.5,
},
]
}
Sortie :
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://acme.com</loc>
<lastmod>2023-04-06T15:02:24.021Z</lastmod>
<changefreq>yearly</changefreq>
<priority>1</priority>
</url>
<url>
<loc>https://acme.com/about</loc>
<lastmod>2023-04-06T15:02:24.021Z</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://acme.com/blog</loc>
<lastmod>2023-04-06T15:02:24.021Z</lastmod>
<changefreq>weekly</changefreq>
<priority>0.5</priority>
</url>
</urlset>
Génération d'un Sitemap localisé
import { MetadataRoute } from 'next'
export default function sitemap(): MetadataRoute.Sitemap {
return [
{
url: 'https://acme.com',
lastModified: new Date(),
alternates: {
languages: {
es: 'https://acme.com/es',
de: 'https://acme.com/de',
},
},
},
{
url: 'https://acme.com/about',
lastModified: new Date(),
alternates: {
languages: {
es: 'https://acme.com/es/about',
de: 'https://acme.com/de/about',
},
},
},
{
url: 'https://acme.com/blog',
lastModified: new Date(),
alternates: {
languages: {
es: 'https://acme.com/es/blog',
de: 'https://acme.com/de/blog',
},
},
},
]
}
Sortie :
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://acme.com</loc>
<xhtml:link
rel="alternate"
hreflang="es"
href="https://acme.com/es"/>
<xhtml:link
rel="alternate"
hreflang="de"
href="https://acme.com/de"/>
<lastmod>2023-04-06T15:02:24.021Z</lastmod>
</url>
<url>
<loc>https://acme.com/about</loc>
<xhtml:link
rel="alternate"
hreflang="es"
href="https://acme.com/es/about"/>
<xhtml:link
rel="alternate"
hreflang="de"
href="https://acme.com/de/about"/>
<lastmod>2023-04-06T15:02:24.021Z</lastmod>
</url>
<url>
<loc>https://acme.com/blog</loc>
<xhtml:link
rel="alternate"
hreflang="es"
href="https://acme.com/es/blog"/>
<xhtml:link
rel="alternate"
hreflang="de"
href="https://acme.com/de/blog"/>
<lastmod>2023-04-06T15:02:24.021Z</lastmod>
</url>
</urlset>
Génération de plusieurs sitemaps
Bien qu'un seul sitemap fonctionne pour la plupart des applications, pour les grandes applications web, vous pourriez avoir besoin de diviser un sitemap en plusieurs fichiers.
Il existe deux façons de créer plusieurs sitemaps :
- En imbriquant
sitemap.(xml|js|ts)
dans plusieurs segments de route, par exempleapp/sitemap.xml
etapp/products/sitemap.xml
. - En utilisant la fonction
generateSitemaps
.
Par exemple, pour diviser un sitemap en utilisant generateSitemaps
, retournez un tableau d'objets avec l'id
du sitemap. Ensuite, utilisez l'id
pour générer les sitemaps uniques.
import { BASE_URL } from '@/app/lib/constants'
export async function generateSitemaps() {
// Récupère le nombre total de produits et calcule le nombre de sitemaps nécessaires
return [{ id: 0 }, { id: 1 }, { id: 2 }, { id: 3 }]
}
export default async function sitemap({
id,
}: {
id: number
}): Promise<MetadataRoute.Sitemap> {
// La limite de Google est de 50 000 URLs par sitemap
const start = id * 50000
const end = start + 50000
const products = await getProducts(
`SELECT id, date FROM products WHERE id BETWEEN ${start} AND ${end}`
)
return products.map((product) => ({
url: `${BASE_URL}/product/${id}`,
lastModified: product.date,
}))
}
import { BASE_URL } from '@/app/lib/constants'
export async function generateSitemaps() {
// Récupère le nombre total de produits et calcule le nombre de sitemaps nécessaires
return [{ id: 0 }, { id: 1 }, { id: 2 }, { id: 3 }]
}
export default async function sitemap({ id }) {
// La limite de Google est de 50 000 URLs par sitemap
const start = id * 50000
const end = start + 50000
const products = await getProducts(
`SELECT id, date FROM products WHERE id BETWEEN ${start} AND ${end}`
)
return products.map((product) => ({
url: `${BASE_URL}/product/${id}`,
lastModified: product.date,
}))
}
En production, vos sitemaps générés seront disponibles à l'adresse /.../sitemap/[id].xml
. Par exemple, /product/sitemap/1.xml
.
En développement, vous pouvez visualiser le sitemap généré sur /.../sitemap.xml/[id]
. Par exemple, /product/sitemap.xml/1
. Cette différence est temporaire et suivra le format de production.
Consultez la référence API de generateSitemaps
pour plus d'informations.
Retours
La fonction par défaut exportée depuis sitemap.(xml|ts|js)
doit retourner un tableau d'objets avec les propriétés suivantes :
type Sitemap = Array<{
url: string
lastModified?: string | Date
changeFrequency?:
| 'always'
| 'hourly'
| 'daily'
| 'weekly'
| 'monthly'
| 'yearly'
| 'never'
priority?: number
alternates?: {
languages?: Languages<string>
}
}>
Historique des versions
Version | Changements |
---|---|
v13.4.5 | Ajout des attributs changeFrequency et priority aux sitemaps. |
v13.3.0 | Introduction de sitemap . |