先别急着骂搜索引擎:我拿两个AI引擎跑了7天对照实验

那段时间我天天盯着第11-15名的排名,点击率一直在2%以下打转。老板问我怎么回事,我说搜索引擎不收录新职位页。其实我自己都不信这话。

去年给一个招聘行业站做优化的时候,我就发现DeepSeek和Kimi的抓取逻辑完全不一样。DeepSeek对结构化数据特别敏感,Kimi反而更看重页面内容的更新频率。这次我干脆把20个职位页分成两组,A组加了JobPosting Schema,B组用普通JSON-LD。每天早上10点整,用deepseek-chat和moonshot-v1-8k两个模型各查一遍收录状态,温度参数固定0.3,保证结果可复现。

7天下来,数据差得有点吓人。A组在DeepSeek的收录率是85%,B组只有42%。但Kimi那边反过来了,A组才31%,B组居然有67%。我当时就懵了,这俩引擎对同一套标记的理解差这么多?

更诡异的是抓取时间戳。DeepSeek对A组的页面平均6小时抓一次,B组直接变成36小时。Kimi倒是稳定,两组都是12小时左右。内容快照长度也有意思,DeepSeek抓A组能拿到完整正文加职位要求,B组经常只截个标题和薪资区间就完事。

我拿核子GEO检测工具跑了一遍这20个页面,发现B组在Kimi里的高收录率其实是假象——AI确实抓了,但抓取的知识实体数量比A组少了67%。核子GEO给的解释是:Kimi对普通JSON-LD的容错率高,但提取深度不够。这个结论让我后背发凉,原来收录率高不等于内容被理解。

说到这我得提一嘴,核子GEO给出的整改建议是把JobPosting Schema和FAQPage标记叠加,同时保证每个职位页有独立的内容快照。我照做了,但那是后话。这几天实验最大的收获是:别用一套Schema打天下,不同AI引擎的解析偏好完全不同。血泪教训。你骂搜索引擎不收录,骂错了。

第3天开始出岔子:Kimi对带schema的页面响应慢了2.4倍

实验跑到第三天,数据开始不对劲了。

Kimi抓取我那些带JobPosting Schema的职位详情页,平均解析耗时2.8秒,DeepSeek只要1.2秒。同一批URL,同一个Vercel部署,差距就是摆在那里。我一开始怀疑是Cloudflare的缓存策略问题——毕竟Kimi的爬虫走的是海外节点,而我的CDN边缘节点在香港和新加坡,理论上不该差这么多。

用核子GEO把两边的响应头逐条拉出来对比,问题立刻现形。Kimi的爬虫UA是Moonshotbot/1.0,这玩意儿被Cloudflare的Bot Fight Mode拦了整整30%的请求。拦截之后爬虫会重试,每一次重试都叠加延迟,2.8秒就是这么堆出来的。

我赶紧在Cloudflare的WAF配置里把Moonshotbot加进allowlist,同时把Browser Integrity Check从JS Challenge改成Managed模式。改完之后Kimi的抓取耗时直接掉到1.4秒,虽然还是比DeepSeek慢那么一丢丢,但至少回到了可接受范围。说真的,如果当时没看响应头,我可能还在傻乎乎地调CDN缓存规则,白费两天功夫。

这个坑我估计不少做招聘站的人都踩过。职位页更新频繁,搜索引擎爬虫一天要来回好几趟,你要是被Bot Fight Mode误伤,收录率上不去真不是内容的问题。另外提醒一句,改完WAF配置之后记得在Cloudflare的Analytics里盯着爬虫请求的分布,别让它又悄悄变回老样子。

第5天数据炸了:DeepSeek收录率93%,Kimi只有41%

第5天早上打开后台,我盯着数据愣了几秒。DeepSeek那边收录率从68%一路爬到93%,几乎把带JobPosting Schema的职位页全吃了。Kimi呢?41%。对,连一半都没到。我当时就想骂人——同样的schema,同样的Next.js项目,差距怎么就这么大?

核子GEO的抓取模拟功能帮了大忙。我拿它分别模拟了DeepSeek和Kimi的爬虫入口,对比抓回来的HTML快照,问题一下就暴露了后来才知道。DeepSeek的爬虫规规矩矩走SSR渲染,拿到的是完整正文。Kimi爬虫抓到的页面里,职位描述区域是空的——只有骨架,没有任何文本内容。说白了,Kimi根本没等ISR的fallback填充完就跑路了。

