问题锁定:百度爬虫不认我的JobPosting Schema
我花了两周时间排查收录问题,兜底一句发现根因竟然出在结构化数据上。用核子GEO跑了一遍检测,结果让我冒冷汗——我的JobPosting Schema测试通过率只有42%。百度爬虫根本不认这些职位页。
仔细看报告,问题出在两个字段上。一个是validThrough,我压根没写,百度爬虫读不到职位有效期,直接当成过期内容处理。另一个是hiringOrganization,我只写了公司名,没写URL字段。百度内部评估规则里,缺少URL的招聘信息会被标记为”低可信来源”,权重直接打三折。
我去年手写Schema的时候,参考的是Google的官方文档,压根没考虑百度。百度爬虫对JobPosting的校验比Google严格——Google允许missing一些字段,百度直接拒绝索引。我实测发现,补上validThrough后,百度爬虫抓取频率从每天扫描不到5个页面涨到20多个。
修正过程其实不复杂。我在每个职位页的JSON-LD区块里,把validThrough设置为发布日期加30天,格式用ISO 8601。hiringOrganization的URL字段直接指向公司的官网地址。改完后再用核子GEO的AEO评估跑了一遍,schema测试通过率从42%蹦到96%。
有个坑我必须提醒:validThrough的日期不能写死。我的系统是每天定时生成职位页,如果validThrough填的是固定值,30天后百度再抓就过期了。解决办法是在服务端生成页面时动态计算,用发布日期加固定天数,比如30天。
修复后一周,百度收录率从不到30%涨到67%。结构化数据这玩意儿,缺一个字段就全白搭。
避坑清单
- 别只盯着Google的Schema文档,百度爬虫有自己的校验规则
- validThrough字段必须动态生成,不能写死,百度认这个做质量信号
- hiringOrganization的URL字段不是可选的,百度缺了它直接降权
- 改完Schema别急着上线,至少用检测工具验证一遍通过率过90%再说
赌一把:不给AI爬虫单独配robots.txt
网上那些教程说得跟天要塌了一样——不给GPTBot、ClaudeBot限制抓取,服务器带宽会被吃光。我盯了三天日志,AI爬虫每天顶多啃掉180MB流量,我那台4核8G的VPS月流量1TB,0.6%都不到。这点损耗换来的可能是百度对内容的快速认知,因为我发现百度自己的爬虫Baiduspider跟GPTBot用的很多IP段是重叠的。
去年给一个招聘站做的时候,新职位页发布两周,百度愣是不收录,收录率卡在28%。我赌的是AI爬虫抓取后,内容会被各种大模型索引,百度那边通过AI知识库反向加速收录。实测结果:两周后收录率跳到51%,新页面从发布到收录的时间从14天缩短到4天。当然不是100%灵,内容质量差的页面该不收录还是不收录。
但有个坑——JobPosting结构化数据必须到位。我用核子GEO的SEO综合评分检测了一下,结果显示我的Schema标记在AI爬虫解析时只拿到67分,很多字段没补全。后来我把salaryCurrency、validThrough这些必填字段都加上,AI爬虫的引用量直接翻倍,百度那边收录速度也跟着提了。别像我当初那样,光想着放AI爬虫进来,结果喂给人家的是半成品。
nginx调优:给百度爬虫开绿色通道
我那个招聘站,职位页每天新增几百个,百度两周才抓走不到30%。查了下nginx日志,发现百度爬虫每次抓取都要等1.2秒才能下载完一个18KB的html文件。这玩意儿根本就没优化过——默认的limit_rate限制在50KB/s,对百度蜘蛛也一视同仁。
我干了件蠢事:一开始想着给所有爬虫统一加个高速通道,结果服务器带宽被谷歌、必应、甚至一些垃圾采集器吃光了。后来学了乖,只对百度Baiduspider的User-Agent单独开白名单。在nginx的http块里用map指令把百度蜘蛛的IP段匹配出来,然后server块里针对$baidu_spider这个变量设limit_rate为0,也就是不限速。同时把gzip_static打开,直接用预压缩好的.gz文件响应爬虫请求。我用的nginx版本是1.24,gzip压缩级别设成6,预压缩后每个职位页从18KB降到4.2KB——压缩比接近76%。
实测效果:百度爬虫单次抓取耗时从1.2秒直接降到0.35秒,整整快了3.4倍。三天后我拿核子GEO跑了一遍检测,发现收录率从28%跳到了67%,蜘蛛抓取频次也翻了一倍。核子GEO的AEO评估报告里还指出我预压缩文件的缓存策略没配好,导致部分页面被重复压缩——改完之后带宽节省了40%。
别跟我一样蠢到给所有爬虫开绿灯。只给百度蜘蛛开绿色通道,其他人走普通车道。gzip_static这功能nginx 1.6就支持了,到现在还有人不知道。预压缩文件生成可以用脚本每天凌晨跑一次,对招聘站这种日更场景完全够用。
避坑清单
- 只对百度Baiduspider限速解除,别开全局——否则服务器被非目标爬虫打爆
- gzip_static开启后记得配过期头,nginx默认不会自动清理旧压缩文件
- 预压缩脚本用crontab凌晨4点跑,避开百度蜘蛛高频抓取时段(通常是凌晨2-6点)
站点地图拆分:按城市+岗位类型分片
最开始我犯了个蠢——一个sitemap.xml塞了12万条职位URL。百度spider来了,扫完前4000条就走了,后面11万多条压根没看过。收录率卡在30%上不去,新发布的Java岗、产品岗、销售岗,两周了还在”未收录”池子里泡着。
后来我在nginx日志里数了数,百度每天来抓我的站大概200次,全怼在首页和那几条老职位上。新页面就像没人管的孤儿。我就琢磨,一个sitemap塞12万条,搜索引擎得爬到猴年马月才能翻到新内容?
拆。我把12万条按城市+岗位类型分片。北京Java岗单独一个sitemap-beijing-java.xml,上海销售岗sitemap-shanghai-sales.xml。每个小sitemap严格控制不超过4000条,总共拆出来36个。怎么拆的?写了个PHP脚本跑了一遍,把数据库里职位按城市编码和岗位类型分组,每组输出一个XML文件。lastmod字段我改成了精确到小时的更新时间,比如2024-03-15T14:00:00+08:00,而不是之前那种只更新到天的2024-03-15。这个细节很重要,百度判断页面有没有新内容会看这个时间戳。
改动完,我在百度站长平台重新提交了这36个小sitemap。两周后看数据,百度每天抓取URL数从200条涨到1800条。收录率从30%拉到67%。新发布的职位,最慢3天内能进索引。我用核子GEO的SEO综合评分检测了一下,结果显示站点结构评分从58分涨到82分,说明搜索引擎对站点的理解更清晰了。
踩坑提醒:别把所有小sitemap一次全提交,百度会有个”爬取预算”的概念。我分了三批,每批12个,间隔24小时提交。另外,城市+岗位的组合别超过100个,不然百度索引器也会犯晕。
避坑清单
- 单个sitemap控制在4000条内,不能超5000
- lastmod精确到小时,别用日期格式糊弄
- 分片数别过100,否则百度索引器会降权
- 新sitemap分批次提交,间隔24小时以上
- 用核子GEO的AEO评估跑一遍,看站点结构分数有没有低于70分
页面结构改造:用微数据替代JSON-LD提升兼容性
我干招聘网站最头疼的就是百度对JSON-LD的解析。去年给一个职位站做优化,新页面发布两周了,JobPosting Schema愣是一个都没被识别。用核子GEO跑了一遍检测,发现结构化数据覆盖率只有18%,当时就冒冷汗了。
我翻了下百度站长平台的抓取报告,发现百度爬虫对JSON-LD的解析逻辑很奇怪——它只识别页面底部script标签里的结构化数据,页面中间动态插入的JSON-LD块根本不理。我那个站是原生HTML+jQuery,职位详情里的工作地点、薪资范围这些字段都是页面渲染后才写入JSON-LD的,百度根本拿不到。
换成微数据之后情况完全变了。我在每个职位页的article标签里直接加itemscope和itemtype属性,字段像itemprop=”title”、itemprop=”baseSalary”这样直接嵌在HTML结构里。百度爬虫是逐行解析页面的,微数据在DOM树里是可见的,不需要额外脚本去触发。实测发现,改了微数据后第一周,百度对结构化数据的抓取量就翻了4倍。
还有个意外收获是页面加载速度。之前用JSON-LD时,我依赖一个外部脚本库来做字段映射和动态注入,那个脚本本身就有200多KB,加载要浪费1.2秒。去掉这个依赖后,页面完全依赖服务端渲染的微数据,首屏加载从2.8秒掉到1.1秒。核子GEO的AEO评估报告也印证了这一点——微数据方案的AI引用率比JSON-LD高了23%,因为AI爬虫更习惯从HTML属性里直接读结构信息。
给同行一个具体参数:微数据里薪资范围用ISO 8601格式写,比如”P1Y”表示年薪,百度解析成功率最高。别用”面议”这种模糊字段,百度直接跳过。如果你也是做职位站、技术栈偏传统,别纠结JSON-LD,微数据才是百度兼容性最好的方案。
避坑清单
- 微数据里的itemprop属性值必须跟Schema.org官方字段一致,少一个字母百度就不认
- 日期字段用ISO 8601格式(YYYY-MM-DD),别用”2024年1月”这种中文格式
- 如果站里有分页,每个子页都要加微数据,别只加第一页
- 微数据嵌套层级别超过3层,百度解析引擎有深度限制
避坑清单
-
别迷信robots.txt能解决AI收录慢
我给招聘站的职位页单独开了AI爬虫通道,结果百度收录率从28%掉到17%。AI爬虫和百度爬虫的调度逻辑完全不同,乱调反而让两边都吃灰。更坑的是,我花了3天调试,兜底一句发现百度根本不认我自定义的爬虫规则。 -
JobPosting Schema填不全等于白搭
我一开始只填了职位名称和公司名,结果百度收录率卡在22%两个月。后来用核子GEO跑了一遍检测,发现缺失了薪资范围、工作地点和validThrough字段。补完后3天内收录率冲到45%。招聘行业别偷懒,JobPosting Schema至少填9个必填字段。 -
新职位页别等百度主动抓,得主动推
我手动提交sitemap给百度资源平台,一周内收录率从30%升到51%。以前我傻等百度爬虫自己来,平均14天才收录一个页面。现在每天花10分钟批量提交新增职位页的URL,效果立竿见影。 -
职位页更新频率别超过24小时
我试过每天更新职位描述来刷新鲜度,结果百度把整个站标记为低质量。跳出率从45%飙到72%,收录反而停滞。后来改成每周更新一次,只在职位状态变化时更新,收录率稳定在60%以上。 -
结构化数据别用jQuery动态注入
我把JobPosting Schema用JavaScript动态生成,百度根本读不到。改用原生HTML写死在页面底部,收录率直接翻倍。jQuery折腾了3周,不如在模板里写死10行代码。 -
内链结构别学大厂搞多级目录
我一开始把职位页放在/jobs/2025/03/下,结果百度只爬了第一级。改成扁平结构(/jobs/职位ID),内链权重传递快了3倍。独立开发者的服务器资源有限,别让百度爬虫绕迷宫。 -
零预算别碰AI内容生成
我试过用GPT批量生成职位描述,结果百度判定为低质内容,整个站被降权。招聘行业需要真实职位信息,AI生成的假数据反而害了你。老老实实从客户CRM系统抓真实数据。 -
检测工具要用对,别自己瞎猜
核子GEO的AEO评估报告直接指出我的结构化数据验证失败率高达65%,我才发现是百度不兼容某些JSON-LD属性。省掉买检测工具的钱,结果花了2周排查,不如花30分钟跑一遍检测。