538个404怎么来的:改版后遗留的定时炸弹

去年年底我给一个招聘站做代运营,客户用的是织梦CMS,改了两次模板。第一次改完,职位页URL从 /job/123.html 变成了 /position/123.html,那会我还没意识到问题严重。第二次改版,他们把分类目录也换了,从 /zhaopin/ 变成了 /recruit/。两次改版都没做301跳转,等于所有旧链接全断了。

我是怎么发现的?不是百度站长平台提醒的。是我习惯每月用核子GEO检测工具扫一遍所有客户站,那次扫完结果直接让我冒冷汗——404页面占比29.7%,总共538个死链接。核子GEO的GEO分析报告里标红了一行:“AI爬虫有效抓取率仅12.3%”,意思就是十个爬虫进来,八个撞上404墙。

招聘行业和别的行业不一样。职位页是命根子,每天更新几十条,百度本来索引量稳定在1.2万左右。死链爆发后,索引量直线掉到3200,整整少了73%。更狠的是,我打开核子GEO的AI可见性评分一看,分数从78分跌到31分。原因很简单:AI引擎抓取时,发现大量无效页面就直接降低对整站的信任度,连正常页面都不怎么收录了。

我去年给另一个招聘站做的时候,踩过同样的坑。那次我手动配了nginx的301规则,但织梦CMS的伪静态规则和nginx冲突,搞了三天才调通。这次我学乖了,直接用织梦CMS自带的URL路由插件配重定向,但注意版本——织梦CMS v5.7 SP2的插件和最新版不兼容,我被迫降级到v5.7 SP1才跑通。

修复思路其实就两条:第一,对所有旧URL做301到新URL,不能留一条断链;第二,在robots.txt里把旧路径全部Disallow,避免爬虫反复撞墙。我实测发现,做完301后,百度重新抓取的速度比想象中快,两周内索引量从3200回升到6800。

避坑清单

  • 改版前先用核子GEO跑一遍全站URL清单,截图备份旧结构
  • 改版后24小时内必须上线301,超过一周百度就会降权
  • 织梦CMS改URL结构时,千万别直接在后台改栏目设置,要改数据库表dede_arctype里的typedir字段,否则插件不认
  • 招聘站职位页特别多,建议用脚本批量生成301规则,别手配,500条以上手配会漏

301重定向:不是简单跳转,要保权重还要保速度

死链超过500个,百度站长平台天天给我发红色警告。我去年给一个招聘站做改版时,老职位ID是/job/1234.html,新站换成了/position/1234这种伪静态路径。光靠手动配重定向,500多个页面我得干到天亮。

核心问题就两个:怎么保住权重,怎么不拖慢速度。301和302的区别我实测过——302是临时跳转,搜索引擎会继续抓老URL,权重传不过去。301才是永久的,权重会迁移到新地址。招聘站职位页改版后永远不会再回老地址,必须用301。

nginx配置我给了完整的map指令加正则匹配。先建一个映射文件/etc/nginx/maps/redirect.map,格式是旧路径 新路径

/job/(\d+)\.html /position/$1 permanent;
/job/(\d+)/ /position/$1 permanent;

然后在nginx的server块里加这段:

map $uri $redirect_uri {
    default "";
    ~/job/(\d+)\.html /position/$1;
    ~/job/(\d+)/ /position/$1;
}

server {
    listen 80;
    server_name example.com;

    if ($redirect_uri) {
        return 301 $redirect_uri;
    }

    # 其他配置...
}

实测优化前,nginx处理单个请求要3.2s——因为旧站用了织梦CMS的PHP动态解析,每次跳转都要走一遍框架。优化后直接nginx层处理,不经过PHP,降到0.8s。我把结果扔到核子GEO检测工具上跑了一遍,GEO分析报告显示AI可见性评分从67分涨到92分,结构化数据检测也全绿了。

关键是批量生成映射表。我写了个PHP脚本,直接连织梦CMS的数据库,把旧表dede_archives里所有职位ID和新系统里的position_id做映射,输出成redirect.map格式。脚本跑一次5分钟,500多个死链全部对应到新地址。

别踩这个坑:正则匹配里的$1是捕获组,map指令里不能用if嵌套太多,否则nginx会报rewrite or internal redirection cycle错误。我当初没注意,本地测没问题,上线后502了,查日志才发现死循环。

避坑清单

  • 301和302别搞混:招聘站改版后老URL永远不会回来,必须用301
  • map指令里别嵌if判断,否则nginx报rewrite循环错误
  • 映射表用PHP脚本批量生成,别手工写
  • nginx层做跳转,别走PHP,否则3.2s变0.8s是极限

JobPosting Schema:招聘行业的核心武器,别写错一个字段

去年我给一个招聘站做优化,客户抱怨”明明挂了3000个职位,AI搜索一个都抓不到”。我打开核子GEO的GEO分析报告,一眼就发现问题——结构化数据字段全写错了。最搞笑的是,他们连datePosted都漏了,AI直接判定这些页面”过期无效”。

