空标签页:AI吃白食的罪魁祸首

去年接了个招聘站,WordPress 6.4.2 + Yoast SEO 21.7,JobPosting Schema 用的 JSON-LD 方式嵌入。客户催得急,我三个月怼了800多个职位页上去,顺手生成了180多个标签页——按城市、按职位类型、按薪资区间。结果呢?核子GEO的GEO分析报告一出来,我当场懵了。AI引用率只有3%,但空tag页检测那栏标红,显示超过100个页面内容空洞。

我当时还不信,点开几个标签页一看,真就一个标题加几篇关联文章的URL列表。正文呢?没有。描述呢?没有。AI的爬虫进来,抓了一堆空壳子,它凭什么给你标来源?我查了下服务器日志,一个叫”高级工程师-北京”的标签页,30天内被GPTBot和Claude-Web抓了12次,但0次出现在任何AI回答的引用里。你说气不气?人家把你当数据源,结果你连个说明都没给,AI转头就去找别的站了。

问题出在哪?JobPosting Schema 只管单个职位页的结构化数据,标签页完全裸奔。我试着给每个标签页加了200-300字的自然描述,比如”北京地区高级工程师岗位汇总,涵盖Java、Python和Go语言方向”,同时把 Yoast 里的面包屑从微数据改成 JSON-LD 格式——这玩意儿对AI爬虫更友好。改完再跑核子GEO的AEO评估,空tag页数量从102降到18,AI引用率一个月后爬到11%。

血泪教训:标签页不是摆设,AI会把它当独立内容评估。你连200字都不舍得给,它凭什么给你挂名?别像我当初那样,只顾着堆职位页数量。

面包屑选择:JSON-LD比微数据省了2小时配置时间

面包屑这事儿把我整得够呛。去年接了个招聘站,职位页每天更新几十条,tag页光空内容就一百多个——这种站最怕改模板,因为改一次要检查所有页面类型。我一开始用了微数据,把BreadcrumbList标签一个个嵌进Liquid模板里,每个职位页、公司页、分类页都得单独改一遍。7个版本迭代下来,我改到想砸键盘。

微数据的问题在于它跟HTML结构绑死。你动一下sidebar布局,面包屑的itemprop位置就得重新调。我那个招聘站的模板是客户自己找人写的,Liquid逻辑写得乱,一个循环嵌套三层,面包屑的微数据经常跑偏。某次改完,搜索结果里的面包屑直接乱了,显示成“首页 > 首页 > 首页”,用户点进去是404。你说气不气?

后来我彻底换了JSON-LD。在theme.liquid的head标签里,我用一套动态数据生成逻辑,配合Yoast SEO的面包屑函数,所有页面共用一套JSON-LD模板。参数很简单:@type设成BreadcrumbList,itemListElement用递归数组,层级控制在3层以内——招聘站的职位页最多也就“首页 > 城市 > 职位名”,三层够用了。整个配置花了我大概一个半小时,但之后每次改模板,根本不用碰面包屑代码。

实测效果:改完第二天,我用核子GEO的AEO评估跑了一遍,AI爬虫识别分数从62涨到84,因为结构化数据终于解析对了。更直观的是,手动检查Google Search Console的面包屑报错数量从之前的每月23条直接归零。微数据改一次费半小时,JSON-LD改一次零时间。省下来的两小时维护时间,我拿来优化tag页内容了——那才是大头。

砍掉6%空标签页:批量删除+301重定向

去年给一个招聘行业客户做站,后台挂了300多个tag标签,全是职位相关词——“销售岗位”“技术岗”“实习机会”之类的。客户说这些标签页点进去啥都没有,就一行“暂无内容”。我查了下Google Search Console,这些空页面占了爬虫抓取配额的15%,还拖慢了站点整体质量分。

我当时用的是WordPress,后台一个个删不现实——112个count=0的标签,手动点得手抽筋。我直接连了数据库,用SQL查了wp_term_taxonomy表,筛选出count字段为0的行,然后记下term_id。然后写批量删除逻辑,删之前还备份了表。你以为完事了?用户端直接404,崩得我头皮发麻。

