You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为NextJS App Router+Strapi国际化配置next-sitemap生成正确文件

NextJS 15 App Router 下 robots.txt 无法访问的解决方法

核心问题分析

NextJS 15 App Router 对静态资源的处理逻辑和 Pages Router 不同,public 目录的静态文件可能因构建流程、路由冲突或缓存问题无法正常访问;同时 next-sitemap 默认配置适配 Pages Router,直接套用会导致生成的文件无法被正确部署。

解决方法一:用 App Router 路由直接生成 robots.txt(最稳妥)

这种方式完全绕过静态文件的问题,通过路由动态返回 robots.txt 内容,适配 App Router 架构:

  1. 在项目根目录的 app 文件夹下,创建 robots.txt 目录,然后在该目录内新建 route.ts 文件:

    app/
    └── robots.txt/
        └── route.ts
    
  2. 在 route.ts 中写入以下代码:

import { NextResponse } from 'next/server';

export function GET() {
  const robotsContent = `User-agent: *
Allow: /
Disallow: /pl
Disallow: /pl/*
Disallow: /en
Disallow: /en/*
Disallow: /admin

Sitemap: https://www.website.com.pl/sitemap.xml
Sitemap: https://www.website.com.pl/sitemap-0.xml
`;

  return new NextResponse(robotsContent, {
    headers: {
      'Content-Type': 'text/plain',
    },
  });
}
  1. 重新构建部署后,访问 https://website.com.pl/robots.txt 即可看到正确内容。

解决方法二:修复 next-sitemap 配置适配 App Router

如果坚持使用 next-sitemap 生成文件,需调整配置适配 App Router 的构建流程:

  1. 确保安装最新版 next-sitemap:
npm install next-sitemap@latest
  1. 修改 next-sitemap.config.js,将输出目录改为 App Router 的静态资源目录:
/** @type {import('next-sitemap').IConfig} */
module.exports = {
  siteUrl: "https://website.com.pl",
  outDir: ".next/static", // 替换原有的 "public"
  generateRobotsTxt: true,
  sitemapSize: 100,
  generateIndexSitemap: true,
  exclude: ["/pl*", "/en*"],
  robotsTxtOptions: {
    policies: [
      {
        userAgent: "*",
        allow: ["/", "/*"],
        disallow: ["/pl", "/pl/*", "/en", "/en/*", "/admin"],
      },
    ],
    additionalSitemaps: [
      "https://www.website.com.pl/sitemap.xml",
      "https://www.website.com.pl/sitemap-0.xml",
    ],
  },
};
  1. 更新 package.json 中的构建脚本,确保 next-sitemap 在构建后执行:
"scripts": {
  "build": "next build && next-sitemap",
  "start": "next start"
}
  1. 清理缓存后重新构建:
rm -rf .next public
npm run build
npm run start

此时本地启动生产环境后,即可访问 /robots.txt 和 /sitemap.xml。

额外说明:为什么 public 目录静态文件无效?

App Router 中 public 目录的文件会被部署,但如果存在以下情况会导致访问失败:

  • next-sitemap 生成的文件覆盖了 public 目录下的静态文件
  • 构建时缓存未清理,旧文件未被替换
  • 服务器部署时未正确同步 public 或 .next/static 目录的文件

内容的提问来源于stack exchange,提问作者grabarzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:42:22