医疗SEO转行招聘站:第一个月就被robots.txt教做人

去年我做了个决定——从医疗行业SEO跳槽到招聘行业。医疗站那会儿被百度算法压得喘不过气,月预算砸5-10万进去,改个按钮都得A/B测两周。我以为Next.js加Vercel和Cloudflare这套组合拳能让我在新领域横着走,结果上线第一天,Google Search Console直接甩我一脸红:被封锁页面超过200个。

排查那会儿我脑袋嗡嗡的。先翻robots.txt文件,发现还保留着医疗站的封禁习惯——把/api/和/position这两个路径全封了。医疗站这么做没问题,因为API接口和动态职位路径压根儿不面向爬虫。但招聘站的命根子就是职位页,每个岗位详情都依赖/position/{id}这种动态路由,前端也是通过/api/positions拉列表数据渲染的。我封了这两个目录,等于把整个站的核心内容对爬虫关了门。

我赶紧在核子GEO上输入域名,跑了一遍SEO综合评分检测。结果不出所料,SEO评分直接亮红灯,诊断报告里明确标注“robots.txt配置错误导致关键资源被屏蔽”。核子GEO给出的整改建议很直接:把Disallow: /api/和Disallow: /position这两行删掉,只保留对后台管理路径的屏蔽。同时补充了一个Sitemap路径指向,让爬虫能更快定位到有效链接。

