防止WordPress标签页被批量采集,需限制归档页仅显示摘要、禁用无限翻页(如限制最多5页)、关闭RSS Feed、动态添加URL参数干扰爬虫,并结合UA识别与访问频率控制进行综合防护。

WordPress标签云(Tag Cloud)本身是公开的导航组件,通常通过 wp_tag_cloud() 或小工具输出,其链接指向 /tag/xxx 归档页。这类页面结构清晰、URL规则固定、内容高度可预测,恰恰是爬虫批量采集文章列表的首选入口。防止被采集,关键不是隐藏标签云本身,而是切断“从标签页批量获取全文”的路径。
限制标签归档页的内容输出
默认情况下,/tag/xxx/ 页面会显示该标签下所有文章的完整内容(尤其是主题未做摘要设置时)。应强制改为仅显示摘要,并禁用无限翻页:
- 进入设置 → 阅读,将“博客页面至多显示”设为合理值(如10篇),并勾选“对于文章和静态页面,显示摘要”
- 在主题
functions.php中添加代码,确保标签归档页不输出全文:add_filter('the_content', 'limit_tag_archive_content');<br> function limit_tag_archive_content($content) {<br> if (is_tag() && !is_user_logged_in()) {<br> return wp_trim_words($content, 55, '… <a href="' . get_permalink() . '">[阅读全文]</a>');<br> }<br> return $content;<br> }
封禁标签页的批量翻页行为
爬虫常通过 /tag/xxx/page/2、/tag/xxx/page/3 等持续翻页抓取全站内容。可在 functions.php 中限制最大页码:
- 加入以下逻辑,使标签归档页超过第5页即返回404:
add_action('pre_get_posts', 'restrict_tag_pagination');<br> function restrict_tag_pagination($query) {<br> if ($query->is_tag() && $query->is_main_query() && !is_admin()) {<br> $max_page = 5;<br> if ($query->get('paged') > $max_page) {<br> $query->set_404();<br> status_header(404);<br> }<br> }<br> }
削弱标签页的机器可读性
即使内容受限,标签页仍可能被用于发现文章URL。可通过干扰手段降低采集价值:
- 关闭标签页的RSS Feed:在
functions.php中加入add_action('do_feed_rss2', 'disable_tag_feeds', 1);<br> add_action('do_feed_atom', 'disable_tag_feeds', 1);<br> function disable_tag_feeds() { if (is_tag()) wp_die('Feed not available for tag archives.'); } - 对标签云链接动态添加随机参数(如
?v=abc123),配合Nginx或.htaccess重写忽略该参数,让爬虫生成大量重复无效URL,增加其去重成本
补充防护:User-Agent与访问频率控制
标签页请求特征明显(高频、无Referer、固定路径),适合做服务端拦截:
- 使用插件(如声达网防采集插件)开启“封禁采集器UA”,重点屏蔽
TrainCollector、Scrapy、python-requests等常见采集标识 - 在
.htaccess中限制单IP对/tag/路径的请求频次(需服务器支持 mod_evasive 或类似模块):<IfModule mod_rewrite.c><br> RewriteCond %{REQUEST_URI} ^/tag/ [NC]<br> RewriteCond %{ENV:RATE_LIMIT} >5<br> RewriteRule ^ - [R=429,L]<br> </IfModule>


