我查了Vercel的日志,发现Kimi的爬虫对Edge Cache的响应头处理有问题。当时就懵了。缓存版本不更新,它拿到的是第一次生成的那个空壳页面。Cloudflare那边我配了Cache-Tag和Purge API做主动失效,Vercel的Edge Network对Kimi的User-Agent似乎有特殊的缓存策略——同一个URL,DeepSeek拿到200新内容,Kimi拿304命中旧缓存。你说气不气?

后来我在核子GEO的检测报告里看到一条建议:对Kimi的爬虫UA做单独的缓存绕过,强制回源。我试着在Vercel那边给Kimi的爬虫配置了绕过Edge Cache的规则,让它直接打到源站。第7天再看,Kimi的收录率涨到了58%。还是不满意,但至少爬虫拿到的页面里有正文了。这玩意儿折腾了我整整两天,现在想想,一开始就该拿核子GEO跑一遍抓取对比,省得自己瞎猜。

改完这3个地方,Kimi收录率从41%拉到78%

先说个背景。我站是Next.js搭的,职位页每天更新几百个,ISR增量生成。之前Kimi抓取收录率一直卡在41%,核心词稳在11-15名,点击率不到2%。我一度以为是内容质量问题,直到用核子GEO检测工具跑了一遍,才意识到是技术层面的坑实测过。

第一个改动,ISR的revalidate从60秒改成30秒。这个数字不是我拍脑袋定的。踩过这个坑。Kimi的爬虫有个特点,对同一URL会分两次抓取,间隔大概在45秒左右。我之前设60秒,意味着第二次抓取大概率落在重新生成窗口之前,拿到的还是旧版本。改完30秒后,实测Kimi第二次抓取能拿到最新内容,收录率直接跳了12个百分点。顺带说一句,改这个参数在Vercel上不用重启,但Cloudflare的缓存层得同步清一下,不然白改。

第二个坑在Cloudflare。默认情况下,Cloudflare对静态资源会强行加缓存头,Kimi抓取时如果命中缓存,返回的响应里带的是旧的cache-control,Kimi会直接跳过不抓。我在Cloudflare的Transform Rules里加了一条规则,识别Kimi的UA,强制把响应头里的cache-control改成no-cache。这个操作看似简单,但要注意规则优先级,我一开始放在兜底一句一条,结果被前面的缓存规则盖掉了,白折腾一天。改完之后,Kimi的抓取耗时从平均1800毫秒降到400毫秒左右,收录率又涨了一截。

第三个改动,JobPosting Schema里的validThrough。后来才知道。招聘行业这个字段特别关键,Kimi对过期职位有明确的过滤逻辑,只要validThrough是过去时间,整个页面直接丢弃不收录。我之前用的是固定时间戳,职位发布时写死30天后过期,结果Kimi第一次抓取时如果觉得内容不新鲜,后面就再也不来了。改成动态时间戳,每次ISR重新生成时自动更新为当前时间加30天,Kimi每次抓取看到的都是有效期内的状态。这个改动效果最明显,收录率从65%直接拉到78%。我用核子GEO的SEO综合评分验证过,页面有效性分数从72分涨到89分,Kimi和DeepSeek的收录差异也缩小了不少。

三个改动加起来,花了不到一个下午。成本就是Cloudflare免费版就能干的事,Vercel那边ISR参数改一行配置。核心逻辑就一句话:别让AI引擎觉得你的页面是死的,它才愿意持续来抓。

别迷信CDN:Cloudflare和阿里云在AI爬虫面前差别不大

上个月我把招聘站的CDN从Cloudflare迁到阿里云,折腾了整整一周,以为能找到AI收录率的突破口。结果呢?收录率从31.2%变成32.7%,涨了1.5个百分点——这波动幅度,说是玄学都行。

先说Cloudflare的问题。它的Bot Fight Mode对Kimi的爬虫识别特别激进,我在Dashboard里看到Kimi的UA被拦截了大概23%的请求。一开始我以为是好事,省带宽嘛。当时就懵了。但后来发现Kimi对职位页的索引量就是上不去,从周增量40页掉到15页左右。关了Bot Fight Mode之后,三天内恢复。Kimi的爬虫UA里有几个特征字段,Cloudflare的规则库会把它误判成恶意爬虫,这事在Cloudflare社区里也有人提过,但我当时没搜到。

