这个坑值得记一笔。站点上线了会员制,sitemap 里五千条文章地址在未登录状态下全部 302 到 /login,蜘蛛抓到的每一条都是登录页,收录量两周内清零。
刚开始盯着「文章页的模板在未登录时只输出摘要,主体被隐藏」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。权限中间件在路由最前面执行,蜘蛛没有会话直接被拦;CDN 的登录态校验规则匹配了全站路径,静态页也没放过;站点开启了全站维护模式,白名单里没有蜘蛛 IP。
带蜘蛛 UA 复现跳转
curl -sI -A 'Baiduspider' https://www.example.com/a/1.html | grep -Ei 'HTTP/|location'
接着确认跳转是应用还是边缘触发
curl -sI https://www.example.com/a/1.html | grep -i -E 'server|x-cache'
再往下把文章页排除在登录校验之外
location ~ ^/a/ { auth_request off; }
末了对搜索引擎放行并只保留摘要限制
if ($http_user_agent ~* 'Baiduspider|Googlebot') { set $auth 0; }
改完先别撤,确认这几项。蜘蛛 UA 请求返回 200 和完整正文,sitemap 里的地址不再跳转,索引量在三周内恢复到大半。
提醒一点。会员站最容易踩这个坑,权限和 SEO 的边界要按路径划清,正文页不能挂在登录之后。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
