我删了 70 个 AI 自动收录页:139 砍到 50,89 条 301 兜底

先说这一段的结果:工具页从 139 个变成 50 个,下线 89 个,sitemap.xml 从 237 条变成 130 条,生成 362 行 301 规则,最终死链 0 条。

整个过程前后花了两天。其中真正用于「删」的时间不到两小时,剩下全在处理删完之后冒出来的问题。

这篇不讲怎么删,讲的是:为什么「上线」是一个决定,而「下线」是一堆决定。


一、起因:自动收录看起来很划算

我给自己的站加了个能力:脚本按关键词从几个开发者社区抓新出现的 AI 工具,抓到就生成一个独立页面,标题带上工具名,配一句简介,加个官网出口。

第一次跑完,池子里进了 70 条。页面自动生成,sitemap 自动加上,我什么都没干,站点从 69 个页面变成 139 个。

任何做内容站的人看到这个数字都会心动。 一个月能补几百页,索引量、长尾词、收录速度,全靠它。

我当时的判断就是这句话:页面多了,被搜到的概率就大。

这个判断错得离谱,但错的地方不在「数量」上。


二、第一个发现:这 70 条的来源,全在墙外

站点的定位只有一句话:收录国内能直接打开的 AI 工具。

而自动收录是从 Product Hunt、Hacker News、GitHub 三个源抓的。这三个源本身就是境外开发者社区,抓出来的东西自然是境外产品:Claude Code 的插件、只在 Mac 上跑的小工具、要自己搭 MCP 服务的中间件。

统计一下:

来源 条数
Product Hunt 42
GitHub 24
Hacker News 4

70 条里,符合「国内能直接打开」的是 1 条。

也就是说,我的首页写着「收录国内能直接打开的 AI 工具」,点进这 70 个页面,用户看到的是「这个站要自备网络」。

页面自己在打自己。 这不是内容质量问题,是承诺问题——首页说 A,详情页说非 A,搜索引擎会把这种站判成什么样,不用猜。

到这里我犯了一个错误:我以为「删掉它们」就行了。


三、第二个发现:判定「国内能不能用」这件事,原来的代码是错的

要删,先得能准确判定哪些该删。于是我回去看原来的判定逻辑,发现了一个很典型的错误。

原来代码里用的是一个 need_proxy 字段:

if not t.get("need_proxy"):
    # 判定为国内直连
    keep(t)

看着没问题。但这个字段在 69 条手写数据里全是 None。

not None 等于 True。于是所有工具都被判定为「国内直连」,其中包含 19 个明显用不了的。这 19 个不是自动收录的,是我自己一条一条手写的,字段一直没填,逻辑就一直把它们放行。

更麻烦的是,就算把这个字段填满,它也是错的判据。举个具体的:Cursor。

  • 官网 cursor.com 在国内能打开
  • 但注册和付费要境外银行卡

按「官网能不能打开」判,它属于国内可用;按「一个普通用户能不能真的用起来」,它属于用不了。

这两个判据的差别,就是「能访问」和「能用」的差别。 站点承诺的是后者,我实现的却是前者。

所以我最后重写了判定,不再看任何单一字段,而是三态:

# cn    = 国内产品,国内可直接使用
# intl  = 境外产品,需要自备网络或境外支付
# None  = 判定不出来

关键在第三态。判定不出来的时候返回 None,绝不猜。 猜的成本不是「多收一个」,是「用户点进去打不开,然后不再来」。宁缺勿滥这四个字,在这个场景下是纯收益的——少一个页面只少一个入口,错一个页面会带走一个用户的信任。


四、第三个发现:删页面是一行代码,删「指向它的链接」不是

判定理顺了,删起来很快:89 个 slug,逐个删文件、加 301。

跑完,本地一切正常。被删的地址全部 301 到相关页面。我以为完事了。

然后出现了 2 条死链。奇怪的地方在于:这 2 个被删的页面,自己的 301 是好的。

死链在别处——

  1. 一个分类聚合页的「最新收录」区块里,还挂着其中一个
  2. 一份给 AI 索引用的 llms-full.txt 里,还列着另一个

根因很清楚:三个生成脚本各自读「候选池」来决定展示什么,没有一个去读「实际生成了哪些页面」。

# 错:从源头推产物
for t in ALL_TOOLS:
    if t.get("is_new"):
        render_link(t)

# 对:从产物反查
for t in ALL_TOOLS:
    if t["slug"] in actually_built_slugs:
        render_link(t)

池子里有它,不代表产物里有它。中间隔着四道缝:判定过滤、构建跳过、命名不一致、被手动下架。

最后我把判定收口成一个函数,三层同时校验:

  1. 工具本身国内可用(第一态 cn)
  2. 来源国内——source_url 非空时,域名必须是 .cn 或命中白名单
  3. 页面真的存在于产物清单里

