把二十个同义标签合并到主标签,旧标签做了 301,但主标签页的 canonical 仍然写着被合并掉的旧地址,两个月后主标签一条没收录,旧地址反而还在索引里。
排查方向其实有限,先把可能性排一排。合并脚本只改了文章关联,没有重写标签的 canonical 元数据;主题模板把第一个标签当作 canonical,排序不稳定;301 与 canonical 指向同一个旧地址,信号互相冲突;旧标签页缓存未清,蜘蛛读到的仍是旧 HTML。
动手时先检查主标签页的 canonical 实际输出
curl -s 'https://www.example.com/tag/nginx' | grep -o '<link rel="canonical"[^>]*>'
随后把 canonical 固定为当前标签地址
add_filter('get_canonical_url', function($url){ return is_tag() ? get_tag_link(get_queried_object_id()) : $url; });
接着确认旧标签 301 的落地页是新标签
curl -sI 'https://www.example.com/tag/nginx-config' | grep -i location
剩下的就是清掉标签页缓存后重新提交
curl -X PURGE https://www.example.com/tag/nginx
改完先别撤,确认这几项。主标签 canonical 指向自身,旧标签 301 一跳到位,索引里旧地址两周内被替换成新地址。
提醒一点。301 和 canonical 指向同一个旧地址等于告诉蜘蛛这个页面不该存在,合并标签时必须同时改这两处。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
