记录一下那天晚上的排查过程。站内搜索页的 title 写成「关键词 搜索结果」,蜘蛛顺着站内联想词抓了几千个页面,索引里出现大量带赌博和医疗词的标题,看着像被挂马。
原因不止一个,得分开看。搜索词未做长度截断和字符过滤,直接输出到 title。少数情况下是搜索结果页可被任意参数访问,没有 noindex 兜底。
不容易想到的是,站内热门搜索词把敏感词也列进了可点击链接。
限制 title 里的搜索词长度
echo mb_substr($q, 0, 20);
接着对搜索页统一输出 noindex
add_filter('wp_robots', function ($r) { if (is_search()) { $r['noindex'] = true; } return $r; });
过滤热门词列表里的敏感词
SELECT term FROM hot_words WHERE term NOT REGEXP '[赌博博彩]';
提交移除请求清理已收录页面
site:www.example.com/?s=
改完先别撤,确认这几项。三周后这类标题在 site 查询里基本消失,搜索页的抓取请求占比从 18% 降到 2%。
提醒一点。搜索页被注入不只是 SEO 问题,标题里出现违规词还可能触发内容审核,先把输出过滤做掉再谈收录。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
