站内搜索明明能用,链接却是 404,这事我查了三天

· 资讯 · 阅读 15
摘要

之前在文章里提过一次,站内搜索 404,一直拖着。 上周修了。 修的过程不难,是伪静态规则里漏了一条。难的是我拖了这么久才动手。 拖着的理由 我一直觉得站内搜索用的人少。 这判断其实对。后台数据看,从搜索框进来的流量不到百分之一。 但有个数

站内搜索本来应该是能用的。

实际用不了。

事情是这样。搜索框点下去,跳到类似 search.html?q=收录 这样的地址。这个地址对任何浏览者来说都该能打开。

打开是 404。

但我试着把地址换成 search.php?q=收录,页面正常加载,结果也对。

所以功能没问题,坏的是入口那个地址。

这三天的价值不在于把它修好,在于把「能用」和「访问得到」这两件事彻底分开。

先说结论

我的站跑在 nginx 上,不是 Apache。

仓库里没有 .htaccess 文件,主题目录里也没有。

这就意味着改主题模板里的任何一行,都不会影响 search.html 是 404 这件事。nginx 在请求到达 PHP 之前,就把它判死了。

主题那层动不了它,只能动服务器配置。

这个我改不了。没有服务器权限。

为什么之前一直没发现

两个原因,都很常见。

一是搜索进来的人少,后台看从搜索框点进来的流量不到百分之一。数据上它不重要,所以一直没排进待办。

二是站内自测只测了 search.php。功能是通的,就以为整件事是通的。

这个误区值得说一下。功能通不代表入口通。你的首页、分类页、文章页、搜索页,每一个页面的入口地址都应该单独查一遍。

查的方式很简单,打开页面,把地址栏里那串东西复制下来,自己再访问一次。

很多问题就这么现形。

404 真正影响的是什么

不严重。一个站几十上百条 404,不会直接被降权。

它占的是抓取预算。

爬虫每天来你站上的次数有限。花在死链上的次数,本来可以用来爬新文章。站越小,这个比例越明显。

还有一层更隐蔽。用户搜了东西,点进去是 404。他不会觉得你规则配错了,他就觉得这站坏了。

第一层是软成本,第二层是硬伤害。

正常应该怎么配

给要动手的人一个参考。

nginx 下,搜索页需要一条单独的 rewrite,把 search.html 转到 search.php,query string 要原样带过去。少了这一点,参数就丢了。

带参数的搜索页还要输出 nofollow。不然爬虫会顺着 ?q= 后面各种组合无限爬下去,那是另一个洞,比 404 还费预算。

顺便把 404 页本身也改一下。默认的空白页除了「页面不存在」什么都没有。放个搜索框,放几个热门分类,用户还能自己找回来。

我现在只能做到这一步

服务器那层等权限,加了规则我再验一遍。

404 页面那部分我做完了,是主题里能改的。

剩下的,说实话就是排队。排到我拿得到配置权限的那天。

不过文章还是写出来了。因为查清楚一件事和解决一件事,是两个阶段。前一个阶段我已经走完了,后一个卡在别人手里。

你站上有没有类似的洞

几个地方特别容易漏。

标签页。标签一多,每个标签一个页面,组合起来数量爆炸。规则不对,全是死链。

分页。翻到最后一页之后往往没处理,超出页码返回 200 而不是 404,或者直接报错。

日期归档。有些主题生成按年月归档的页面,规则漏一条就全 404。

去抓取日志里看 404 的 URL 长什么样,一眼能看出来漏在哪。

十分钟的事。

别像我一样拖半年。