如何在Next13.3中通过动态页面Map来创建站点Map

hec6srdp  于 2023-06-29  发布在  其他
关注(0)|答案(2)|浏览(106)

我使用推荐的方法在Next13.3+中使用app文件夹中的sitemap.js文件创建站点Map,代码如下(显然,对于真实的的url,这些示例发生了变化)

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

然而,我想Map在一个[slug]文件夹中动态创建的页面,其中包含一个page.js,以创建站点Map中的项目。
如何以编程方式引用sitemap.js中的那些动态页面?
我尝试在箭头函数中使用$(slug),但这不起作用。

const routes = ["", "/$(slug]"].map((route) => ({
  url: `${URL}${route}`,
  lastModified: new Date().toISOString(),
}));
return routes

谢谢你的任何建议

wtzytmuj

wtzytmuj1#

我就是这么解决的...

import { getPages } from "../../sanity/sanity-utils"

const URL = "https://example.com";

export default async function sitemap() {

    const pages = await getPages();

    const routes = ["", "/*"].map((route) => ({
        url: `${URL}${route}`,
        lastModified: new Date().toISOString(),
    }));

    const pages1 = pages.map(({ slug }) => ({
        url: `${URL}/${slug}`,
        lastModified: new Date().toISOString(),
    }));

    return [...routes, ...pages1]
}
dgiusagp

dgiusagp2#

这就是我在文件sitemap.js中的操作。

import { getPostsForSitemap } from "../service";

const URL = "https://example.com";

export default async function sitemap() {
  const data = await getPostsForSitemap();
  const posts = data.data.map((post) => ({
    url: `${URL}/${post.attributes.slug}`,
    lastModified: post.attributes.updatedAt,
  }));

  const routes = ["/", "/about", "/contact"].map((route) => ({
    url: `${URL}${route}`,
    lastModified: new Date().toISOString(),
  }));

  return [...posts, ...routes];
}

请注意,我的API(strapi)返回的是带有slug和最后更新日期的帖子列表。我在函数getPostsForSitemap中进行数据提取。Here是使用此代码生成的站点Map。

相关问题