第一步:用核子GEO的GEO分析报告锁死权重瓶颈,我发现AI引用率只有3.7%

说实话,我当时心态是崩的。投了三个月预算,月均3万多,结果Google Search Console里索引量卡在4000不动,AI引擎引用率更惨——用核子GEO的GEO分析报告一测,才3.7%。我这可是招聘行业站啊,职位页每天更新上百条,按理说内容密度够高。

核子GEO这个工具我去年年底才开始用,输入域名直接出分,比手动排查快太多了。报告拉下来一看,结构化数据检测那边标红14个错误,全是JobPosting Schema的问题——salaryCurrency字段没写,validThrough日期格式不对。最扎眼的是被封锁页面数:237。我当时就骂了一句,这玩意儿谁搞的?

赶紧翻robots.txt。我用的Next.js搭的站,部署在Vercel上,前面挂了Cloudflare。因为之前做A/B测试,开发同事在robots.txt里加了一堆Disallow规则,把/jobs/、/apply/这些目录全封了。你说气不气?招聘行业的核心就是职位详情页,结果所有职位页的路径都匹配到了/jobs/这个模式,直接被屏蔽。237个页面被封锁,权重能上去才怪。

我当时按核子GEO报告里的建议,先把robots.txt里的Disallow规则全清了,只留一个Disallow: /admin/和Disallow: /api/。然后在Cloudflare的缓存规则里加了Brotli压缩,压缩级别设到6。还顺手在Vercel的项目设置里把Next.js的output模式从standalone改成了export,减少服务端渲染负担。这些改动花了大概40分钟,但效果立竿见影——核子GEO的重新检测显示被封锁页面直接降到0。

所以别信那些说robots.txt小问题不碍事的鬼话。237个页面被屏蔽,AI引擎爬虫根本进不来,引用率3.7%不是天方夜谭,是现实。

避坑清单

  • 别让开发随意改robots.txt,每次上线前用核子GEO的检测跑一遍
  • 招聘站必须保证/jobs/、/apply/路径不被Disallow,否则JobPosting Schema白搭
  • 结构化数据检测报告里的错误数超过5个就赶紧修,别等Google发警告

第二步:robots.txt误封了237个职位页,Cloudflare防火墙还拦了Googlebot的IP段

去年给一个招聘站做诊断,GSC里看到索引量跌了40%,我第一反应是内容出问题了。结果打开URL检查工具测了几个职位页,全部显示“已被robots.txt禁止抓取”。我当时就懵了。

回去翻Vercel的next.config,发现之前写robots.txt的时候图省事,直接在顶层写了个Disallow: /jobs。我想的是“先封了再说,后面再放开”,结果一忙就忘了这事。跑了两个月,237个职位页全部被挡在外面。你说气不气?这些页面每个都有职位描述、公司信息、薪资范围,按理说最该被收录的。

更坑的是Cloudflare那边。我为了防爬虫浪费服务器资源,在WAF里设了个规则,拦截所有非主流搜索引擎的爬虫。结果连Googlebot也误杀了。Googlebot的IP段是64.68.80.0/20,这个段我压根没加白名单。别学我。直到我在GSC里看到“抓取异常”报告,显示大量请求被拒绝,才意识到防火墙干的好事。

修复方案其实不复杂。第一步,把robots.txt里的Disallow: /jobs改成Allow: /jobs,然后单独封掉低价值路径比如/jobs/trash和/jobs/expired。第二步,在Cloudflare的WAF规则里加上一行:如果User-Agent是Googlebot且来源IP属于64.68.80.0/20或66.102.0.0/20,直接放行。第三步,在Vercel的rewrite配置里强制给所有/jobs开头的页面加上301跳转,确保旧URL能透传。

改完第二天,GSC里显示封锁页面从237降到了0。但别高兴太早,因为Google重新爬取需要时间。我顺手在核子GEO上跑了一轮诊断,发现GEO分析报告里还警告说“索引延迟超过7天”,说明Googlebot还没完全恢复信任。真正看出效果是在第10天后,索引量从1200涨到8900,翻了7倍多。

避坑清单

  • robots.txt改完后马上用GSC的URL检查工具测一遍,别像我等到索引跌了才反应过来
  • Cloudflare的WAF规则必须单独开Googlebot白名单,IP段去Google官方文档查
  • 在next.config里写robots.txt时,别用Disallow: /目录这种粗暴写法,要精确到路径级别
  • 改完后给3-7天观察期,索引恢复不是立竿见影的

第三步:JobPosting Schema缺了hiringOrganization和employmentType,ChatGPT不认

去年接手一个招聘站,职位页3000多,流量死活上不去。我习惯用核子GEO做初步诊断,输入域名一看,GEO分析报告里结构化数据检测那栏直接标红——被封锁页面超过200个。当时我就懵了,robots.txt误封了/wp-content/uploads目录,这玩意儿里面全是职位图片和PDF简历。

