68893236+KINDNICK@users.noreply.github.com 1179d6832e ADD : 클로드 스킬 추가
2026-01-30 21:59:38 +09:00

13 KiB
Raw Permalink Blame History

description argument-hint
生成或优化 robots.txt 文件
domain

为 Next.js 项目生成 SEO 友好的 robots.txt 文件。包含基本的爬虫规则、Sitemap 引用和常见目录的禁止规则。

功能

  • 生成标准的 robots.txt 文件
  • 自动包含 Sitemap 引用
  • 禁止敏感目录和文件
  • 允许所有主要爬虫
  • 支持爬虫延迟设置
  • 适配 Next.js 项目结构

参数

  • $1$ARGUMENTS: 网站域名(可选)
    • 用于生成 Sitemap URL
    • 示例:https://yourdomain.com
    • 如果不提供Sitemap 行会被注释或省略

使用示例

示例 1基本用法

/robots-txt

输出:

# robots.txt 文件

为你的 Next.js 项目生成的 robots.txt 文件:

```txt
# Allow all crawlers
User-agent: *
Allow: /

# Disallow common Next.js and private directories
Disallow: /api/
Disallow: /_next/
Disallow: /static/
Disallow: /.well-known/

# Disallow admin and private areas (if applicable)
# Disallow: /admin/
# Disallow: /private/
# Disallow: /dashboard/

# Sitemap (uncomment and update with your domain)
# Sitemap: https://yourdomain.com/sitemap.xml

文件位置

将此文件放置在项目根目录的 public/ 文件夹中:

路径: public/robots.txt

复制上面的内容到 public/robots.txt 文件。

验证

创建后,访问 https://yourdomain.com/robots.txt 验证文件可访问。

Next.js 自动生成

如果你使用 Next.js 13.3+,也可以使用 generateRobotTxt 函数自动生成:

app/robots.ts (推荐):

import { MetadataRoute } from 'next'

export default function robots(): MetadataRoute.Robots {
  return {
    rules: [
      {
        userAgent: '*',
        allow: '/',
        disallow: ['/api/', '/_next/', '/static/'],
      },
    ],
    sitemap: 'https://yourdomain.com/sitemap.xml',
  }
}

这会自动生成 /robots.txt 路由。


### 示例 2指定域名

```bash
/robots-txt https://yourdomain.com

输出:

# robots.txt 文件(包含 Sitemap

```txt
# Allow all crawlers
User-agent: *
Allow: /

# Disallow common Next.js directories
Disallow: /api/
Disallow: /_next/
Disallow: /static/

# Disallow private areas
Disallow: /admin/
Disallow: /_next/image/
Disallow: /private/

# Crawl delay (optional)
# Crawl-delay: 1

# Sitemap
Sitemap: https://yourdomain.com/sitemap.xml

部署

将上述内容保存到 public/robots.txt,部署后可通过以下 URL 访问: https://yourdomain.com/robots.txt

注意事项

  • robots.txt 文件必须位于网站根目录
  • 文件名必须小写:robots.txt
  • 文件更新后可能需要几天才能被搜索引擎重新抓取
  • 使用 Google Search Console 的 robots.txt 测试工具验证

### 示例 3博客项目

```bash
/robots-txt https://blog.yourdomain.com

输出:

# robots.txt for Blog

```txt
# Allow all crawlers
User-agent: *
Allow: /

# Disallow admin and management areas
Disallow: /admin/
Disallow: /api/
Disallow: /_next/
Disallow: /wp-admin/
Disallow: /wp-includes/

# Disallow search and filter pages (avoid duplicate content)
Disallow: /search?
Disallow: /filter?
Disallow: /tag/*/page/
Disallow: /category/*/page/

# Allow specific feeds
Allow: /feed/
Allow: /feed/rss/

# Disallow other feeds
Disallow: */feed/
Disallow: */feed/rss/
Disallow: */feed/atom/

# Sitemap
Sitemap: https://blog.yourdomain.com/sitemap.xml

博客特定规则说明

禁止搜索和分页页面:

  • 避免重复内容问题
  • 节省爬虫预算

允许主要 feed

  • 允许主 feed 被抓取
  • 禁止其他 feed 变体

防止爬虫陷入无限循环:

  • 禁止带参数的搜索 URL
  • 禁止深层分页

### 示例 4电商项目

```bash
/robots-txt https://store.yourdomain.com

输出:

# robots.txt for E-commerce Store

