这个坑值得记一笔。robots 里写了一条 Disallow: /*.pdf$,Google 那边生效了,百度的抓取统计里 PDF 依旧被抓,规则像是完全没读到。
刚开始盯着「规则里同时用 * 和 $ 时整行被判为无法识别而被忽略」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。百度对 robots 的通配符支持有限,行尾的 $ 不被解析;Allow 与 Disallow 的长度比较规则和 Google 不完全一致;百度只读取文件前若干 KB,规则排在后面没被读到。
上来先确认线上文件里的规则原文
curl -s https://www.example.com/robots.txt | cat -A | grep -n 'pdf'
然后改成百度也能识别的目录级屏蔽
Disallow: /download/
再往下用百度 UA 请求被挡的地址验证
curl -s -o /dev/null -w '%{http_code}\n' -A 'Baiduspider' https://www.example.com/download/a.pdf
等前面都确认过,再把关键规则挪到文件前几行
head -20 /www/wwwroot/lu0.cn/robots.txt
别只看报错消失,验证要多做一步。百度抓取统计里 PDF 的请求量逐日下降,Google 侧的行为保持不变,两个平台的屏蔽范围开始一致。
提醒一点。写 robots 尽量用最朴素的目录写法,通配符和锚点各家的实现差异很大,同一行在两个平台上可能只有一个生效。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
