NextJs 13的动态站点Map

laik7k3q  于 2023-08-04  发布在  其他
关注(0)|答案(1)|浏览(88)

我正在按照本指南为NextJs 13.4.6 https://claritydev.net/blog/nextjs-dynamic-sitemap-pages-app-directory创建动态站点Map
我遇到的问题是文章的底部是它与NextJS 13.3及以上版本的站点Map有关的代码-但是,它不起作用。
这是我的sitemap的代码,它根据我的路由和来自cms的博客文章返回一个URL对象(我从我们的API中获取博客文章数据)。

interface ApiResponseEntries {
  data: TransformedEntry[];
  status: number;
}

// This will change when we have a production URL
const rootUrl = "http://localhost:3000";

export default async function sitemap() {
  try {
    const url = "/api/routes/contentful/entries";

    const response: AxiosResponse<ApiResponseEntries> = await axios.get(url);

    const blogPostEntries: TransformedEntry[] = response.data.map(
      (entry: TransformedEntry) => {
        return entry.contentType === "blogPost";
      }
    );

    const blogPosts = blogPostEntries.map((entry: TransformedEntry) => ({
      url: `${URL}/blog/${entry.id}`,
      lastModified: entry.updatedAt,
    }));

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

    return [...routes, ...blogPosts];
  } catch (error) {
    console.error("Error", error);
  }
}

字符串
问题是,除非我读错了这篇文章,否则我不明白这是如何为谷歌提供网站Map的,如果我去localhost:3000/sitemap.xml,只有一个404页面...这是有道理的,因为我从来没有在任何地方定义过XML。
有谁知道新版本的NextJs 13如何让这个动态站点Map在那个url端点上返回?或者可以举出例子来说明它是如何做到的。
谢谢你,谢谢

xriantvc

xriantvc1#

尝试将URL替换为const rootUrl

const rootUrl = "http://localhost:3000"

const blogPosts = blogPostEntries.map((entry: TransformedEntry) => ({
      url: `${rootUrl}/blog/${entry.id}`,
      lastModified: entry.updatedAt,
    }))

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

return [...routes, ...blogPosts];

字符串
让我现在如果它工作

相关问题