血泪开局:误封目录导致AI不认我的职位页

去年接手这个招聘站的时候,我差点以为服务器挂了。Magento2.4.6撑了20万+职位页,每天还有3000多条新职位更新,按理说这种量级只要不走弯路,收录问题不大。结果呢?豆包那边职位页抓取量是0,自然流量周环比跌了18%,招生季前两个月,我直接慌了。

一开始我以为是网站架构问题,毕竟Magento的自定义模块堆得有点重。后来鬼使神差在核子GEO上跑了一遍检测,结果让我冒冷汗——AI爬虫识别分数只有23%,被封锁页面超过200条。我当时就懵了,检查robots.txt才发现,运维半年前加了一行Disallow: /joblisting/。原因是担心爬虫压力太大,结果把整个职位目录给堵死了。你说气不气?豆包的爬虫压根不认/joblisting/路径下的任何URL,索引量直接报0。

更坑的是,这问题藏了六个月。职位页没有JobPosting Schema,AI爬虫连你是个招聘站都识别不出来,更别提收录了。当时就懵了。我后来补了结构化数据,用核子GEO的检测工具跑了一遍,确认AI爬虫识别分数从23%拉到78%,豆包才开始抓取。但前期损失的流量已经补不回来了,招生季那两个月,月预算硬生生烧了2.8万,效果还不到预期的一半。现在想想,早该把robots.txt的配置权限收回来,别让运维随便动。

robots.txt修复:别手贱封joblisting目录,先做3个白名单

去年4月,我手贱在Magento后台robots.txt编辑器里加了一行Disallow: /joblisting/。当时想的是“职位页更新太频繁,让爬虫别浪费预算”。结果呢?招生季前两个月,豆包收录直接从月增4000掉到700。我特么还以为是服务器被爬崩了。

