Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了

Bash 交叉验证 robots.txt 和 sitemap:两个文件自相矛盾,页面永远收录不了

robots.txt 和 sitemap 是网站给爬虫的两份"说明书",一个说"哪些地方别来",一个说"哪些页面在这里"。这俩本该互相配合,但实际建站时经常写出矛盾:robots.txt 里声明的 sitemap 地址打不开,或者 sitemap 里列的页面路径,恰好被 robots.txt 的 Disallow 挡住了。结果就是谷歌和 AI 爬虫想收录也收录不了,你还不知道问题出在哪。

这篇写一个 Bash 脚本,把 robots.txt 和 sitemap 拉出来交叉验证,矛盾的地方一次标出来。

robots.txt 的规则看这里:robots.txt 简介,sitemap 的标准看这里:构建 sitemap。

工具能检查什么

  1. robots.txt 里声明的 sitemap 地址能否正常访问(HTTP 200)
  2. 列出 robots.txt 里的 Disallow 规则,方便和 sitemap 对照

依赖:curl、grep、sed。Windows 上在 Git Bash 或 WSL 里跑。

完整代码

bash 复制代码
#!/bin/bash
# robots-sitemap-check.sh
# 用途:交叉验证 robots.txt 声明的 sitemap 是否可访问,并列出 Disallow 规则
# 依赖:curl、grep、sed
# 用法:bash robots-sitemap-check.sh https://example.com

DOMAIN="${1:-https://example.com}"
DOMAIN="${DOMAIN%/}"

echo "===== robots.txt 与 sitemap 交叉验证 ====="
echo ""

robots=$(curl -sL -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0" "$DOMAIN/robots.txt")

if [ -z "$robots" ]; then
  echo "robots.txt 抓取失败,检查域名是否正确"
  exit 1
fi

echo "robots.txt 抓取成功,长度 ${#robots} 字符"
echo ""

echo "robots.txt 里声明的 sitemap:"
sitemaps=$(printf '%s' "$robots" | grep -i '^sitemap:' | sed 's/^[Ss]itemap:[[:space:]]*//' | tr -d '\r')
if [ -z "$sitemaps" ]; then
  echo "  (未声明任何 Sitemap,建议加上 Sitemap: 行)"
else
  printf '%s\n' "$sitemaps" | while read -r s; do
    code=$(curl -sL -o /dev/null -w "%{http_code}" -A "Mozilla/5.0" "$s")
    if [ "$code" = "200" ]; then
      echo "  $s  ->  HTTP 200(可访问)"
    else
      echo "  $s  ->  HTTP $code(打不开!检查 sitemap 路径)"
    fi
  done
fi
echo ""

echo "robots.txt 里的 Disallow 规则:"
disallows=$(printf '%s' "$robots" | grep -i '^disallow:' | sed 's/^[Dd]isallow:[[:space:]]*//' | tr -d '\r' | sort -u)
if [ -z "$disallows" ]; then
  echo "  (无 Disallow 规则)"
else
  printf '%s\n' "$disallows" | sed 's/^/  /'
fi
echo ""

echo "提醒:对照上面的 Disallow 规则,检查 sitemap 里的 URL 路径是否命中。"
echo "命中 Disallow 的页面不会被谷歌收录,AI 爬虫也读不到。"
echo "===== 结束 ====="

怎么用

bash 复制代码
bash robots-sitemap-check.sh https://你的域名

先看声明的 sitemap 能不能打开,再把 Disallow 规则和 sitemap 里的 URL 路径对照一遍,矛盾就现形了。

三个最常见的矛盾

声明的 sitemap 地址打不开。 robots.txt 里写了 Sitemap: https://example.com/sitemap.xml,但那个地址返回 404 或 500。爬虫按图索骥去读,扑个空。声明了却打不开,等于没声明。

Disallow 把 sitemap 里的页面挡住了。 这是最隐蔽的。比如 sitemap 里有 https://example.com/product/a,robots.txt 里却写了 Disallow: /product/。爬虫读到 sitemap 想收录,一看 robots 说不许抓,直接放弃。页面永远进不了索引。

Disallow 规则写太宽。 有人想挡后台 /admin/,结果误写成 Disallow: /,把全站都挡了。或者挡 /css/、/js/ 时把关键的资源路径也挡了,导致页面渲染不全。规则要精确,别一挡一大片。

写在最后

robots.txt 和 sitemap 是网站最基础的两个配置,却最容易写出互相打架的矛盾。写完之后跑一遍交叉验证,把声明的 sitemap 和 Disallow 规则对一遍,能避免"页面永远收录不了却找不到原因"这种隐形损失。

延伸阅读:谷歌 SEO 系统实操。

觉得有用欢迎点赞、收藏、转发,有疑问评论区留言或私信交流。

相关推荐
日日大王学编程1 小时前
LangGraph 基本用法详解:从入门到实战
python·语言模型·langchain
威哥爱编程1 小时前
Python 智能体开发实战 04:模型答得挺漂亮,程序却读不懂?让回答直接变成能入库的 JSON
python·agent
geovindu1 小时前
rust: Read-Write Lock Pattern
开发语言·后端·设计模式·rust·读写锁模式·同步型模式
怪我冷i1 小时前
Rust智能指针Rc<T> 使用总结
开发语言·后端·rust
全栈陈序员1 小时前
【Python】基础语法入门(三十)—— Web 开发入门:用 Flask 搭建第一个网站
前端·python·flask
全栈陈序员1 小时前
【Python】基础语法入门(三十三)—— 日志系统详解:用 logging 记录程序运行
java·开发语言·python
ESDWAN1 小时前
SD-WAN 是什么?工作原理、适用场景与选型要点
开发语言·网络·数据库·架构·php
晗夜未央1 小时前
跨仓库 Skill 换台电脑就失效?用 Git remote 校验项目
人工智能·git·python
Zack_Liu2 小时前
code样例
pytorch·python·深度学习