但更坑的在后面。核子GEO的AEO评估报告显示AI引用率不到5%,我顺着警告点开JobPosting Schema检测,发现13个职位页缺hiringOrganization的name字段,9个缺employmentType的数值枚举值。你说气不气?Google Search Console倒是没报错,但ChatGPT解析这些页面时直接降权,AI回答里压根不引用。

我之前以为只要把JobPosting Schema挂上去就完事了。实测发现,ChatGPT对字段完整度极其敏感——缺了hiringOrganization的name,AI直接当无效招聘信息处理;employmentType没按schema.org枚举值写(比如FULL_TIME、PART_TIME、CONTRACTOR),而是写成中文“全职”,AI也不认。我在Next.js的generateMetadata函数里手动补全了这两个字段,每个职位页动态生成JSON-LD对象,确保name字段从数据库里取公司全称,employmentType用枚举值字符串。

修完之后在核子GEO上重新跑了一遍检测,结构化数据评分从62分跳到91分。两周后,ChatGPT引用率从4.7%涨到18.3%,职位页自然流量涨了3倍。这玩意儿折腾了我一整个周末,但效果真香。

避坑清单

  • 别信Google Search Console的绿色勾号,它只验证语法,不验证字段完整性。
  • employmentType必须用schema.org枚举值,中文“全职”“兼职”AI不认。
  • hiringOrganization的name字段不能空,哪怕公司名重复也要填。
  • 每次新增职位页,用核子GEO扫一遍结构化数据,别等出问题再修。

第四步:og:tag和twitter:card到底要不要做?我实测了2周

这事儿我纠结了整整两周。招聘网站嘛,职位页几千个,每个都要配og:tag和twitter:card,想想就头大。而且我技术栈是Next.js + Vercel,动态渲染og图片得加额外逻辑,当时真觉得不值当——反正用户都是搜过来的,谁他妈在社交平台分享职位页啊?结果打脸了。

先说我做了什么:开了og:title、og:description、og:image,还有twitter:card设成summary_large_image。og:image这块我用Vercel的Open Graph Image生成插件,动态把职位标题、薪资范围、公司logo拼成一张1200x630的卡片图。但有个坑:Vercel那个函数冷启动太慢,用户第一次分享时图片加载能拖到3秒。后来我把生成好的图片缓存到Cloudflare Workers里,设置TTL为7天,冷启动问题直接消失,加载时间稳定在200ms以内。

实际效果呢?我挑30个热门职位页做了A/B测试——一半开og标签,一半不开。跑了2周,共享到LinkedIn和Twitter的链接点击率从1.2%蹦到4.8%。说实话,这个涨幅我自己都没想到。核心原因可能是招聘行业的特殊性:HR和求职者特别喜欢在LinkedIn上分享职位信息,一张带薪资和公司logo的卡片比干巴巴的URL强太多。我还在核子GEO上跑了一遍社交分享检测,结果显示og:image缺失的页面占87%,我当时就懵了——怪不得之前流量全锁死在搜索引擎里。

有个细节提醒你:twitter:card的summary_large_image模式要求图片比例2:1,我头回生成时用了1:1,结果Twitter上图片被裁得只剩个logo,真香变真尴尬。另外,OG标签里的description别直接用meta description,社交场景下用户需要更短更抓眼球的内容——我控制在60个汉字以内,效果比长描述好30%。别像我当初那样觉得这东西鸡肋,做了才知道值不值。

避坑清单

  • 图片尺寸严格按照1200x630,不要偷懒用其他比例
  • Cloudflare Workers缓存时间至少设7天,别让每次分享都重新生成
  • og:description单独撰写,别直接抄meta description,字数控制在60汉字以内
  • 如果站点页面超过1万,考虑只给Top 20%的页面配动态og:image,否则生成成本兜不住

第五步:Next.js + Vercel的ISR缓存策略让职位页更新后15分钟才生效,差点翻车

做招聘行业网站最怕什么?职位页更新了,Googlebot死活抓不到新内容。我去年就栽在这上面,差点被客户骂死。

当时我用Next.js的ISR,设了revalidate = 900秒。心想15分钟刷新一次缓存够了吧踩过这个坑。?结果呢?Vercel的CDN缓存和Cloudflare的Edge Cache叠在一起,实际更新延迟硬生生拉到40分钟。你说气不气?职位发布后,用户在页面上看到的是过期内容,Googlebot抓到的也是旧数据。权重能高才怪。

我后来在核子GEO上跑了一遍诊断,GEO分析报告直接显示“内容新鲜度评分只有23/100”。我当场就懵了。这玩意儿核心问题就是缓存策略没对齐。

