先看现象。文章页带 ?print=1 会输出一份纯正文版本,样式全去掉,内容与正文完全一致,日志里这类地址被抓了八千多次,索引里也进了几百条。
原因不止一个,得分开看。打印版没有 canonical,也没有 noindex,被当成独立页面。也可能是文章模板里的打印链接是普通 a 标签,蜘蛛会跟随。
少数情况下是打印版的 title 与正文页完全相同。
不容易想到的是,站内搜索和外链把打印版地址传播了出去。
动手时先统计打印版被抓的数量
awk '$7~"print=1"{c++} END{print c}' access.log
然后确认打印版的 canonical
curl -s 'https://www.example.com/a/1.html?print=1' | grep -o '<link rel="canonical"[^>]*>'
接着让打印版指向正文页
add_action('wp_head', function(){ if (isset($_GET['print'])) echo '<link rel="canonical" href="'.get_permalink().'">'; });
等前面都确认过,再把打印链接加上 nofollow
add_filter('the_content', fn($c) => str_replace('?print=1', '?print=1" rel="nofollow', $c));
改完先别撤,确认这几项。打印版不再出现在索引报告里,抓取次数降到每天几十次,正文页的排名没有变化。
提醒一点。打印版属于典型的功能性重复页,canonical 指回正文是最省事的做法,删掉功能反而影响体验。这类问题最好一次改到位,反复小改反而容易把原因搅混。
