typescript - NextJs 13 的动态站点地图

标签 typescript next.js seo sitemap next.js13

我正在按照本指南为 NextJs 13.4.6 https://claritydev.net/blog/nextjs-dynamic-sitemap-pages-app-directory 创建动态站点地图

我遇到的问题是文章底部的代码与 NextJS 13.3 及更高版本的站点地图有关 - 但是,它不起作用。

这是我的站点地图的代码,用于根据我的路线和来自 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);
  }
}

问题是,除非我读错了这篇文章,否则我不明白如果我转到 localhost:3000/sitemap.xml ,这将如何为 Google 提供站点地图,那么只有一个 404 页面...这是有道理的,因为我从来没有任何地方定义任何 XML 内容。

有谁知道如何让较新版本的 NextJs13 获取此动态站点地图以返回该 url 端点?或者可以举例说明如何完成此操作。

谢谢!

最佳答案

尝试用 const rootUrl 替换 URL

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];

如果有效的话现在就告诉我

关于typescript - NextJs 13 的动态站点地图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76661184/

相关文章:

reactjs - React Typescript Hook 错误 - 该表达式不可调用

URL 中的 SEO 和魔数(Magic Number)

seo - 如何允许爬虫只访问 index.php,使用 robots.txt?

jquery - 在 Angular 2 应用程序中集成 JQuery 后出现编译错误

next.js - 下一个 : Multiple children were passed to <Link> with `href` of 'x' but only one child is supported

reactjs - 在 typescript 中处理 useRef(null) 的最佳方法

reactjs - React 中 next.js 中基于角色的路由

internationalization - 非重复网站上的 hreflang

typescript - typescript 中的 Scala 下划线 - 已实现但无法输入

angular - 将类导入angular2中的另一个类组件