报错是这么冒出来的。站点用了标签云,每个标签自动分页,后台算出四万多个标签地址。近三十天的百度日志里,/tag/ 开头的请求占了 71%,正文详情页只占 7.8%。文章本身两万篇,平均每篇一个月被重抓不到一次,新文上线两天日志里看不到。
中间走过弯路,把「标签页没有设 noindex,全部进了 sitemap」当成主因,改完现象没变。
把日志和配置对完,能解释这个现象的基本就这几处。标签页每页只列标题,页数却按总条数除以十算到几千页。还有一种是标签云在每篇文章底部都会出现,蜘蛛顺着侧栏一直往下翻。
还有一种情况,标签分页之间互链形成闭环,蜘蛛在几页之间反复来回。
先按目录统计百度抓取的分布
awk '$0~/Baiduspider/{split($7,a,"/"); print "/"a[2]}' access.log | sort | uniq -c | sort -rn | head
随后统计标签页总数与单页条数
SELECT COUNT(*) FROM wp_terms WHERE taxonomy='post_tag';
给低质量标签页批量加 noindex 并从 sitemap 摘除
add_filter('wp_robots', function($r){ if(is_tag() && $GLOBALS['wp_query']->found_posts < 3) $r['noindex']=true; return $r; });
等前面都确认过,再用 robots 暂时切断标签分页,观察正文抓取是否回升
Disallow: /tag/*/page/
怎么算真的好了,看的是同一批现象。一周后 /tag/ 的请求占比降到两成以内,详情页请求量翻了一倍,新文发布当天就能在日志里看到抓取。
提醒一点。标签页不要一刀切全封,有实际聚合价值的保留几十个,剩下的用 noindex 而不是 robots 挡,否则已收录的条目删不掉。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
