资讯文章 资讯 · NEWS
你收录的站还活着吗:目录站的外站存活巡检该怎么跑
2026-10-23 约 1,386 字 预计阅读 3 分钟 yiyunkj
你
目录站和别的站有个本质区别:你页面上大部分链接指向别人家。别人的站什么时候关、什么时候换域名、什么时候变成别的内容,你完全控制不了,但后果全在你的页面上。

图片来源:网络,版权归原作者所有,侵权请联系删除
巡检要查的四项,不只是「打不打得开」
| 检查项 | 怎么查 | 说明 |
|---|---|---|
| HTTP 状态 | HEAD 请求,跟完重定向看最终码 | 重点关注 404、410、5xx、以及跳到毫不相关的域名 |
| DNS | 解析 A 记录 | NXDOMAIN 基本等于域名已弃用,比 404 更彻底 |
| 证书 | 握手时取有效期 | 过期不等于站死了,但说明没人维护 |
| 内容变化 | 取首页标题和正文前若干字,和上次比对 | 能抓到改版、变灰色内容、被挂马这些状态变化 |
第四项最容易被忽略,但价值最高。一个站还开着、返回 200,但首页标题从「在线工具」变成了你看不懂的东西——这种靠状态码永远发现不了。我的做法是存首页 title 和正文前 500 字的指纹,变化超过阈值就标黄,人工看一眼。
误判比漏判更烦人
第一次跑全量巡检,我标记出三百多个「失效」,人工抽查发现一半是误判。原因集中在三种:
对方封了你的 IP 或 UA。用默认 python-requests 的 UA 去请求,很多站直接拒绝,你收到 403 就当它死了。改成真实浏览器的 UA,或者至少声明一个带联系方式的自有 UA。
临时抖动。一次超时不等于站挂了。规则必须是「连续 N 次失败才算异常」,我用的是连续三次、间隔六小时。
对方对 HEAD 请求不友好。有些站对 HEAD 返回 405 或 403,但 GET 正常。HEAD 失败时降级用 GET 重试一次再判断。
现在我的阈值是:连续三次失败进「待确认」,连续一周失败进「可能失效」,一个月没恢复才真正下架。宁可慢一点,别把活着的站下掉——被站长发现是很难解释的。
失效之后的处置是阶梯,不是一步到位
直接删条目是最差的做法。用户从搜索进来,页面 404,什么都不剩,他对这个站的信任也就没了。
我的顺序是这样:先保留条目但加一个可见的灰色标记(比如「该站点可能无法访问」),出链保留但加上 rel=nofollow;观察一个月;确认失效后改成归档状态,页面保留、说明写清「该站已于某年某月停止服务」,出链去掉;如果域名已经被卖掉并指向了违规内容,立刻下架,不留页面。
最后一种情况不能拖。域名易主后指向博彩或灰产,你的页面上还挂着那个链接,被判「链接到垃圾站点」的风险是实打实的。所以巡检里必须有「内容是否变成违规」这一项,而且这一项要天天跑,不是每月跑。
频率和成本
HEAD 请求很轻,一万条目的全量巡检在几分钟内就能跑完,服务器开销可以忽略。真正的成本在并发控制——别一口气对同一个目标域名发几十个请求,会被当成攻击。按域名分组,加随机间隔。
频率上没必要全站同一节奏。收录不到一个月的新站每周一次(新站死得快),稳定超过半年的每季度一次,重点推荐位上的每周一次。这样一轮下来请求量能压到全量同等频率的四分之一。
巡检结果是可以对外的
这件事我做了之后才发现收益不在站内。把「本目录收录站点存活率」做成一个公开的小页面,每月更新,站长们会引用它——因为它说明你这家目录是真的在维护,不是收完就不管了。
更进一步,可以给站长开放一个「我的站点健康状态」查询页,输入域名看它在你的目录里是什么状态、最近一次确认是什么时候。这个功能不难做,但它把单向的收录变成了双向的关系。我站上这个页面上线半年,带来了两百多条站长主动更新的资料,比发邮件催有效得多。