```txt
# Allow all crawlers
User-agent: *
Allow: /

# Disallow admin and backend
Disallow: /admin/
Disallow: /api/
Disallow: /_next/
Disallow: /checkout/
Disallow: /cart/
Disallow: /my-account/
Disallow: /wishlist/

# Disallow search and filter pages
Disallow: /search?
Disallow: /catalogsearch/
Disallow: /filter?

# Disallow sorted and filtered URLs
Disallow: /*?sort=
Disallow: /*?order=
Disallow: /*?filter=
Disallow: /*?price=

# Disallow session IDs and tracking parameters
Disallow: /*?PHPSESSID=
Disallow: /*?utm_source=
Disallow: /*?utm_medium=
Disallow: /*?utm_campaign=

# Allow product images
Allow: /media/catalog/
Allow: /products/images/

# Disallow temporary files
Disallow: /tmp/
Disallow: /var/
Disallow: /cache/

# Specific crawler rules
# Block aggressive crawlers (optional)
User-agent: SemrushBot
Disallow: /

User-agent: AhrefsBot
Disallow: /

# Sitemap
Sitemap: https://store.yourdomain.com/sitemap.xml
Sitemap: https://store.yourdomain.com/sitemap-product.xml
Sitemap: https://store.yourdomain.com/sitemap-category.xml

电商特定规则说明

禁止结账流程页面:

  • /checkout/, /cart/ 等页面不需要被索引

禁止搜索和过滤 URL

  • 避免重复内容
  • 节省爬虫预算

允许产品图片:

  • 图片搜索流量有价值

阻止 SEO 工具爬虫:

  • SemrushBot, AhrefsBot 等可能消耗服务器资源

多个 Sitemap

  • 电商网站通常有多个 sitemap产品、分类、静态页面

### 示例 5多语言项目

```bash
/robots-txt https://yourdomain.com

输出:

# robots.txt for Multi-language Site

```txt
# Allow all crawlers
User-agent: *
Allow: /

# Disallow common directories
Disallow: /api/
Disallow: /_next/
Disallow: /static/

# Sitemap for all languages
Sitemap: https://yourdomain.com/sitemap.xml
Sitemap: https://yourdomain.com/en/sitemap.xml
Sitemap: https://yourdomain.com/zh/sitemap.xml
Sitemap: https://yourdomain.com/es/sitemap.xml

多语言 Sitemap 策略

选项 1主 sitemap 引用子 sitemap

<!-- sitemap.xml -->
<sitemapindex>
  <sitemap>
    <loc>https://yourdomain.com/en/sitemap.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://yourdomain.com/zh/sitemap.xml</loc>
  </sitemap>
</sitemapindex>

选项 2每个语言的 sitemap 单独引用

  • 在 robots.txt 中列出所有语言的 sitemap
  • 确保每个语言的 sitemap URL 正确

## 高级配置

### Crawl Delay爬虫延迟

```txt
User-agent: *
Crawl-delay: 1

# 或针对特定爬虫
User-agent: Googlebot
Crawl-delay: 0

User-agent: Bingbot
Crawl-delay: 1

说明:

  • 设置爬虫请求之间的延迟(秒)
  • Google 通常忽略 crawl-delay
  • 对小网站可能有用

阻止特定爬虫

# 阻止 SEO 工具爬虫
User-agent: SemrushBot
Disallow: /

User-agent: AhrefsBot
Disallow: /

User-agent: MJ12bot
Disallow: /

# 阻止存档网站
User-agent: archive.org_bot
Disallow: /

注意: 只阻止消耗大量资源的爬虫,不要阻止主要搜索引擎。

允许特定资源

User-agent: *
Allow: /images/
Allow: /css/
Allow: /js/

Disallow: /api/
Disallow: /admin/

说明: 在禁止规则之前使用 Allow 规则。

针对不同爬虫的不同规则

# Googlebot
User-agent: Googlebot
Allow: /
Disallow: /private/

# Bingbot
User-agent: Bingbot
Allow: /
Disallow: /private/

# 其他所有爬虫
User-agent: *
Allow: /
Disallow: /private/
Disallow: /admin/

robots.txt 语法

基本指令

User-agent

User-agent: *        # 所有爬虫
User-agent: Googlebot # 特定爬虫

Disallow