第 2 条是这次新加的,也是最容易漏的。当时有个页面把我坑了:工具本身国内完全可用(快手的可灵),但页面里的「来源」字段写着 Product Hunt 的原文链接。工具合格,内容不合格。这种页面挂在「国内工具」列表里,一眼假。

「工具合格」和「内容合格」是两个独立条件,必须分开判,任何一条不满足就下线。


五、301 不要手写,让它自己算

89 条下线,如果手写重定向规则,会有两个必然结果:写漏,和写错。

所以我让脚本自己生成。核心是一个「找到同工具的手写页」的函数,逻辑很土:

  1. 拿被删的 slug,比如 kling-4-0
  2. 去掉最后一段,得到 kling
  3. 查这个 slug 是不是手写页
  4. 是就 301 过去;不是就继续去尾段
  5. 全都找不到,才退回站点首页
def same_tool_target(slug):
    parts = slug.split("-")
    while len(parts) > 1:
        cand = "-".join(parts[:-1])
        if cand in HAND_WRITTEN:
            return "/t/%s.html" % cand
        parts.pop()
    return "/"

好处是新下线的页面自动有正确的落点,不需要人工补规则。kling-4-0 自动落到 /t/kling.html,因为「可灵」这个工具的手写页本来就存在。

最后生成 362 行 301 规则,全部由数据推导,没有一行是手写的。

这一步的价值不在于省了多少工作量,在于它把「下线」变成了可重复执行的动作。下次再有 20 个页面要下,跑一遍就行,不会因为忘了改某处而留死链。


六、还有一个我没预料到的问题:首页看起来变成空的了

上线之后,有人问了我一句话:

「实际上就是 8 个工具对么」

我打开首页看,确实是 8 张卡片。因为首页做的是「精选」区块,只放 8 个。而真正的全量列表在分类页和搜索页里。

技术上没错。但用户不会去点分类页。

一个陌生用户进站,看到 8 个卡片,滚动就到底了,他的结论就是「这个站是空的」。他不会想「可能还有更多,我去分类页看看」——他没有这个动机。

后来加了一个「全部 50 个工具」的区块,把所有工具平铺出来,按分类分组。页面变长了,但用户一眼能看到体量。

这件事跟「删页面」是同一个问题的两面:你删掉了 89 个页面,体量从 139 缩到 50,就必须让剩下的 50 个全部可见。否则用户感知到的不是「50」,是「8」。


七、结果与代价

指标 之前 之后
工具页 139 50
sitemap.xml 237 条 130 条
对比页 29 11
出站跳转页 69 50
301 规则 0 362 行
构建产物文件数 293 194
死链 2 条 0

代价也很实在:

  • 索引量直接砍了近一半。 从「有多少页被收录」这个数字看,这次是倒退。
  • 收录速度会慢。 少了 100 多个页面,能被搜到的长尾词也少了。
  • 心理上不好受。 看着站点从 293 个文件变成 194 个,会怀疑自己是不是在做反方向的事。

我的判断是这笔账划算,理由就一条:那 89 个页面的存在,会让剩下 50 个页面的价值归零。 因为用户判断一个站靠不靠得住,用的不是平均质量,是最差的那一个。首页说「国内能用」,他随手点开几个都打不开,就走了,剩下 47 个再好也没用。


八、三条可复用的经验

第一,删之前先把「判定」收口成一个函数。

如果你的代码里有三处地方各自判断「这个东西该不该展示」,那你一定会遇到「A 处删了、B 处还在」。我踩的方式是分类页和 llms-full.txt 各留一条,表现形式是「删掉的页面 301 正常,但死链在别的地方」。

第二,重定向规则要由数据生成,不要手写。

手写 89 条,一定会漏。而且漏的那条往往是最晚加的那个——因为它不在你脑子里的清单上。让脚本算落点,你只需要保证算法对。

第三,删完之后要站在用户视角看一遍「体量感知」。

删掉 64% 的页面之后,剩下的部分必须全部可见。精选区块、折叠面板、分页,这些都是「看起来更少」的装置,删减期一律别用。


收尾

写这篇的时候我又去看了一眼那个 sitemap:130 条。

前几天我会觉得这个数字很小,会想办法把它堆到 500。现在我觉得 130 条是好事——这 130 条里每一条我都知道它为什么存在。

自动收录最诱人的地方,是它能让你在「不知道自己在做什么」的情况下,把数字做大。而那 70 个页面当时看起来全是收益,直到我意识到:它们承诺的东西,我一个都没兑现。

站在这儿:https://ai-tool-scenes.pages.dev,50 个工具,全部手写。

posted @ 2026-10-22 18:45  觉醒笔记  阅读(3)  评论(0)    收藏  举报