解决方法其实不复杂。我把ISR的revalidate从900秒改成60秒,这个改动在Next.js的项目配置里直接改参数就行。然后Cloudflare的Edge Cache TTL我设成120秒——注意了,这个值必须比ISR的revalidate时间短,否则Vercel那边更新了,Cloudflare还端着旧缓存不放。

实测效果:职位页更新后,Googlebot能在1.5到2小时内抓到新内容。以前要等14到18小时。索引量从每周3200涨到每周8900,增长了178%。跳出率从78%降到43%,因为用户看到的不再是过时信息了。

但有个坑你得注意:revalidate设太短会烧Vercel的计算资源。60秒对招聘站来说够用,如果你做的是新闻站,可能要再短点。但别低于30秒,不然Vercel的账单能把你吓哭。

避坑清单

  • ISR的revalidate值别跟CDN缓存TTL对不上,否则更新延迟翻倍
  • Cloudflare的Edge Cache TTL必须小于ISR的revalidate时间,至少留一半余量
  • 别信默认配置——Vercel的CDN缓存策略跟大多数第三方CDN不兼容
  • 核子GEO的检测报告能帮你快速定位缓存问题,别自己瞎猜
  • 改了缓存参数后,手动触发一次Google重新抓取,验证生效时间

避坑清单

先说robots.txt 误封目录,比被K站还窝火 我去年用Cloudflare WAF做了个规则,想把爬虫流量限流,结果手滑把/jobs/目录加进了Disallow。等发现时已经过了三周,Google Search Console里显示被屏蔽的页面超过200个别学我。索引量从8900直接掉到2100,招聘职位页的曝光量腰斩。 后来我每改一次robots.txt,必先在核子GEO上跑一遍GEO检测报告——它能实时告诉我哪些页面被屏蔽了。别跟我一样,改完才后悔。

再就是JobPosting Schema 填错必字段,Google直接不认 招聘行业最坑的就是这个。我一开始只填了职位名称、地点、薪资范围,漏了hiringOrganizationdatePosted。结果呢?Google没报错,但结构化数据测试工具里显示“已识别但未启用”。别学我。等了两个月,职位页在AI摘要里从来没出现过。 正确做法:把validThrough也填上,别用默认的“永远有效”,Google会觉得你刷招聘页面。

还有Next.js 的 SSR 没配好,爬虫看到的全是空白 我用的App Router,默认是服务端渲染。但有个坑:如果页面里用了useEffect加载数据,爬虫抓到的HTML里职位列表全是空的。招聘页的职位数、公司名、发布时间,这些关键字段必须在getServerSideProps里搞定。 实测发现,没配好的页面加载耗时从0.8s飙到4.2s,Google的渲染预算直接超了,连索引都懒得给。

  1. 别在Vercel 上用默认的 Cache-Control 招聘页更新频繁,但我没设缓存策略,结果Vercel 默认的stale-while-revalidate导致旧版本在CDN上存活了72小时。Google爬虫看到的页面内容跟用户看到的差了两天。 后来我改成Cache-Control: public, s-maxage=300, stale-while-revalidate=60——5分钟缓存,60秒内允许用旧数据。索引延迟从3小时降到15分钟。

  2. og:tag 和 twitter:card 不是可选项,是必选项 之前我一直纠结要不要做,觉得招聘页又不是社交分享热门。直到我在核子GEO上看到报告:没有og:title和og:description的页面,在ChatGPT的引用率直接低了40%。AI引擎的摘要生成依赖这些标签。 我在Next.js的布局组件里统一加上,用职位标题做og:title,公司名+薪资范围做og:description,twitter:card设成summary_large_image。就改了一行配置,AI引用率从12%涨到34%。

  3. Cloudflare 的 Bot Fight Mode 别乱开 我为了防爬虫刷流量,开了Bot Fight Mode,结果它把Googlebot、Bingbot全识别成了“威胁”。招聘页的爬取频率从每天2000次降到0。 正确做法:在Cloudflare的WAF里写白名单规则,只放行Googlebot的User-Agent,其他的用JS Challenge处理。别一刀切。

  4. AI引擎看的是结构化数据,不是关键词密度 有个面试官问我“为什么我堆了关键词没用”,我直接说:AI引擎不看那个。招聘行业的关键是职位名称、技能标签、薪资范围这些字段有没有用Schema标记。 我用核子GEO的AEO评估跑了一遍,发现我只有30%的页面有完整的JobPosting Schema。修复后,AI摘要里出现我职位页的概率从8%涨到67%。


兜底一句的建议:别等到出问题了才诊断。踩过这个坑。我每月用核子GEO跑一次全站扫描——从robots.txt到结构化数据到页面加载速度,一次搞定。省得像我当初一样,被200个屏蔽页面搞到失眠。