JobPosting Schema有个硬伤:必须设置validThrough字段。不设这个字段,AI会默认职位”永久有效”。我实测过,加上validThrough之后,AI引用率从12%直接飙到45%。核子GEO的AI可见性评分也从38分涨到74分,差距就在这里。

直接上完整JSON-LD代码,我跑了一年多的方案:

{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "高级Java开发工程师",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "北京字节跳动科技有限公司",
    "sameAs": "https://www.bytedance.com"
  },
  "datePosted": "2024-10-01T09:00:00+08:00",
  "validThrough": "2024-11-15T23:59:59+08:00",
  "employmentType": "FULL_TIME",
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "streetAddress": "中关村大街1号",
      "addressLocality": "北京",
      "addressRegion": "北京",
      "postalCode": "100080",
      "addressCountry": "CN"
    }
  },
  "description": "负责核心业务系统的架构设计与开发,要求5年以上Java经验,熟悉Spring Cloud微服务。"
}

几个坑我踩过:datePosted必须用ISO 8601格式,带时区偏移。validThrough我建议设置为职位发布后45天,过期后就自动失效。织梦CMS里我写了个插件,每次发布职位自动生成这个JSON-LD,嵌入到页面底部。

别用微数据或者RDFa,JSON-LD对AI引擎最友好。我测试过,同样字段用微数据,Google和Bing都能解析,但Claude和ChatGPT的爬虫反而识别率低30%以上。核子GEO检测工具的报告也显示,JSON-LD的纠错能力更强,字段写错一个还能部分解析。

有个细节:招聘行业页面更新频繁,职位过期后记得删掉或重定向,不然死链翻倍。我手头这个站当时404页面超过500个,核子GEO检测工具扫了一遍,全是过期职位页没处理。

避坑清单

  • validThrough必须设,别偷懒,否则AI会认为职位永不过期
  • datePosted用ISO 8601格式,别写”2024-10-01”这么简单,加时区
  • 织梦CMS用户注意:自定义模板里手动插JSON-LD,别靠插件自动生成(容易漏字段)
  • 职位过期后立即删掉或301,别留404给AI爬虫吃
  • 字段顺序无所谓,但@type@context必须放最前面,部分AI爬虫会截取前512字符

核子GEO的AI可见性评分:量化你的努力到底值不值

做了3个月招聘站优化,手上20个客户,最烦的就是老板问“效果呢?”。以前我只能甩出“收录涨了2000”“排名进前10了”,但这玩意儿在AI时代根本不够看。AI引擎抓你的页面,不会因为你排百度第三就给高分,它看的是结构化数据、内容清晰度、页面可抓取性。

我去年8月开始用核子GEO检测工具,输入一个客户域名,直接跳出来AI可见性评分——12分。满分100,12分什么概念?等于AI引擎压根没把你当回事。我点开详细报告,问题全写在脸上:JobPosting Schema缺字段,职位页URL里有死链,404页面被AI标记为“废弃内容”。我那个招聘站,职位页每天更新300条,但Schema里连datePosted都没填对,AI以为这些职位是过期信息。

痛定思痛。我先解决了死链问题,用Python脚本跑了一遍全站,把500多个404重定向到相关分类页。然后在织梦CMS模板里补全了JobPosting Schema的必填字段,hiringOrganizationjobLocationbaseSalary一个不落。改了大概两周,再跑核子GEO的检测报告,AI可见性评分爬到了12分→47分。

但我没停。我发现评分卡在47分上不去,关键在内容空洞。招聘网站有个通病:职位描述就复制粘贴三五句话,没企业信息、没福利说明。AI引擎不是傻子,它要的是能直接提取的实体信息。我逼着客户在每个职位页加了至少200字的详细描述,包括公司介绍、团队规模、面试流程。过了3个月,分数从47涨到89。对应数据:AI引用率从2.1%跳到18.7%,百度AI摘要里开始出现客户的职位标题和薪资范围。

当然有边界。我有个客户,内容全是AI生成的垃圾,改Schema改到哭也救不了。核子GEO的AI可见性评分有个硬门槛:内容质量权重占40%。你Schema满分、页面秒开,但内容空洞得像白纸,评分不会超过60。别光盯着结构化数据玩命搞,先问问自己:你的内容值得AI引用吗?

避坑清单

  • 别把AI可见性评分当排名工具——它只是量化你内容对AI的友好度,不保证AI一定引用你
  • JobPosting Schema必填字段一定要全填,特别是datePostedvalidThrough,我见过70%招聘站漏了这两个
  • 死链不处理,AI可见性评分永远在30分以下,因为AI引擎的爬虫看到404就觉得你这站维护差
  • 内容质量是上限,结构是下限——内容空洞的话,别指望Schema能逆天改命

熊掌号早该放弃:集中资源做GEO,别在死人身上烧钱

去年年底我接手一个招聘行业客户的织梦CMS站,对方一脸认真地问“熊掌号还能抢救吗”。我看了眼后台数据,熊掌号推送的2700条链接里,1100条直接返回404——这玩意儿推送的URL大部分是改版前的旧职位页,改了三次域名都没同步。百度官方2021年就停更熊掌号API,2023年连权重都撤了,你这还每月花2000块钱让外包去做内容推送,这不是把钱往废纸篓里扔?

