企业站的搜索框用 method=post 提交到 /search/,结果页只有在提交后才有内容。上线半年,搜索页收录为零,长尾词一个都没带进来。试过在 robots 放开 /search/,日志里仍然没有 GET 请求。
一开始怀疑是「模板在无参数时输出 200 空页面,被当成低质页处理」,查了一圈,方向不对。
原因不止一个,得分开看。蜘蛛只发起 GET,POST 表单不会被执行,结果页永远是空壳。还有一种是结果页没有接收 query 参数的 GET 路由,直接访问返回空白。
不容易想到的是,搜索框依赖 JS 提交,noscript 下连表单都没有。
先对比 GET 与 POST 的返回
curl -s -o /dev/null -w "%{http_code} %{size_download}\n" "https://www.example.com/search/?q=seo"
接着把表单改成 GET 提交
sed -i 's/method="post"/method="get"/' /var/www/html/wp-content/themes/site/searchform.php
补一条 GET 路由
add_rewrite_rule('^search/([^/]+)/?', 'index.php?s=$matches[1]', 'top');
等前面都确认过,再确认参数页可被抓
curl -s "https://www.example.com/?s=seo" | grep -c 'search-result'
改完先别撤,确认这几项。搜索框改 GET 后,日志里出现带 q 参数的抓取,两周内几十条长尾结果页进索引,站内搜索带来的落地访问开始出现。
补一句。搜索页要不要被收录是另一个决定,但至少要先让它可抓,否则连加 noindex 的资格都没有。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