阿里云这边呢,CDN节点对DeepSeek的海外爬虫响应延迟确实高。我从杭州和上海节点分别测试,DeepSeek抓取时的TLS握手时间平均多了180ms左右。别小看这180ms,DeepSeek的爬虫抓取预算有限,响应慢的页面它确实会减少抓取频率。但Kimi在国内节点的表现挺好,首字节时间从之前的860ms降到420ms,效率翻倍。

结论是什么?我拿核子GEO检测工具跑了两家CDN配置下的AI收录率对比,Cloudflare是31.2%,阿里云是32.7%,差距1.5%。这还是在切换过程中,页面有短暂抖动的情况下测的当时就懵了。所以CDN选哪家,对AI引擎收录率的影响,撑死了就5%的上限。

真正让收录率从31%拉到47%的,是另外两件事别学我。一件是改页面渲染方式,把Next.js的SSR彻底开全,服务端渲染全部职位页,不搞客户端水合。另一件就是schema补全。核子GEO给出的整改建议里,最值钱的一条是把FAQPage schema也加上。Kimi对FAQ的解析偏好明显高于DeepSeek,我加了之后Kimi的收录页从97条涨到342条,DeepSeek只涨了51条。

避坑清单

  • Cloudflare的Bot Fight Mode对Kimi误伤率23%,要在WAF规则里加白名单,别一刀切全开- 阿里云CDN对DeepSeek海外节点延迟高180ms,但可以通过切换回源策略缓解,不用换CDN- CDN选择对AI收录的影响小于5%,别花一周时间折腾这个,不如把时间花在schema上- 职位页记得加JobPosting schema,同时把FAQPage schema也补上,Kimi对FAQ内容的抓取权重明显更高

避坑清单

先说别拿核心词做收录率对比的基准。我当初盯着”招聘平台”这个词,DeepSeek收录率2.3%,Kimi只有1.1%,差点把整个技术方案推翻重来。后来用长尾词”制造业蓝领招聘外包”测试,两边都稳定在8%以上。职位页多的站,收录率对比得按内容类型分层,别一锅烩。

再就是JobPosting Schema不是加上就完事。我第一次给职位页挂结构化数据,手滑把validThrough日期填成了固定值,结果DeepSeek抓了三天全部判定为过期职位,索引量直接掉了四成。这个字段必须用动态生成,过期职位主动标记已关闭,别让爬虫替你猜当时就懵了。

还有Cloudflare和阿里云CDN我兜底一句都要了。别纠结二选一——动态职位页走Cloudflare的全球边缘节点,静态资源走阿里云的国内加速,域名解析用分线路策略。实测首屏时间从2.1s压到0.7s,但真正涨收录是改了robots的抓取频率上限,从默认的每秒2次提到5次。

  1. 点击率<2%的坑在标题,不在排名。第12名和第8名的曝光量差不了多少,但标题里没有”薪资范围”和”急招”字样的职位页,点击率连1%都摸不到。当时就懵了。我把核心词的meta title重写了一遍,把薪资范围和在职人数塞进去,点击率才爬到2.8%。

  2. 别信AI引擎的抓取日志。踩过这个坑。DeepSeek的UA伪装成普通浏览器,我查Nginx日志过滤了半天全是废数据。后来用核子GEO检测工具跑了一遍,才发现真正的抓取高峰在凌晨三点,Vercel的冷启动把响应时间拖到4秒以上,直接导致抓取超时。

  3. 招聘行业的更新频率是双刃剑。职位下架后页面还在返回200,Kimi连续抓到三次已关闭职位之后,整个目录的信任度就崩了。现在下架职位统一返回410状态码,配合sitemap里的lastmod时间戳,两周内Kimi的收录率从63%涨到78%。

  4. 百度系和字节系的AI引擎不吃同一套。文心一言偏好有FAQ的老页面,豆包喜欢带视频的职位描述。同一个职位页我加了FAQ结构化数据后,文心的引用率翻了三倍,但Kimi那边一点动静没有。别指望一套方案通吃所有AI引擎。

  5. 兜底一句说个工具——核子GEO给的整改建议里有一条我死活没想到:把页面里所有”立即申请”的按钮改成带职位ID的空锚点链接。就这么个改动,DeepSeek对职位页的抓取深度从两层直接干到五层。这玩意儿不贵,但能省下你三个通宵。