如何从 Next.js 中的默认语言站点地图中删除语言环境字符串?

How to remove locale string from sitemap for default language in Next.js?

我用两种语言显示我的网站:法语和英语。 我构建了我的站点地图,我意识到我的 sitemap.xml 中没有这个:

/blog
/en-US/blog

我有:

/fr-FR/blog
/en-US/blog

我想从我的站点地图中删除 fr-FR 字符串,因为它会导致页面重复,这对 SEO 不利。 我怎样才能做到这一点?还有如何在 XML 上指示规范页面?

这是我的 i18n 配置:

i18n: {
    locales: ["fr-FR", "en-US"],
    defaultLocale: "fr-FR"
 }

我的 getStaticPaths 看起来像这样:

export async function getStaticPaths({ locales }) {

    const products = await fetchAPI(`/products`);
    const productsData = await products;

    const resProductsEn = await fetchAPI(`/products?${enTranslation}`);
    const productsDataEn = await resProductsEn;

    const paths = []

    productsData.map((product) => paths.push(
        { params: { slug : product.slug} }
    ))

    productsDataEn.map((product) => paths.push(
        { params: { slug : product.slug}, locale: 'en-US'}
    ))      
    
    return {
      paths,
      fallback: true
    };
}

我使用 next-sitemap 生成我的站点地图 - next-sitemap.config:

module.exports = {
    siteUrl: process.env.FRONT_END_URL,
    generateRobotsTxt: true, 
    exclude: [
        '/test', 
        '/commande', 
        '/forgotten-password', 
        '/reset-password',  
        '/panier', 
        '/mon-compte', 
        '/mon-compte/*',
        '/fr-FR',
    ],
    robotsTxtOptions: {
        additionalSitemaps: [
            `${process.env.FRONT_END_URL}/sitemap.xml`,
            `${process.env.FRONT_END_URL}/server-sitemap.xml`,
            `${process.env.FRONT_END_URL}/en-server-sitemap.xml`
        ]
    }  
}

更具体的例子:

<url><loc>https://www.website.com/fr-FR/questions-reponses</loc><changefreq>daily</changefreq><priority>0.7</priority><lastmod>2021-12-03T18:26:08.673Z</lastmod></url>    
<url><loc>https://www.website.com/en-US/questions-reponses</loc><changefreq>daily</changefreq><priority>0.7</priority><lastmod>2021-12-03T18:26:08.673Z</lastmod></url>

您可以使用 next-sitemap.js 中的 transform 属性 从生成的路径中删除默认语言环境。

module.exports = {
    // Other `next-sitemap.js` config here
    transform: async (config, path) => {
        return {
            loc: path.replace('/fr-FR', ''), // Remove `/fr-FR` from paths - could get value from i18n config to make it dynamic
            changefreq: config.changefreq,
            priority: config.priority,
            lastmod: config.autoLastmod ? new Date().toISOString() : undefined,
            alternateRefs: config.alternateRefs ?? []
        }
    }
}