标签页按七日热度排序,同一地址每周内容顺序都不一样,蜘蛛几乎每天都来重抓,但页面里只有标题列表,重抓之后索引里的摘要还是旧的。
一开始怀疑是「标签页之间互相推荐,形成高频更新假象」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。热度排序让 lastmod 每周变化,蜘蛛判定为频繁更新。少数情况下是页面没有稳定内容,摘要抽取不到可用段落。
少数情况下是缓存时间设得很短,回源压力被放大。
先对比同一标签两次抓取的正文差异
curl -s 'https://www.example.com/tag/nginx' > a.html; sleep 60; curl -s 'https://www.example.com/tag/nginx' > b.html; diff <(sed 's/[0-9]//g' a.html) <(sed 's/[0-9]//g' b.html) | head
给标签页加一段固定的标签说明
echo '<p>本标签收录与 nginx 配置相关的全部文章。</p>'
接着排序改成按发布时间倒序
add_filter('pre_get_posts', function($q){ if ($q->is_tag()) { $q->set('orderby', 'date'); } });
末了把标签页缓存延长到一天
proxy_cache_valid 200 1d;
恢复的判定其实很直接。标签页连续两次抓取正文一致,lastmod 只在有新文章时变化,抓取频率回落到每周一次左右。
容易忽略的是,排序和分页一样属于内容排列,地址不变内容常变会被当成高频更新页,最后既费预算又没有收录收益。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