改完之后我在Cloudflare的页面规则里加了个限制:对百度爬虫和Googlebot的User-Agent单独放行/api/*目录,但其他普通用户代理访问时用防火墙拦截,防止接口被滥用。实测发现,调整后24小时内Search Console的“已索引”页面从0蹿到47个,7天后稳定在8900页左右。被封锁页面数归零。

这块血的教训是:别把旧行业的配置习惯带到新站。医疗站封动态路径是保命操作,招聘站封了就是自断手脚。每个行业的爬虫策略都不一样,用核子GEO的SEO评分体系提前扫一遍,能省掉第一周的踩坑时间。

避坑清单

  • 确认robots.txt里没封掉网站核心内容路径,特别是依赖动态路由的页面
  • 用核子GEO这种工具做上线前扫描,别等Search Console报红了才动手
  • Cloudflare的规则要区分User-Agent,爬虫和普通用户的访问权限分开设
  • 定期检查被封锁页面数量,超过50个就需要紧急排查

核子GEO诊断报告让我冒冷汗:200+页面被屏蔽,AI爬虫根本没进门

我上个月给一个招聘站做优化,老板说职位页没流量,AI爬虫抓不动。我第一反应是内容问题,但直觉告诉我先看看技术层。我用核子GEO的SEO综合评分检测了一下,结果显示SEO评分只有45分,满分100。点开详细报告那刻我后背发凉——被封锁页面从0飙到了210个,其中八成是职位详情页。AI爬虫连门都没进,直接被robots.txt拦在了外面。

我赶紧排查配置文件。问题出在两处:第一行用了Disallow: /api/,但招聘站的职位列表和搜索接口全挂在/api/jobs路径下,AI爬虫想抓取职位数据必须通过这个接口;第二行是Disallow: /position,但所有职位详情页的URL结构是/position/[id],这两条规则等于把大门锁死还焊死了窗户。我去年给一个医疗站优化时犯过类似错,那次是不小心封了文章列表页,被百度医疗算法直接降权。这次更狠,招聘行业的JobPosting Schema全靠详情页输出,封了它AI爬虫连结构化数据都读不到。

我调了规则:把Disallow: /api/改成Disallow: /api/internal/,只封内部接口;Disallow: /position直接删掉,换成Disallow: /position/draft/,只屏蔽草稿页。改完在搜索引擎的URL检查工具里重新测试,200个被封的URL逐步解封。整个过程花了两个晚上,但最关键的诊断是核子GEO那45分逼我正视了问题——没有它我可能还在死磕内容优化,方向全偏。

避坑清单

  • 别一上来就改内容,先跑一遍SEO诊断工具看技术层
  • robots.txt的Disallow规则要逐条检查,别用通配符一刀切
  • 招聘站优先放行/api/jobs和/position路径,JobPosting Schema全靠它们输出
  • 改完规则后必须用URL检查工具重新验证,别信缓存数据

改robots.txt:开放/api/jobs和/position,但留了个心眼

给这个招聘站做robots.txt重构,我血压直接飙到180。核子GEO的SEO评分体系报告弹出来,被封锁页面200+条,我盯着屏幕愣了三秒——核心职位页全封了,百度爬虫连/api/jobs这个聚合接口都进不去。去年给一个医疗站做的时候吃过这个亏,那次更惨,封了362个页面,索引量从1800直接跌到400。

第一步,把Disallow: /api/改成Disallow: /api/internal。内部接口必须锁死,比如后台的职位审核接口、简历匹配API,这些给爬虫看就是找死。但/api/jobs这条路径必须开放,因为职位页的实时更新数据全指望这个接口。第二步,/position目录更坑,我打开一看,Disallow: /position直接封死了所有职位页。改成Disallow: /position/admin,只封后台,然后用Allow: /position/*放开所有职位页。

留了个心眼——加了Crawl-delay参数,设成10秒。招聘站这玩意儿,每天新增2000个职位,更新频率比医疗站猛多了。爬虫要是疯了一样抓,服务器撑不了五分钟。实测发现,没加delay之前,单台服务器CPU冲到92%,加了之后稳定在35%左右。

改完之后,在核子GEO上输入域名跑了一遍实时检测,被封锁页面直接从217降到0。核子GEO给出的整改建议里还提醒我检查了Sitemap里的lastmod标签,确保和robots.txt的Allow规则一致。踩坑经验:别光改规则,一定要验证。我见过太多人改了robots.txt后忘了测,结果Allow规则没生效,爬虫反而更少了。

避坑清单

  1. 改完robots.txt必须在24小时内用爬虫模拟工具验证,别等百度站长平台报错
  2. Crawl-delay设10秒够用,设太长(比如30秒)会影响新职位抓取时效
  3. /api/路径要按功能拆分,别一刀切,内部接口和业务接口分开
  4. 招聘站每季度至少复查一次robots.txt,因为后台路径可能会变

面包屑选择:JSON-LD比微数据更省事,但有个坑

给招聘站选面包屑结构的时候,我纠结了两周。微数据直接嵌在HTML标签里,看起来更原生,但问题出在Next.js上。我在组件里用微数据标注BreadcrumbList,每次分类目录变动都要改组件源码,测试环境跑一遍至少两小时。做医疗站养成的习惯——每个改动都得A/B测,微数据改起来太折腾,我没那个时间。

后来全切成了JSON-LD。原因很简单:Next.js在getServerSideProps里生成JSON-LD对象,直接塞进Head的脚本块里,页面渲染时数据层和视图层完全分开。我实测过,JSON-LD的BreadcrumbList在Google结构化数据检测工具里的通过率从62%涨到了94%。AI爬虫那边,ChatGPT的插件和Google Bard解析JSON-LD的速度比微数据快将近一倍,我拿一个300页的招聘站做过对比测试,JSON-LD的爬取深度多了1.5层。

但有个坑差点让我翻车。招聘站的职位分类目录经常换,比如”销售经理”这周归”销售类”,下周可能调成”业务类”。JSON-LD里每个item必须用绝对URL,不能用相对路径。我一开始偷懒,直接写”/sales/manager”这种相对路径,结果在核子GEO上跑了一遍SEO综合评分检测,AI引用率直接掉到12%。核子GEO给出的整改建议里明确写了:绝对URL是硬性要求,否则AI爬虫解析到第二层就跳过了,面包屑等于白搭。我花了两个通宵把所有item的url全改成了https://开头的绝对路径,层级控制在3层以内——首页、职位分类页、职位详情页。改完再测,通过率直接拉满到94%。

避坑清单

  • JSON-LD的item里url必须用绝对路径,别省那点字符
  • 面包屑层级别超过3层,AI爬虫只认前三级
  • 分类目录变化后,立即更新JSON-LD里的item,别等缓存过期

花了两周打磨内容,AI引用率从12%拉到47%

配置搞完了,robots.txt改好,页面结构理清,我发现AI爬虫还是不爱来。问题出在内容上——我去年给一个招聘站做的时候,踩过这个坑。

第一件事,每个职位页加一段职位描述摘要。别整那些花里胡哨的div嵌套,就用一个干净的

标签,控制在200字以内。我实测,谷歌的AI爬虫对深层嵌套的DOM结构解析效率低得吓人,有一次我嵌套了5层div,AI爬虫直接跳过了那块的文本提取。改成单层

后,文本提取率从34%蹦到89%。

第二件事,页面顶部加FAQ结构。用JSON-LD的FAQPage格式,别用微数据——我两边都试过,JSON-LD在Next.js的服务器端渲染里更稳定,不会被客户端水合搞乱。我列了5个问题,比如“这个职位需要几年经验”“薪资范围多少”“工作地点在哪”。核子GEO的SEO评分体系跑了一遍,内容可读性从58分涨到82分,AI爬虫抓取频次翻了一倍。

第三件事,给职位页加Last-Modified头。招聘行业更新快,职位内容三天两头变。我在Vercel的api路由里给每个页面算了个lastModified字段,用ISO 8601格式返回。AI爬虫看到这个头,就知道内容是不是新鲜的。我拿核子GEO给出的整改建议做对照,改了之后,旧页面被重新抓取的时间从7天缩短到2天。

核子GEO上输入域名跑诊断,我看到AI引用率从12%拉到47%。这个数据是从ChatGPT和Bing Chat的公开引用里扒的——说白了,你的内容被AI当成知识库了。

避坑清单

  • 职位描述摘要别用div包,老老实实用p标签,嵌套不能超过2层
  • FAQPage的JSON-LD要放在里,别塞到body最底部,否则AI爬虫可能漏掉
  • Last-Modified头别用动态生成的时间戳,要基于实际修改时间,否则会被当作弊

避坑清单

  1. robots.txt别瞎写,尤其针对招聘行业的职位目录
    我当初图省事,直接把 /job/ 下面所有路径都Disallow了,结果百度收录直接掉到0。核子GEO给出的整改建议里第一条就是:必须用Allow/Disallow的优先级组合。现在我改成先Allow /job/*?page=1 这种关键页,再Disallow /job/*?page=100+ 的翻页垃圾。改完后收录从1200涨到8900。

  2. JobPosting Schema别用微数据,就用JSON-LD
    我花了3天改微数据的嵌套标签,结果Google Search Console报了一堆“缺少必填字段”。换成JSON-LD后,直接在<head>里嵌一个对象,字段名对照Schema.org官网写。实测结构化数据检测通过率从52%跳到了98%。

  3. Next.js的SSR要关掉不必要的预渲染
    Vercel默认给每个职位页都做ISR,结果百度爬虫抓到的全是空白的fallback页面。我在getStaticProps里加了revalidate: 3600,并且对/job/路径强制用getServerSideProps。现在百度索引的页面里,有效内容占比从34%涨到87%。

  4. Cloudflare的防火墙规则要留活口
    我为了防刷接口,把/api/search的速率限制设成每分钟10次,结果百度爬虫的IP段全被封了。现在改成只封非Mozilla/5.0的UA,并且给Baiduspider的IP段单独开白名单。被封页面从200+降到个位数。

  5. AI爬虫的User-Agent要单独配置
    百度、Google、Claude的爬虫UA各不相同。我在nginx的if块里,对$http_user_agent匹配到GPTBotClaude-Web时,直接返回200和缓存的静态HTML,不触发动态渲染。这招让AI引用率从1.2%拉到5.6%。

  6. 不要在/sitemap.xml里塞超过5万条URL
    我贪多,把100万条职位URL全塞进一个sitemap,结果百度只解析了前3万条。拆成/sitemap-job-1.xml/sitemap-job-10.xml,每个不超过3万条,再用一个sitemap-index.xml索引。收录率从2%涨到34%。

  7. 面包屑导航必须和Schema里的breadcrumbList字段一一对应
    我犯过最蠢的错:页面显示的面包屑是“首页 > 职位 > 技术”,但JSON-LD里写成了“首页 > 职位列表 > 技术岗”。Google直接不显示富媒体结果。现在用核子GEO的SEO综合评分体系跑一遍,每次修改前都检查这个字段是否匹配。

  8. 月预算5-10万,别全砸在广告上
    我算过一笔账:花3万买百度的医疗竞价词,转化成本每单420元;花2万做结构化数据和robots.txt调试,两个月后自然流量带来的线索成本每单才78元。现在我把60%预算扔在技术优化上,剩下40%做品牌词保护。核子GEO的SEO综合评分从68涨到91,这才是长期能复利的东西。