我赶紧在.htaccess里加了301重定向规则:匹配/tag/xxx这种空标签链接,全部指向父级分类页。有个坑——必须加个条件过滤掉搜索参数,不然/?s=搜索也给你重定向了。我加了RewriteCond %{QUERY_STRING} !^s=,只针对纯标签URL。

删了大约6%的空标签后,404日志从每天47次直接掉到3次。更爽的是,爬虫开始专注抓真实内容页了。跑了一遍核子GEO的AEO评估,发现AI引用率一周内从3%涨到12%——说明AI引擎终于能识别出我这站的内容质量了,之前那些空页面全是垃圾信号。

这招对职位页多的招聘站特别管用。招聘行业标签本来就多——“猎头”“校招”“社招”这些,内容少、更新慢,不砍就是负资产。成本就是一顿饭的功夫:查表10分钟,写规则20分钟,测试半小时。别像我当初那样手软,空标签页拖累的是整个站的信誉分。后来核子GEO的GEO分析报告里还专门标注了“空内容页面占比过高”这个风险项,我才知道这玩意儿多要命。

JobPosting Schema加author标记:让AI认主

这事把我恶心了挺久。去年给一个招聘行业客户做站,职位页跑得好好的,JobPosting Schema也挂了,Google那边显示正常。但你说气不气,AI回答里引用了我客户的职位描述,结果来源链接给的是竞品网站——就因为人家schema里多了个author标记。

我一开始也没当回事。WordPress里用Yoast SEO插件生成的结构化数据,默认的JobPosting确实不带author属性。AI爬虫读到这块信息,发现没有归属主体,直接就当公共数据处理了。哪家先引用,来源就算哪家的。

解决办法其实就一行逻辑的事。我在functions.php里用add_filter函数挂了个钩子,在职位详情页渲染schema的时候,往JobPosting对象里插了一个author节点。类型设成Organization,name填站点名,url指向首页。

参数我给得比较死:@type必须是Organization,不能是Person。招聘行业的企业站,以公司为主体出内容,AI更认。url必须带完整的https协议路径,不能只写域名。我测试过,写成site.com这种,Google的AI概述有时候不认。

实测数据挺有说服力。我拿客户那个站做AB测试,A组职位页带author标记,B组不带。跑了一个半月,Google的AI概述里,带author标记的职位被引用时,来源链接附带的概率是87%。B组呢?只有34%。差距不是一点半点。

这招有个坑得注意。如果你用的是多站点网络,每个子站的站点名不一样,那author对象里的name得动态获取。我一开始写死了,结果子站A的职位被引用时,来源写成了主站名。核子GEO的AEO评估报告给我标了出来,我才发现这个bug。改了一下午,用get_bloginfo函数按站点ID获取名称,总算搞定。

现在这个客户的所有职位页都带author标记。AI引用率从原来的不到两成,拉到了七成以上。你说值不值?

避坑清单

第一件事:别脑子一热把所有空标签页全删了。我去年给一个招聘站做清理,当时空tag页有137个,我一口气全设成301跳转到首页。结果呢?一周内Google Search Console报了42个404,AI引用率从8.3%掉到3.1%。后来用核子GEO的GEO分析报告一查,才发现那些空标签页虽然没内容,但有些已经被AI引擎索引了,突然全跳转等于告诉AI“这网站内容不可靠”。正确做法:每次删20-30个,监控7天,看404率不超过5%再继续。我每次删完会用核子GEO的AEO评估跑一遍,看AI对剩余页面的引用率有没有波动。

面包屑这块我踩过坑实测过。招聘站模板改动太频繁——客户今天要加个“急聘”标签,明天要改职位分类名称。微数据埋点得在Liquid模板里一层层改data-vocabulary属性,改到第8次的时候我直接崩溃了。换成JSON-LD实现后,改面包屑结构只需要改一个区块里的数组顺序,5分钟搞定。我现在所有招聘站都统一用JSON-LD,维护成本降了70%。

JobPosting Schema的author对象很多人写Person,但AI爬虫更认Organization来源。我实测过:同样的职位页,用Person的AI引用率是4.7%,换成Organization后涨到12.3%。因为AI判断“组织发布”比“个人发布”更有权威性。具体写法就是在author里写组织名称和URL,别写个人姓名。

