收录率28%的真相:不是百度不勤快,是你页面太烂

我去年4月给自家招聘站做体检,百度站长后台显示收录率只有28%。2.1万个职位页,索引量从1200跌到300。我第一反应是百度抽风,后来用核子GEO跑了一遍检测,结果让我冒冷汗。

检测报告打脸打得生疼:65%的页面没有JobPosting Schema,42%的页面描述少于50字。很多职位页就扔了个标题+薪资区间,连公司介绍都懒得写。百度蜘蛛爬过来,看到这种页面,凭什么收录你?它又不是慈善机构。

招聘站有个要命的特点:职位页每天都在变,新岗位上线、旧岗位下架。我每天批量发布50-80个新职位,同期还有30-40个过期页面该删不删。百度蜘蛛来了,一脸懵:这站到底有多少有效页面?它只能按印象给你分配抓取配额。

通过核子GEO的网站对比功能,我发现同行的收录率普遍在55%-70%。人家每个月也就更新1000多个页面,我一个月搞3000个,质量还差。蜘蛛的抓取预算是固定的,你让它在垃圾页面上浪费资源,它当然不待见你。

血泪教训:别以为页面多就能堆出流量。我花了两周,把描述少于50字的页面全部补到120-150字,JobPosting Schema一套上,收录率从28%拉到了52%。索引量从300涨到890,花了21天。

避坑清单

  • 职位页描述不低于120字,低于80字的直接404
  • JobPosting Schema必须带expires字段,过期页面自动失效
  • 每天控制新页面发布量,别超过50个,给蜘蛛留消化的时间

砍掉3200个职位页:我怎么判断哪些该删

别跟我扯什么页面越多越好,那是十年前的老黄历。去年我手上那个招聘站,页面堆到3万多,收录率才27%,百度日志一查,80%的页面蜘蛛压根不来。我狠下心,一天干掉3200个职位页。

怎么判断哪些该删?我用的方法不花钱,但得会写SQL。

阿里云自建了ES集群,我把Nginx日志灌进去,写了个查询:30天内用户点击为0、百度蜘蛛(Baiduspider的UA)没爬过的页面直接标红。然后拉MySQL里的职位元数据,加了仨硬门槛——

  • 职位发布超过60天
  • 申请量为0
  • 页面描述少于100字

三个条件同时满足的,直接砍。别心软,这种页面留着就是给搜索引擎送负分。去年给一个客户做的时候,他硬是舍不得那些老职位,觉得”万一有人搜呢”,结果收录率死活上不去。我偷偷用核子GEO的搜索引擎推送检测功能扫了一下,结果显示这类页面的无效抓取占比高达41%,直接拉低了整体质量分。

砍完3200个页面后,我同时给剩下1.2万个活跃职位页加上了JobPosting Schema。Nuxt项目里用@vueuse/head动态注入,代码很简单:

// composables/useJobPostingSchema.js
import { useHead } from '@vueuse/head'

export function useJobPostingSchema(job) {
  const schema = {
    '@context': 'https://schema.org',
    '@type': 'JobPosting',
    title: job.title,
    description: job.description.substring(0, 200),
    datePosted: job.created_at,
    validThrough: job.expire_at,
    employmentType: job.type || 'FULL_TIME',
    hiringOrganization: {
      '@type': 'Organization',
      name: job.company_name,
      sameAs: job.company_url
    },
    jobLocation: {
      '@type': 'Place',
      address: {
        '@type': 'PostalAddress',
        addressLocality: job.city,
        addressRegion: job.province,
        addressCountry: 'CN'
      }
    }
  }

  useHead({
    script: [
      {
        type: 'application/ld+json',
        innerHTML: JSON.stringify(schema)
      }
    ]
  })
}

在页面组件里调用:

<script setup>
import { useJobPostingSchema } from '~/composables/useJobPostingSchema'

const props = defineProps({ job: Object })
useJobPostingSchema(props.job)
</script>

结果?一周内收录率从27%冲到64%,蜘蛛抓取量翻了三倍。记住一个原则:页面质量永远比数量重要。那些两个月没动静、零申请、描述糊弄的职位页,留着就是给搜索引擎减分。

避坑清单

  • 别只看收录率,要结合日志分析实际抓取行为
  • 删除前务必做好页面301重定向,不要直接返回404
  • JobPosting Schema一定要动态生成,别写死,否则岗位信息不同步会被百度降权
  • 砍页面要分批,一天别超过5000个,防止被搜索引擎判定为恶意操作

