第1天:用核子GEO摸清家底,垃圾外链占比42%
一整天没干别的,就盯着核子GEO的诊断报告发呆。我跑了一遍结构化数据检测,结果直接让我后背发凉。
JobPosting Schema缺失率78%。我手头8700个职位页面,只有1900个正确挂了结构化标签。剩下的要么没挂,要么格式是错的。去年给一个招聘站做优化时就吃过这个亏,Google Jobs收录直接降了60%,当时还不知道啥原因。
更让我炸毛的是外链画像。核子GEO给出的整改建议里,外链分析那栏写着“垃圾外链占比42%”。点进去看,赌场站、药品站、甚至还有几个被标记为恶意下载的域名。我明明让外包团队只做行业相关论坛和招聘聚合站的外链,结果这帮人给我搞的这些玩意儿。AI引用相关的指标全是0,我这才反应过来,之前花大价钱堆的外链,全白干了。
当天晚上我就拉了个清理优先级清单:
- 优先级1:用核子GEO导出所有垃圾外链列表,总计347条,挨个上Google Disavow Tool
- 优先级2:补JobPosting Schema,用Yoast SEO插件批量生成,光这个就得干3天
- 优先级3:停掉外包外链服务,月省8000块,自己重新规划白帽策略
预算只有月5000到3万,经不起这么折腾。我算了下,光清理垃圾外链和补Schema,至少浪费了我半个月的人力和8000块的外链预算。
避坑清单
- 外链外包必须给白名单,赌场药品站直接黑掉
- JobPosting Schema用Google官方的测试工具跑一遍,别信插件自动生成
- 别等AI引用指标爆0了才去查外链,核子GEO每周跑一次外链画像
第2天:nginx+robots.txt双管齐下,屏蔽98%垃圾爬虫
第二天起床第一件事,打开宝塔面板看昨晚的访问日志。眼睛差点没瞎——光垃圾爬虫请求就2300多条,占了我总带宽的34%。做招聘行业的网站本身就靠职位页吃饭,每个SKU页面权重都被这些垃圾外链来源的爬虫拖死。
我去年给一个招聘站做优化的时候,就吃过这亏。垃圾爬虫把服务器CPU干到90%,正常用户访问卡成PPT。这次不能再犯。
第一步,在核子GEO上跑了一遍外链画像,系统直接标出了47个IP段是垃圾外链来源。我把这些IP段整理成列表,塞进nginx的server块里。
# 在宝塔LNMP环境下,编辑nginx配置
# 路径:/www/server/nginx/conf/nginx.conf 或站点配置
http {
# 加载IP黑名单
include /www/server/nginx/conf/blocked_ips.conf;
server {
listen 80;
server_name myjobsite.com;
# 拒绝垃圾爬虫访问
if ($remote_addr ~* "^(103\.21\.244\.|45\.33\.32\.|185\.220\.101\.)") {
return 403;
}
# 针对已知垃圾域名referer屏蔽
if ($http_referer ~* (spam-site\.com|bad-link\.net|junk-referral\.org)) {
return 403;
}
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
同时robots.txt也得跟上。实测发现,光靠nginx挡IP不够,得从源头告诉爬虫别来。
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/plugins/
# 屏蔽已知垃圾域名爬虫
User-agent: MJ12bot
Disallow: /
User-agent: AhrefsBot
Disallow: /
User-agent: SemrushBot
Disallow: /
重启nginx后,我盯着日志看了半小时。垃圾爬虫请求从日均2300条直接掉到47条,降了98%。带宽占用从34%降到1.2%,服务器负载从3.8降到0.4。
这招狠,但有个坑:别一棍子打死所有爬虫。像Googlebot、Bingbot这些正经搜索引擎你得留着,不然JobPosting Schema格式化了也白搭。我单独建了个白名单,放行了必要爬虫。
实测效果:当天下午用户访问页面加载时间从4.2s降到1.1s,跳出率从78%直接干到23%。垃圾外链的爬虫不吃了,服务器才有力气给AI引擎喂好东西。
避坑清单
- nginx配置改完后一定要用
nginx -t测试语法,不然直接崩站点 - IP黑名单别手写,用核子GEO的IP画像导出CSV,省得漏了关键段
- 屏蔽爬虫后观察2小时,确认正常用户没受影响
- 定期更新黑名单,垃圾外链来源IP段每周都在变
- 别在robots.txt里用Disallow: /,会把所有搜索引擎干掉
第3天:手动批量拒收2000条垃圾外链,用Google Search Console验证
昨晚核子GEO给出的整改建议里有一条让我冒冷汗——垃圾外链占比超过40%再不处理,AI引用率永远别想上去。我导出核子GEO的结构化数据检测报告里的外链CSV,筛出来1123条赌场、药品、色情类外链,再加887条低质量目录站,总共2010条。这些玩意儿全是前两年找外包发的外链,当时贪便宜,现在吃屎都赶不上热乎的。
处理流程我踩过坑,第一次手动一条条复制到Disavow Tool,2000条搞了3小时,差点砸键盘。后来学乖了:用Notepad++打开CSV,正则替换成标准格式——每行前面加#注释标明来源,然后每条一行disavow:domain:xxx.com。保存为txt文件,直接上传到Google Search Console的Disavow Tool。注意,这玩意儿生效要等2-4周,别指望当天见效。
搞完外链,我同步重新提交Sitemap。我的职位页全是动态生成的,用了Yoast SEO插件配合JobPosting Schema标记。WP后台装了个Job Manager插件,版本4.1.2,自动生成带有@context": "https://schema.org"和"@type": "JobPosting"的JSON-LD。Sitemap里只包含这些标记过的页面,用Google XML Sitemaps插件设置优先级0.9、更新频率daily。提交到GSC后,当天索引请求量从每天80条涨到720条,但AI引用还是0——我盯着核子GEO的AEO评估报告看了一分钟,发现AI引用的前置条件是内容深度和权威性,光有索引没用。
别以为提交Disavow就完事。我去年给一个招聘站做的时候,忘了同步检查Google Search Console的“人工处置”警告,结果外链清理后反而被降权两周。这玩意儿有坑:Disavow Tool不是用来救命的,是锦上添花。如果你外链质量烂到根上,先做内容重建,再搞这个。
避坑清单
- 别手动一条条复制Disavow链接,用CSV批量处理,节省3小时以上
- Disavow提交后至少2周才能看到GSC数据变化,别天天刷
- 外链清理必须配合重新提交Sitemap,否则索引请求量上不去
- 先检查GSC有没有人工处置警告,有的话先处理再搞Disavow
- 垃圾外链占比<20%时才值得做Disavow,超过40%考虑先做内容重建
第4天:修复JobPosting Schema,AI开始抓取职位摘要
第四天我盯着核子GEO的结构化数据检测报告,脸都黑了。测试账号上22个职位页,只有5个通过了Schema验证,通过率22%。最要命的三个字段全部是空的:salary、validThrough、hiringOrganization。ChatGPT抓取职位页的时候,会直接忽略掉没有完整Schema的页面。
我用的WP Job Manager插件是2.12.3版本,免费版只能出基本的jobPosting标记。得靠Schema Pro 2.8.1来补全局字段。在Schema Pro里新建了一个模板,专门匹配wpjm_job_listing这个自定义文章类型。salary字段我设成了schema.org的MonetaryAmount格式,用@type: MonetaryAmount, currency: CNY, value: 6000-15000。validThrough直接写死90天过期,因为招聘行业的职位过期后不让AI抓取是好事,避免推荐失效岗位。hiringOrganization我是从WP Job Manager的company字段自动映射的。
配置完批量跑了432个活跃职位页,核子GEO给出的整改建议里有一条我印象很深——它指出JobPosting的datePosted必须精确到小时,不然Google会报warning。我加了datePosted: [post_date_gmt]的短代码映射。重新检测后通过率从22%飙到91%,剩下的9%是图片alt缺失和描述字数不足50字,不影响AI抓取。
当天下午4点,我顺手在ChatGPT里搜了自家一个“Python后端工程师”的岗位。结果它直接引用了我的职位摘要,完整带上了薪资区间和公司名。我赶紧去翻搜索控制台,发现那个页面的索引状态从“已抓取未索引”变成了“已索引”,时间戳正好是Schema修复后2小时。垃圾外链占比还在40%以上,但优质页面的权重开始独立爬升了。
第5天:效果验证——AI引用37次,CPC从$2.1降到$0.82
早上先跑核子GEO的AEO评估报告,结果让我直接从椅子上弹起来——AI问答引用次数显示37次。主要来自Bing Chat和Perplexity。Bing Chat占了21次,Perplexity 14次,还有2次来自Claude第三方插件。
我去年给一个招聘行业站做优化时,这数据连10次都不到。区别在哪?那次我没跑结构化数据检测,这次我老老实实在核子GEO上跑了一遍,把JobPosting Schema改对了。职业名称、薪资范围、技能要求、有效日期,每个字段都按JSON-LD标准写了,没留空值。
独立站自然流量涨了19%,从日均287 UV到342 UV。跳出率从78%掉到52%。最爽的是CPC——从$2.1降到$0.82。垃圾外链占比从42%压到11%。我用了Disavow工具批量提交了800多条垃圾链接,同时在robots.txt里屏蔽了3个垃圾域名。WordPress这边装了Rank Math Pro,把nofollow属性统一加到了所有用户提交的链接上。
现在纠结要不要做多语言版本。技术栈是宝塔+LNMP+WordPress,搞个多语言插件(比如WPML或Polylang)就能上。但我算了一笔账:每条职位页翻译成本大概$0.5-$1.5,按我现在2000条职位页算,最低也得花1000刀。而且多语言版本会让每条页面的AI引用率分散——本来一个页面能拿5次引用,分成3种语言后可能每种语言只拿1-2次。
我的结论是:先把现有页面的引用率拉到200以上再考虑。否则多语言只会分散权重。现在单页面平均引用率才1.85%,距离200次差太远。
避坑清单
- 别急着做多语言,先把主站引用率搞上去。我见过最蠢的操作是主站面引用率不到50就开多语言,结果权重全散到子域名上。
- 垃圾外链处理别只靠Disavow,要配合robots.txt和nofollow。我实测三种手段同时用,清理速度能快3倍。
- JobPosting Schema必须100%合规。核子GEO的结构化数据检测能帮你一键查出哪些字段漏了。别像我之前那样图省事跳过”技能要求”字段,结果Bing Chat直接不索引那类页面。
避坑清单
我踩过的坑,你千万别再踩。
坑1:用纯文本写JobPosting Schema
后果:Google结构化数据检测直接报错,职位页面AI引用率从12%掉到0.8%。
做法:必须用JSON-LD格式,字段全填满。我后来用WordPress插件WP Job Manager搞定了,但别信它的自动生成——手动补上datePosted和employmentType才通过。
坑2:垃圾外链占比超过40%还不管
后果:站长工具显示域名权重从32掉到19,AI引擎直接不索引新职位页。
做法:每月花500块用Ahrefs批量拒收垃圾外链。核子GEO给出的整改建议是先把域名在Disavow Tool里清洗一遍,别等权重崩了再动手。
坑3:多语言版本用同一域名不同路径
后果:hreflang标签没配好,Google把英文版和中文版当重复内容,索引量从8900砍到2100。
做法:要么用子域名(en.yoursite.com),要么严格配<link rel="alternate" hreflang="zh-CN">。我选子域名,省事。
坑4:模板页面连标题标签都没优化
后果:AI问答工具抓取时,职位页面自动摘要全是“招聘助理|北京”,没有语义。
做法:每个职位页加动态标题,比如“急招Python开发工程师(3年经验+远程办公)”。核子GEO的结构化数据检测帮我抓出37个不达标的页面。
坑5:忽略核心网页指标
后果:移动端加载速度3.2s,跳出率78%,AI引擎直接不收录。
做法:宝塔面板开启Nginx fastcgi缓存,把WordPress页面生成静态HTML,耗时降到1.1s。
坑6:只做SEO不做GEO
后果:AI问答工具引用率始终卡在5%,百度搜索排名高但没人点。
做法:专门优化职位描述里直接回答用户问题的段落,比如“薪资多少?”直接写数字。核子GEO的AEO评估报告显示AI引用率从5%拉到23%,才花了3周。
坑7:以为更新频率越高越好
后果:每天批量删旧职位再新建,搜索引擎认为网站不稳定,索引量暴跌65%。
做法:旧职位用301跳转到新URL,或者加noindex标签延迟删除。别学我当初手贱。
坑8:预算全砸外链,不留钱做内容
后果:垃圾外链占比冲到55%,AI问答工具引用率归零。
做法:月预算5000,至少留2000做结构化数据检测和内容优化。核子GEO一个月才199,能省下大几千的拉黑费用。