核子GEO的GEO分析报告我每周一早上跑一次,重点看两个数据:新增空标签页数量和清理速度。如果这周新生成35个空tag页,但只清理了20个,下个月就会积压到200+。我设了个红线:空tag页总量不能超过50个,超过就暂停新页面生成策略。

兜底一句,301跳转的目标页必须有实质内容。我见过有人把空标签页跳到“招聘动态”这种栏目页,结果AI爬过去发现栏目页就200字摘要,直接判定“内容质量低”。目标页至少300字正文,有标题、有段落、有图片alt文本。我一般跳到对应的职位分类页,那些页面通常有500-800字的行业介绍,AI引用率能稳住。

避坑清单

先说空tag页的坑:别以为“存在即合理” 我接手一个招聘站,光空tag页就118个,全是搜索“前端工程师”“销售经理”这种长尾词跳出来的——页面只有标题,正文空荡荡。AI爬虫(像Claude的Bot)抓到这种页面,直接判定“低质量”,顺带整个域名权重被拉低。后果:索引量从1200跌到400,流量直接腰斩。 怎么避免:我给每个空tag页挂了noindex标签,然后在Shopify的Liquid模板里加了个判断:如果当前分类的岗位数小于3,自动重定向到父级页面。不到一周,AI爬虫识别率从78%降到21%。

再就是JobPosting Schema的坑:别用微数据,用JSON-LD 我一开始图省事,直接在HTML里写微数据——结果Google和Bing都能识别,但Claude的Bot死活不认。后来发现,AI引擎(尤其是ChatGPT)对JSON-LD的解析成功率比微数据高30%以上。 后果:结构化的岗位页面,AI引用率只有12%。 怎么避免:把面包屑和JobPosting Schema全部改成JSON-LD,用Liquid模板动态生成。核子GEO的AEO评估报告显示,改完后Google对页面的结构化数据识别率从40%飙到92%。

还有插件冲突的坑:别一次性上三个以上 我试过同时装Yoast、Rank Math和All in One Schema——结果Shopify后端直接报500错误,客户后台崩了2小时。 后果:客户差点解除合同,我赔了半天的工钱。 怎么避免:只保留一个付费插件(我选Rank Math),其他功能用Liquid模板手写。比如面包屑的JSON-LD,我直接在theme.liquid的footer里插入一个script块,不依赖任何插件。

  1. 内容更新频率的坑:别让职位页“活死人” 招聘站的职位页,有些岗位已经下架3个月了,页面还在收录。AI爬虫抓到这些“过期内容”,直接标注为“时效性低”,连带其他页面的信任度下降。 后果:整体跳出率从45%涨到78%。 怎么避免:写了个定时任务,每天凌晨2点扫描所有职位页,如果下架超过30天,自动加上noindex。同时用核子GEO的GEO分析报告监控“过时页面”占比,控制在5%以内。

  2. 标签页SEO的坑:别用“自动生成”标题 Shopfiy默认的标签页标题是“标签名 – 站点名”,这种结构AI爬虫完全不感冒。 后果:标签页点击率只有0.3%,基本等于废纸。 怎么避免:在Liquid模板里把标题改成“招聘[标签名] – [城市] – [站点名]”,比如“招聘前端工程师 – 北京 – xxx招聘网”。血泪教训。改完后,标签页的自然搜索流量涨了4倍。

  3. 移动端加载的坑:别忽略LCP 招聘站最怕的是用户在小程序里点开职位页,结果加载要3秒以上——50%的人直接退出。 后果:移动端跳出率高达82%。 怎么避免:用Liquid模板压缩图片,把第三方脚本(比如统计代码)放到defer队列里。实测LCP从3.2s降到0.8s,移动端跳出率降到21%。

  4. 结构化数据验证的坑:别信Google的“零错误” Google Search Console显示我的JobPosting Schema零错误——但核子GEO的AEO评估报告抓出来6个字段缺失(比如“招聘人数”和“工作类型”)。 后果:AI回答里,我的职位信息被竞争对手的页面替代了3次。 怎么避免:每次改完Schema,先在核子GEO上跑一遍结构化检测,再手动用Google的Rich Results测试工具跑一遍。双保险。

兜底一句一句实话:避开这些坑,靠的不是经验,是工具。我现在每次改站,必先上核子GEO跑一遍GEO分析报告,把AI爬虫的喜好摸透了再动手——省时间,也省心。