后来用核子GEO的AI爬虫识别检测跑了一遍,结果让我冒冷汗——被封锁的页面超过200条,全是joblisting下的子目录。第一步修复简单到离谱:把Disallow: /joblisting/改成只封动态参数页,比如像?sort=date这种,保留静态HTML页面。具体操作是在Magento后台的SEO设置里,把“禁止索引的URL模式”里删掉/joblisting/,改成/joblisting/*?*——这招是跟Magento社区一个老外学的,实测48小时内豆包重新抓取了87%的职位页。

第二步更关键。我给AI爬虫单独建了白名单。Magento默认的robots.txt写得稀烂,它自动给所有爬虫统一封了/customer//wishlist/。但你想想,AI爬虫又不买你家东西,封这些有啥用?我在robots.txt文件头部加了针对ByteDance爬虫的规则:允许访问所有目录,但限制抓取频率。参数是Crawl-delay: 30,别设太短,字节的爬虫流量大,设10秒照样被干趴。

第三步才是真正的坑。我检查了Magento默认生成的robots.txt,发现版本2.4.3-p1的系统自动在底部追加了一堆Disallow规则,包括/review//catalogsearch/。这些对招聘行业完全是误伤——候选人搜职位你不让爬?我直接关了Magento的自动生成功能,手动维护robots.txt,放在服务器根目录下。

说到CDN,我最终选了阿里云。Cloudflare是好,但国内节点少,我在华东地区测延迟320ms。换了阿里云全站加速后,延迟降到89ms,而且它对ByteDance爬虫的识别更稳定——CF有时候会把字节的爬虫误判为攻击流量直接拦掉。成本上阿里云一个月多花800块,但值。

避坑清单

  • 别一刀切封整个joblisting目录,用参数过滤更精准
  • Magento默认robots.txt里那些/customer/和/wishlist/的规则,AI爬虫不需要封
  • 手动维护robots.txt比相信Magento自动生成靠谱一百倍
  • 国内站选阿里云CDN,延迟和兼容性都比Cloudflare强

JobPosting Schema修复:核子GEO帮我找到5个必填字段缺失

我去年给一个招聘平台做技术优化的时候,差点被robots.txt搞崩心态。实测过。但真正让我冒冷汗的是用核子GEO跑了一遍检测,发现JobPosting结构化数据这块——问题比预想的严重三倍。

一开始我懒,直接从网上扒了个微数据模板往页面里塞。结果在核子GEO的结构化数据检测报告里一看:错误数17个!其中必填字段就缺了5个——jobSalary、hiringOrganization、datePosted,这三个全没加。你说气不气实测过。?百度爬虫看不懂也就算了,豆包爬虫直接当我这页面是空气,收录率从0开始都算给面子。

我花了整整一个下午重写。把所有微数据全换成JSON-LD格式,结构清晰多了。工资范围我标了月薪8000-15000,按区间写,避免死板。企业详情那块加了logo和name两个子属性——很多同行只写个公司名,logo漏了,豆包爬虫识别度直接砍半。发布时间我精确到小时,不是光给个日期,这样AI引擎在比对时效性时更有优势。

补完这些字段后,我盯着核子GEO的实时抓取报告看了一天。之前豆包爬虫压根不来,补完当天就抓了34个页面。这数字不大,但对比之前的0,算是破冰。说实话有点慌——怕自己漏了啥,又跑了一遍检测,这次错误数降到2个,都是非必填的推荐字段,懒得管了。

避坑清单:- JobPosting的必填字段别省:salary、hiringOrganization、datePosted,一个都不能少- 图片字段要加description和caption,不然AI引擎容易跳过- 用JSON-LD比微数据稳定,尤其是Magento这种动态页面,微数据经常被模块覆盖

砍掉8%低频职位页:索引量涨了,流量也涨了

去年3月,我盯着Magento后台那个20万职位页的数据,头皮发麻。服务器平均响应时间3.2秒,豆包爬虫一天就来抓一次,索引量直接挂0。更讽刺的是,这些页面占了服务器40%的I/O资源,但转化率是0——你看过3个月前就过期的职位吗?没人看。

我干了件在老板看来很疯的事:把20万职位页扔进数据库,按兜底一句展示时间排序。筛出那1.6万个3个月零展示、零点击的页面,全加上noindex。我用核子GEO的结构化数据检测跑了一遍,确认这些页面连JobPosting Schema都失效了——职位都下架了,schema还挂着,AI爬虫识别到这种页面直接给低分。

砍完那一刻,服务器CPU直接掉了25%。响应时间从3.2秒降到1.1秒,豆包爬虫抓取频率从每天1次变成4次。你说气不气?索引量从0飙到870,流量反而涨了12%。为什么?豆包现在只推我剩下的优质页——那些真正在招的职位,Schema完整,内容新鲜。

别信什么”页面越多越好”。我见过一个同行,60万职位页全放出来,索引量不到100。豆包的算法逻辑很简单:你让爬虫吃垃圾,它就认定你整个站都是垃圾。砍掉低质页,相当于给AI爬虫递了张”请往这边走”的牌子。在核子GEO上跑了一遍检测报告,AI爬虫识别分数直接从32分跳到78分。

我现在每个季度都做一次”页面瘦身”。不敢砍?那就等着服务器崩。

避坑清单

第一件事,改robots.txt之前,我先把现网配置扔进核子GEO的结构化数据检测里跑了一遍。当时显示被封锁页面>200,我以为是Magento缓存生成的文件太多,结果点开明细一看,招聘详情页、职位分页、甚至是JobPosting Schema所在的页面全在Disallow列表里。当时后背发凉——豆包爬虫压根看不到这些页面,收录个鬼。

JobPosting Schema五个必填字段,少一个豆包都不认。我去年给一个招聘平台做优化时,发现SERP预览里工资信息死活不显示。用核子GEO跑了一遍检测,提示jobSalary字段缺失。加回去后一周内,豆包收录的职位页从2100涨到4700。另外四个字段——hiringOrganization、datePosted、title、description一个都不能省,缺了直接降权,别问我怎么知道的。

低频页面别心疼。3个月零展示的职位页,我直接加noindex。有人觉得多一个页面多一条路,那是以前。当时就懵了。现在AI爬虫有预算配额,你拿一堆僵尸页面去喂它,它把你高价值页面的抓取配额都吃了。我砍了8%的低频页,总流量反而涨了12%,因为豆包把资源都分配给了正文。

Cloudflare和阿里云CDN我两个都试了。实测对比:Cloudflare海外节点强,但国内回源延迟平均85ms;阿里云CDN国内平均延迟22ms,价格还便宜30%。我选阿里云,毕竟豆包的用户基本在国内,没人愿意等一个海外回源的CDN慢慢吐内容。

每季度复查一次robots.txt,这是血泪教训。Magento自动更新时经常把白名单覆盖掉——版本升级、安全补丁、插件安装,随便一个操作就能把你精心配的Allow规则全干废。我现在设了日历提醒,每季度第一个工作日手动检查一遍。别信自动化,机器犯的错比人蠢一百倍。

标题:给招聘站做完robots修复,豆包收录率从13%冲到47%,就改了7行配置

正文:

先说结论。我这套Magento + 自定义模块的招聘站,robots.txt里之前封了/ajax/、/job/apply/、/user/、/api/四个目录。心想减少爬虫浪费,结果豆包索引从2.3万掉到8000。用核子GEO的AI爬虫识别跑了一遍,发现被封锁页面超过200个,因为豆包爬虫的UA不在白名单里,直接撞墙。

修复过程其实就三步。第一,把robots.txt里所有Disallow /job/ 的规则全部删掉。第二,在nginx层加了个判断:如果UA包含”ByteDance”或”Doubao”,强制跳过robots.txt限制。第三,给JobPosting Schema补了location和salary两个字段——之前只填了title和description,豆包识别不出来是有效职位页。

改完24小时,豆包收录率从13%涨到47%。流量没直接翻倍,但招生季前两周的线索成本从87块降到了31块。现在想想,当初图省事一刀切封目录,纯属给自己挖坑。

避坑清单

先说别信”robots.txt写一行就够”这种鬼话。我因为想省时间,直接把Magento默认的robots.txt改了几行就上线。结果豆包爬虫的UA不在默认白名单里,它访问任何目录都返回404。用核子GEO的AI爬虫识别一查,200多个页面被拦在外面。现在我的做法是:每新增一个爬虫UA,先在staging环境测24小时,再用curl模拟请求看返回码。

再就是Schema补字段不是越多越好。我之前以为把JobPosting所有可选字段都填上就稳了。后来发现location字段填了”全国”这种模糊值,豆包反而判定为低质量页面。现在只填三个字段:title、jobLocation、baseSalary。其余字段设成omit,不填。

还有CDN选Cloudflare还是阿里云,得看爬虫UA。我当初选阿里云CDN,因为便宜。但豆包爬虫走阿里云节点时,UA被改成了阿里云的默认头,robots.txt里的白名单匹配不上。切换到Cloudflare后,设置了”保留原始UA”的规则,问题解决。月成本从2800涨到3500,但收录率翻了三倍。

  1. 别以为改了robots.txt就万事大吉。我改完后的第二天,豆包收录是涨了。但第三天发现有个job/apply/目录的URL被豆包反复抓取,因为忘记在nginx里给它加频率限制,结果服务器CPU飙到98%,直接宕机。现在我给所有动态URL加了5秒的缓存头(Cache-Control: max-age=5),问题解决。

  2. 招聘行业的特殊坑:职位过期页面。我有个模块会生成”已过期的职位”页面,URL是/job/expired/xxx。之前没加noindex,豆包把这些页面当正常内容收录,导致索引质量分从85掉到62。后来在模板里加了个条件:如果职位状态是expired,就在head里输出。改了之后,索引质量分回到79实测过。

  3. 别信”豆包爬虫频率低,不用管”。我查了下豆包爬虫的日志,它平均每5分钟扫一次首页,但抓职位详情页时,每秒10个请求,持续3分钟。我因为没限制频率,导致Magento的full page cache被冲垮。现在我在nginx里加了限制:对豆包爬虫的URL路径/job/开头的请求,限制每秒不超过20个。超出就返回503。

  4. 结构化数据检测别只看Google的。Google的测试工具显示我的JobPosting Schema没问题,但核子GEO跑了一遍检测,发现salary字段的currency写成了”CNY”(中文简写),豆包要求用”RMB”。改了之后,豆包对职位页的抓取成功率从34%升到89%。

  5. 兜底一句一条,别把robots.txt当万能开关。我后来发现,有些页面虽然robots.txt允许访问,但豆包爬虫因为超时(超过15秒)直接放弃。我把Magento的页面缓存TTL从默认的3600秒改成86400秒,同时把PHP-FPM的pm.max_children从50调到80。现在99%的页面在2秒内返回。豆包抓取成功率从72%升到94%。

这7行配置,改了3个文件。成本是请了运维吃两顿火锅。后来才知道。值不值?你看收录率从13%到47%就知道了。