Disallow: /          # 禁止整个网站
Disallow: /admin/    # 禁止目录
Disallow: /file.html # 禁止文件
Disallow: /*.pdf     # 禁止所有 PDF

Allow

Allow: /             # 允许整个网站
Allow: /images/      # 允许目录

Sitemap

Sitemap: https://yourdomain.com/sitemap.xml
Sitemap: https://yourdomain.com/sitemap-2.xml

Crawl-delay

Crawl-delay: 1       # 1 秒延迟

通配符和模式

* 匹配任意字符:

Disallow: /*?        # 禁止所有带参数的 URL
Disallow: /*.pdf     # 禁止所有 PDF 文件
Disallow: /private*  # 禁止以 /private 开头的所有路径

$ 结束标记:

Disallow: /*.pdf$    # 禁止以 .pdf 结尾的 URL
Disallow: /print$    # 禁止以 /print 结尾的 URL

最佳实践

1. 保持简单

User-agent: *
Allow: /
Disallow: /admin/

大多数网站只需如此简单。

2. 不要依赖 robots.txt 保护敏感内容

  • robots.txt 是公开的,任何人都可以查看
  • 使用身份验证保护敏感内容
  • robots.txt 只是建议,不是强制

3. 禁止重复内容

# 禁止搜索结果、过滤、排序页面
Disallow: /search?
Disallow: /filter?
Disallow: /*?sort=
Disallow: /*?order=

4. 明确允许重要资源

User-agent: *
Allow: /images/
Allow: /css/
Allow: /js/

Disallow: /api/

5. 测试和验证

使用以下工具测试:

  • Google Search Console - robots.txt 测试工具
  • Bing Webmaster Tools - robots.txt 测试工具
  • 在线验证工具

常见错误

错误 1禁止整个网站

# 错误
User-agent: *
Disallow: /

修复:

# 正确
User-agent: *
Allow: /
Disallow: /admin/

错误 2错误的路径

# 错误 - 缺少尾部斜杠
Disallow: /admin

# 正确 - 目录应该有尾部斜杠
Disallow: /admin/

错误 3阻止搜索引擎

# 错误 - 阻止主要搜索引擎
User-agent: Googlebot
Disallow: /

除非有充分理由,否则不要阻止主要搜索引擎。

错误 4过度复杂的规则

# 错误 - 过于复杂
User-agent: *
Allow: /images/jpeg/
Allow: /images/png/
Disallow: /images/gif/
Disallow: /images/webp/
Disallow: /images/svg/
# ... 更多规则

保持简单:

User-agent: *
Allow: /images/
Disallow: /private/

Next.js 集成

选项 1静态文件简单

robots.txt 放在 public/ 目录:

public/
  robots.txt
  sitemap.xml

选项 2自动生成推荐

app/robots.tsapp/robots.js:

import { MetadataRoute } from 'next'

export default function robots(): MetadataRoute.Robots {
  const baseUrl = 'https://yourdomain.com'

  return {
    rules: [
      {
        userAgent: '*',
        allow: '/',
        disallow: [
          '/api/',
          '/_next/',
          '/static/',
          '/admin/',
        ],
      },
      {
        userAgent: ['SemrushBot', 'AhrefsBot'],
        disallow: '/',
      },
    ],
    sitemap: `${baseUrl}/sitemap.xml`,
  }
}

环境变量配置:

import { MetadataRoute } from 'next'

export default function robots(): MetadataRoute.Robots {
  const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'https://yourdomain.com'

  return {
    rules: [
      {
        userAgent: '*',
        allow: '/',
        disallow: ['/api/', '/_next/'],
      },
    ],
    sitemap: `${baseUrl}/sitemap.xml`,
  }
}

动态配置:

import { MetadataRoute } from 'next'

export default function robots(): MetadataRoute.Robots {
  return {
    rules: [
      {
        userAgent: '*',
        allow: '/',
        disallow: process.env.NODE_ENV === 'production'
          ? ['/admin/', '/private/']
          : ['/'],
      },
    ],
    sitemap: 'https://yourdomain.com/sitemap.xml',
  }
}

验证和测试

1. 本地验证

# 开发环境
curl http://localhost:3000/robots.txt

# 生产环境
curl https://yourdomain.com/robots.txt

2. Google Search Console

  1. 打开 Google Search Console
  2. 选择你的网站
  3. 导航到"设置" → "robots.txt 测试工具"
  4. 输入你的 robots.txt 内容
  5. 测试特定 URL 是否被允许或禁止

3. 在线验证工具

  • Google robots.txt 测试工具
  • Bing robots.txt 测试工具
  • Screaming Frog SEO Spider

4. 手动检查清单

  • 文件位于根目录:/robots.txt
  • 文件名小写:robots.txt
  • 文件可访问:返回 200 状态码
  • 语法正确:没有错误
  • 规则合理:不会意外阻止重要内容
  • Sitemap 引用正确URL 完整且有效

常见问题

Q: robots.txt 更新后多久生效?

A: 通常需要几天到一周。搜索引擎不会立即重新抓取。

Q: 如何隐藏敏感内容?

A: 不要使用 robots.txt。使用

  • 身份验证(登录)
  • noindex meta 标签
  • HTTP 身份验证
  • IP 限制

Q: 禁止目录后,该目录的图片还能被索引吗?

A: 不能。禁止目录会禁止该目录下的所有资源。

Q: 如何阻止特定参数的 URL

A: 使用通配符:

Disallow: /*?parameter=
Disallow: /*?utm_source=

Q: 需要为每个爬虫单独设置规则吗?

A: 通常不需要。大多数网站对所有爬虫使用相同规则。

Q: robots.txt 与 meta robots 标签有什么区别?

A:

  • robots.txt: 控制整个网站或目录的爬取
  • meta robots: 控制单个页面的索引和跟随

通常结合使用以获得最佳效果。

相关命令

  • /llm-txt - 生成 llm.txt 文件
  • /seo-audit - 检查 robots.txt 配置
  • /seo-check - 验证 robots.txt 可访问性

注意事项

  • robots.txt 文件必须位于网站根目录
  • 文件名必须小写:robots.txt
  • robots.txt 是公开的,任何人都可以查看
  • 不使用 robots.txt 保护敏感内容
  • 定期测试和验证规则
  • 更新后可能需要几天才能生效
  • 使用 Google Search Console 监控爬取错误