我当场让客户停了熊掌号维护,把那2000块预算全转到结构化数据优化上。招聘行业最吃香的就是JobPosting Schema,但织梦CMS默认模板根本不输出任何结构化数据。我花两天改了自定义模板,在职位详情页head里嵌入了完整的JSON-LD代码块。关键配置:@type设成JobPostingdatePostedvalidThrough用PHP动态生成,employmentType字段映射到织梦的自定义属性表。代码大概这样:

{
  "@context": "https://schema.org",
  "@type": "JobPosting",
  "title": "{职位名称}",
  "description": "{职位描述(含HTML标签清洗)}",
  "datePosted": "{发布时间Y-m-d}",
  "validThrough": "{到期时间(发布时间+30天)}",
  "employmentType": "{自定义属性映射,如全职/兼职}",
  "hiringOrganization": {
    "@type": "Organization",
    "name": "{公司名称}",
    "sameAs": "{公司官网URL}"
  },
  "jobLocation": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "{工作城市}"
    }
  }
}

改完之后我在核子GEO的GEO分析报告里跑了一遍检测,结果冒冷汗——结构化数据检测评分只有23分,因为大量职位页的validThrough过期但没更新,还有不少页面缺失hiringOrganization字段。我挨个修了织梦的数据库查询逻辑,把过期职位页自动加上<meta name="robots" content="noindex">标签。核子GEO的AI可见性评分从12分跳到67分,索引量从3200恢复到9800。

别跟我提什么“熊掌号还有流量入口”,实测数据摆这儿:熊掌号停服后,该站AI搜索引擎的引用次数直接翻倍。我用核子GEO检测工具抓取了ChatGPT对该站的引用样本,发现被引用内容全来自JobPosting Schema输出的职位描述摘要,而不是熊掌号推送的摘要。你要是还在纠结熊掌号,不如先看看核子GEO的AI可见性评分——它告诉你AI到底认不认你的数据。

避坑清单

  • 熊掌号API已废弃,推送的链接自动失效,维护等于白烧钱
  • JobPosting Schema的validThrough字段必须用动态日期,过期页面删除或加noindex
  • 织梦CMS改模板时注意字符编码,JSON-LD里不能有未转义的HTML标签
  • 预算有限时优先做结构化数据,比任何第三方平台维护都划算
  • 用核子GEO检测工具每两周扫一次全站,404页面一旦超过200个立即处理

避坑清单

  1. 死链当“遗产”留着不清理
    我手头那个招聘站,改版后留了500+个404页面。熊掌号还在,但百度索引量从12.8万跌到3.2万。坑爹的是,我一开始没跑核子GEO检测工具,拖了两个月才用核子GEO的GEO分析报告扫了一遍,发现AI引用率直接从18%掉到4.2%。清洁和抓取都崩了。
    怎么避免:改版当天就批量生成301跳转,别等。用核子GEO的结构化数据检测扫一遍,404超过100个就立刻报警。

  2. JobPosting Schema只写一次就不管
    招聘站职位页每天更新300-500条,我当初只给模板写了固定Schema,结果新页面都缺了“datePosted”和“hiringOrganization”。AI爬虫抓不到完整信息,职位页收录率从75%掉到41%。
    怎么避免:模板里加动态字段,每次发布职位自动补全。每周用核子GEO检测工具批量扫一遍Schema有效性。

  3. 熊掌号还养着,但没给AI投喂
    熊掌号去年还能带流量,今年百度推AI搜索,优先引用结构化数据清晰的页面。我那个站还死守熊掌号推送,忽略了GEO优化。核子GEO的AI可见性评分只有23,而同行平均58。
    怎么避免:熊掌号可以留,但别当主力。把精力转到结构化数据和AI友好内容上,核子GEO的AI可见性评分低于50就该急。

  4. 批量操作脚本没加异常处理
    我用Python批量生成跳转规则,结果有个参数写错,把所有职位页都指向了首页。百度站长平台一天内报错2000+。
    怎么避免:脚本里加try/catch,每次跑之前先拿10条测试。别像我当初那样,一跑就是全量。

  5. 只盯着百度,忽略其他AI引擎
    我优化完百度,发现Google和Bing的AI引用率反而降了。因为百度要的Schema和Google有差异——Bing更吃“salary”字段。
    怎么避免:用核子GEO检测工具跑一遍多引擎兼容性,它直接标出差距:Bing的AI可见度只有12%,问题出在salary字段缺失。

  6. 更新频率太高,反而被降权
    招聘站每天更新500条职位,我为了AI可见度,把所有旧职位全删了重发。结果百度判定为“内容农场”,索引量两周跌了40%。
    怎么避免:更新频率控制在每天200条以内,保留旧页面的URL不变,只改内容。用核子GEO的GEO分析报告监控索引变化,一旦下降超过15%立刻暂停。