如何从 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 ?? []
}
}
}
我用两种语言显示我的网站:法语和英语。
我构建了我的站点地图,我意识到我的 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 ?? []
}
}
}