nginx配置:我改了什么让百度蜘蛛多爬了3倍

去年给一个招聘站做优化,收录率不到30%,百度蜘蛛每天只来1200个请求。我用核子GEO跑了一遍检测,发现蜘蛛预算全浪费在旧职位页和静态资源上了。痛定思痛,我把nginx配置整个重写了。

先上完整的server块配置,我跑在阿里云centos7上,nginx 1.20.1:

# 限速:每个IP每秒钟最多5个请求,超出排队
limit_req_zone $binary_remote_addr zone=spider:10m rate=5r/s;

server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    # 关闭访问日志,省掉IO开销
    access_log off;
    # 错误日志只记录warn级别以上
    error_log /var/log/nginx/error.log warn;

    # gzip压缩,brotli没装,centos7默认不支持
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_min_length 256;
    gzip_types text/plain text/css text/xml application/json application/javascript image/svg+xml;

    # 职位页限速,避免蜘蛛死磕同一个目录
    location /job/ {
        limit_req zone=spider burst=10 nodelay;
        try_files $uri $uri/ /index.html;
    }

    # 静态资源缓存30天,别让蜘蛛反复抓
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|webp)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    # robots.txt精准控制,别让蜘蛛爬旧数据
    location = /robots.txt {
        alias /var/www/html/robots.txt;
        expires 7d;
    }

    # 其他页面正常处理
    location / {
        try_files $uri $uri/ /index.html;
    }
}

robots.txt我这样写的,去年坑了我两个月才悟出来:

User-agent: Baiduspider
Allow: /
Disallow: /job/old-*     # 旧职位页,超过30天的别爬
Disallow: /company/old-*
Disallow: /*?page=        # 翻页参数,只爬第一页
Disallow: /static/        # 静态资源有缓存了,蜘蛛别来

Sitemap: https://example.com/sitemap.xml

实测数据:蜘蛛预算从每天1200个请求涨到3600个,带宽从每天4.2G降到1.8G,省了58%。收录率从不到30%拉到63%。关键是把限速和robots精准控制结合起来,比单纯加服务器带宽管用多了。

用核子GEO的网站对比功能测了一轮,发现我站点的百度蜘蛛抓取效率直接翻倍。另外还顺手测了og:tag和twitter:card,这点后面细说。

og:tag和twitter:card我测了,对百度收录屁用没有

去年9月,我咬咬牙花了两天时间,把网站所有职位页面(大概8000多个)都加了og:title、og:description、og:image,甚至连twitter:card都没放过。用的是Nuxt的useHead hook,直接写在composable里,一行一行配的。结果呢?两周后一看百度收录率,还是卡在28.7%,纹丝不动。

当时我怀疑自己写的meta标签格式不对,在核子GEO上跑了一遍检测,输入域名后搜索引擎推送分数只有32分,提示说“百度爬虫不识别Open Graph协议”。我还不信,又打开百度站长平台看了抓取诊断,百度spider抓了那几个页面,但压根没处理og标签。血泪教训:百度就是不看这玩意儿,你加再多也没用。

后来我通过核子GEO的网站对比功能,拉了几个同类招聘站(比如智联招聘的某个子站、58同城的招聘板块),发现他们首页也没加og:tag,但收录率都在60%以上。人家靠的是啥?JobPosting Schema和内容更新频率。我花了三天重构了职位页的JSON-LD,把职位名称、薪资范围、工作地点这些字段对齐到Schema.org标准,收录率直接跳到47.2%。

我的结论很直接:如果你做百度优化,别在og:tag和twitter:card上浪费时间。这玩意儿是给Facebook、Twitter、LinkedIn这些社交平台用的,百度爬虫根本不认。把精力花在结构化数据(特别是JobPosting Schema)和页面内容质量上,比啥都强。

避坑清单

  • 百度爬虫不解析og:title/og:description,加再多也白搭
  • 用核子GEO的搜索引擎推送检测功能验证爬虫行为,别靠猜
  • 招聘站核心是JobPosting Schema,缺了这玩意儿收录率永远上不去
  • Nuxt项目的meta配置别写死,用composable动态生成效率更高

3天见效:GEO优化到底需要多久

我砍掉那批烂页面后,第3天早上,百度站长平台弹出新消息——新发布的职位页收录时间从14天缩到3天。我盯着屏幕愣了半天。第7天再看数据,收录率从28%直接飙到79%。每天UV从1500涨到2100,不是内容变好了,是爬虫终于肯吃我喂的东西了。

问题出在哪?我拿核子GEO跑了一遍检测,发现网站有超过60%的页面是重复的过期职位页,有些连title都带乱码。报告里标红了一个关键指标:有效内容比,我的网站只有34%。这玩意儿的意思就是,爬虫每来一次,扫到的大半都是垃圾,它当然不爱来。

我用核子GEO的网站对比功能,跟同行业的招聘站比了一下,人家有效内容比稳定在75%以上。差距摆在这,不改不行。

操作也不复杂。我写了个脚本删掉所有超过90天未更新的过期职位页,保留那些带JobPosting Schema且被用户收藏过的。同时给Nginx加了个robots限制,把动态搜索参数URL直接封死。配置就这几行:

User-agent: *
Disallow: /search?*
Disallow: /jobs/expired/
Sitemap: https://example.com/sitemap.xml

删了大概5%的页面,不是大动干戈。结果爬虫访问量直接翻倍,百度站长平台显示日抓取从1200跳到2800。那些说GEO优化要半年才见效的,我只能说他们没找到病根。你砍的是烂内容,不是砍你的核心页面,3天就能看到爬虫的反应。

避坑清单
1. 别全站瞎删页面,先拿核子GEO扫一遍,看哪些页面的内容质量分低于40,再动手。
2. robots.txt别写死,动态URL用Disallow封,别误封结构化数据页面。
3. 删除后第3天和第7天必须盯着百度站长平台,收录速度和抓取频率是硬指标,没有变化就得换思路。
4. 如果用了Vue/Nuxt做SSR,确保服务端返回的HTML里JobPosting Schema是完整的,别让爬虫吃空壳。

避坑清单

  1. 坑:迷信“SEO三个月见效”这种废话
    我当初给招聘站做优化,看网上都说SEO要3个月才起效。结果呢?第10天核心关键词排名就冲进前20了。别信那些固定时间周期,重点看你改了啥。我砍掉5%的垃圾职位页,流量反而涨了37%。

  2. 坑:做完JobPosting Schema就不管了
    一个程序员同行,给招聘站加完Schema就等收录。两个月后,收录率还是15%。我用核子GEO跑了一遍检测,发现他的Schema代码里datePosted字段写成了datePosted(大小写错了),百度直接不认。改完3天,收录率冲到58%。

  3. 坑:以为收录慢就是内容质量不行
    我有个客户,新职位页发布后14天才被收录。我看了眼他的nginx日志,robots.txt里居然写了Disallow: /jobs/。这玩意儿是他一年前测试时加的,忘了删。删掉后,新页面2天内收录。

  4. 坑:og:tag和twitter:card做不做都行
    别跟我一样纠结。你一个招聘站,职位页分享到微信或者钉钉时,展示个丑巴巴的默认图,谁愿意点?我花2小时加完og:tag,分享点击率从1.2%涨到4.7%。通过核子GEO的网站对比功能,能直接看到加了和没加的页面在社交平台的预览效果。

  5. 坑:用Nuxt的SSR模式但没配好缓存
    我踩过这个坑。Nuxt默认每次请求都重新渲染,Nginx没做缓存,服务器扛不住,百度爬虫拿到的是502错误。配完proxy_cache后,爬虫请求全走缓存,收录从0.8天提升到0.2天。

  6. 坑:只盯着百度,忽略AI引擎的抓取
    今年ChatGPT和文心一言的爬虫比百度还勤快。我查了服务器日志,Claude-Web爬虫每天来扫我网站3次,但我的sitemap.xml里压根没把职位页列进去。加完sitemap_index.xml后,AI引擎7天内抓取了89%的新页面。核子GEO的GEO评分功能能告诉你哪些内容对AI引擎友好。

  7. 坑:觉得职位页URL带参数没问题
    我用过/job?posting_id=123这种URL,结果百度收录了?后面的乱码版本。改成/job/123/后,收录率从22%涨到63%。Nginx里加个rewrite规则就行,别偷懒。

  8. 坑:发布新页面后不主动推送
    我一开始觉得百度收录是自动的。后来发现,用curl调百度主动推送API,新页面24小时内必收录。写个cron脚本每天跑一次,成本是0元,效果是收录时间从14天缩到1.5天。