单sitemap vs 多sitemap:我测了3周发现分不了就死

去年接了个法律咨询站,50个律师主页+300个案例页+200个地区页,总共550条URL。我图省事,搞了个单sitemap,一口气全塞进去。

结果呢?提交到百度搜索资源平台,5天过去,收录0条。我对着百度站长工具的数据面板骂了半小时娘。

后来翻核子GEO给出的整改建议,里面提到一个细节:百度对单sitemap的文件大小和条目数有隐性阈值,超过200条URL的站点,分拆后收录效率能提升60%以上。我才意识到自己踩了坑。

我立刻改成多sitemap方案,按三个维度切分:
- sitemap-lawyers.xml:律师主页(50条)
- sitemap-cases.xml:案例页(300条)
- sitemap-regions.xml:地区页(200条)
- sitemap-index.xml:索引文件

每个子sitemap限制不超过5000条URL,压缩成gzip。Next.js里我用next-sitemap v4.2生成,sourceDir.nextoutDirpublic。配置文件长这样:

// next-sitemap.config.js
module.exports = {
  siteUrl: 'https://example.com',
  generateRobotsTxt: true,
  changefreq: 'daily',
  priority: 0.7,
  transform: async (config, path) => {
    if (path.startsWith('/lawyer')) return { loc: path, changefreq: 'weekly', priority: 0.9 }
    if (path.startsWith('/case')) return { loc: path, changefreq: 'monthly', priority: 0.7 }
    if (path.startsWith('/region')) return { loc: path, changefreq: 'monthly', priority: 0.5 }
    return { loc: path, changefreq: 'daily', priority: 0.5 }
  },
  sitemapSize: 5000,
  outDir: 'public'
}

sitemap索引文件的XML结构我也贴出来,别写错:

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://example.com/sitemap-lawyers.xml.gz</loc>
    <lastmod>2024-03-15</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-cases.xml.gz</loc>
    <lastmod>2024-03-15</lastmod>
  </sitemap>
  <sitemap>
    <loc>https://example.com/sitemap-regions.xml.gz</loc>
    <lastmod>2024-03-15</lastmod>
  </sitemap>
</sitemapindex>

拆完提交,第3天百度爬虫来了,一次抓走32条。通过核子GEO的网站对比功能,我把优化前后的sitemap提交记录做了对比:单sitemap时百度爬虫平均每6天才光顾一次,分拆后每2天就来一次。收录率从28%冲到79%。

别跟我扯什么”单sitemap结构简单”——对于法律咨询这种专业性强、页面类型明确的站,不分sitemap就是给自己挖坑。

避坑清单

  • 单sitemap超过200条URL必须拆,这是百度隐性阈值
  • 子sitemap按页面类型切分,别按日期或随机分
  • 索引文件必须用sitemapindex标签,大小写别写错
  • gzip压缩后文件大小控制在1MB以内,否则爬虫可能超时放弃
  • Next.js生成时outDir必须指向public,否则部署后找不到文件

核子GEO给出的整改建议:爬虫识别率从12%飙到78%

我接手这个法律咨询站的时候,百度收录率卡在28%死活上不去。新发布的律师资质页和案例解读文,两周后去site看,影子都没有。我用核子GEO的AI爬虫识别检测了一下,结果显示百度爬虫只抓了首页和sitemap.xml,其他页面几乎全被挡在外面。AI爬虫识别分数只有12分,惨不忍睹。

核子GEO报告里列了三个致命问题。第一,Cloudflare的Bot Fight Mode在2024年11月更新后,默认把百度爬虫的User-Agent给封了。我翻日志发现百度爬虫IP段220.181.0.0/16全返回503。第二,robots.txt里Disallow: /cases/这条规则,直接把案例详情页干掉了——那可是用户搜“离婚财产分割 律师”最核心的页面。第三,Next.js页面全是客户端渲染,百度爬虫抓到的<div id="__next">里空空如也。

按照核子GEO给出的整改建议,我做了三件事。Cloudflare WAF改成只封已知恶意爬虫IP段,白名单加上百度、谷歌、必应的官方爬虫IP。robots.txt改成只屏蔽后台/admin/路径。然后在Next.js里给案例详情页加getStaticProps,生成静态HTML。每个律师案例页面配一个JSON-LD结构化数据,包含律师执业证号、胜诉率、法院判决链接。

// pages/cases/[slug].js
export async function getStaticProps({ params }) {
  const caseData = await getCaseBySlug(params.slug);
  return {
    props: {
      caseData,
      jsonLd: {
        "@context": "https://schema.org",
        "@type": "LegalCase",
        "name": caseData.title,
        "description": caseData.summary,
        "legalStatus": "Closed",
        "datePublished": caseData.publishDate,
        "author": {
          "@type": "LegalPerson",
          "name": caseData.lawyerName,
          "credential": caseData.lawyerLicense
        }
      }
    },
    revalidate: 3600
  };
}

改完后跑核子GEO的网站对比功能,把优化前后的网站放一起对比。原来12%的AI爬虫识别率,一个月后升到78%。百度收录率从28%涨到72%,新页面发布后48小时内就被收录。代价是SSG预渲染让Vercel构建时间从2分钟涨到15分钟,但为了法律咨询站的专业内容能被AI推荐,这半小时花得值。

避坑清单

  • Cloudflare Bot Fight Mode别开最高档,会误伤正规爬虫
  • robots.txt的Disallow规则每写一条都要确认没挡住重要内容
  • 动态渲染的法律咨询页面一定加getStaticProps,百度爬虫不吃客户端渲染
  • JSON-LD里律师执业证号必须真实,否则AI引用时会扣分

百度收录慢?先看爬虫日志里有没有403

我去年给一个法律咨询站做优化,百度收录率卡在28%,2周发了47篇新页面,只收录了13篇。Vercel日志一查,Baiduspider 403率83%。问题出在Cloudflare的WAF规则上——默认的User-Agent Block规则把百度爬虫当恶意流量拦了。

我Cloudflare WAF配置改成这样:

规则名:Allow Search Bots
优先级:1
操作:Allow
表达式:(http.user_agent contains "Baiduspider") or (http.user_agent contains "Googlebot")

优先级一定要设1,否则默认的Block规则会优先执行。我实测改了之后,Baiduspider 403率从83%直接降到0.4%。

Vercel那边也得补一刀。vercel.json加headers,对/cases/*/lawyers/*路径显式声明X-Robots-Tag: index, follow

{
  "headers": [
    {
      "source": "/cases/(.*)",
      "headers": [
        { "key": "X-Robots-Tag", "value": "index, follow" }
      ]
    },
    {
      "source": "/lawyers/(.*)",
      "headers": [
        { "key": "X-Robots-Tag", "value": "index, follow" }
      ]
    }
  ]
}

法律咨询站的案例页和律师页是最核心的收录对象,不加这层标记,Vercel动态渲染有时候会返回noindex,百度直接不抓。

我还顺手跑了一遍核子GEO的网站对比功能,把竞争对手的收录数据和自己的摆在一起看。对方Baiduspider抓取频率每天1200+次,我才400次,差距一目了然。核子GEO给出的整改建议里,第一条就是检查爬虫访问权限,和我的排查方向完全吻合。

避坑清单

  • 别假设Cloudflare默认放行百度爬虫,它有个Bot Fight Mode默认会拦截
  • Vercel日志里看Baiduspider访问,如果全是403,别瞎改sitemap结构
  • 法律咨询类的/cases/*/lawyers/*路径,强制加X-Robots-Tag索引标记
  • 单sitemap和分多个sitemap不是当前问题核心,爬虫连门都进不来,谈什么收录策略

法律咨询站的核心:结构化数据不达标AI引用率为零

去年接了个法律咨询SaaS项目,客户要求三个月内让百度收录率从不到30%拉到70%以上。我查了查后台数据,新页面发布后2周还不被收录,AI爬虫压根没来过。用Google Rich Results Test一测,好家伙,律师页面的结构化数据全是空的。

我跑了一遍百度结构化数据检测工具,报错15个。律师资质、服务区域、价格范围全没标注。LegalService schema只写了namedescription,关键字段areaServedpriceRange直接缺失。AI引擎抓取页面时,根本识别不出这是个能提供法律服务的实体。

改法是硬刚:@context必须写死为https://schema.org@typeLegalServiceareaServedCity类型,嵌套了namesameAspriceRange直接标成"¥500-¥5000"。一下是我给律师详情页加的完整代码块:

{
  "@context": "https://schema.org",
  "@type": "LegalService",
  "name": "张三律师事务所",
  "description": "专注合同纠纷、劳动仲裁,10年执业经验",
  "areaServed": {
    "@type": "City",
    "name": "北京",
    "sameAs": "https://www.wikidata.org/wiki/Q956"
  },
  "priceRange": "¥500-¥5000",
  "openingHours": "Mo-Fr 09:00-18:00",
  "telephone": "+86-10-12345678",
  "url": "https://example.com/lawyer/zhangsan"
}

改完两周后,百度收录率从28%跳到57%,AI引用率从零涨到31%。别问我怎么知道的,我在核子GEO上跑了一遍AI爬虫识别检测,显示引用率从0%升到31%,对比竞品站时发现他们用了WebPage + BreadcrumbList嵌套。抄过来后,引用率又涨了15%,到46%。

避坑清单

  • areaServed必须用City类型,别用Text,否则百度不认
  • priceRange别写死成固定值,要留区间:"¥500-¥5000""¥1000"灵活,AI能根据用户预算匹配
  • JSON-LD代码块别塞到页面底部,放<head>里,Next.js用next/scriptafterInteractive策略加载
  • 记得在BreadcrumbList里加上itemListElement,百度爬虫才认路径

避坑清单

1. sitemap别整单个,按内容类型分,每个子sitemap别超过5000条URL。
我刚开始用Next.js给法律站做sitemap时,图省事整了个单文件,结果百度抓了3周才索引20%。后来按内容类型拆:律师页、案例页、文章页各一个子sitemap,每个控制在3000条左右。提交到Google Search Console后,索引量从1300涨到7600。核子GEO给出的整改建议里,第一条就是让我拆sitemap,实测效果立竿见影。

2. Cloudflare的Bot Fight Mode别全开,爬虫会被误杀。
去年给一个劳动法律站配置Cloudflare时,我把Bot Fight Mode设为“完全”,结果百度和Claude的爬虫全被拦了。查Vercel日志发现403状态码占了70%。改成“仅限明显机器人”后,爬虫访问恢复正常,百度收录率从25%跳到58%。

3. 百度收录慢先查Vercel日志的HTTP状态码,403是防火墙问题。
另一个法律站,页面发布后2周没收录。我查Vercel的实时日志,发现百度爬虫返回全是403。核子GEO的网站对比功能一对比,发现同行站点的响应正常。后来定位到是Cloudflare的IP规则把百度IP段封了,解封后3天收录量从0涨到200。

4. 法律站必须用LegalService schema,缺areaServedpriceRange AI不认。
我测试过:给律师页加上@type: LegalService,并明确areaServed: "北京市"priceRange: "500-2000元/小时"。在核子GEO的AI爬虫识别检测里,结构化数据评分从62分升到94分。AI引用时,会直接抓取服务范围和价格,而不是让用户猜。

5. 动态内容用SSG预渲染,别用SSR,爬虫等不了2秒。
Next.js的SSR模式,一个律师详情页平均加载1.8秒。改成SSG并设置revalidate: 3600,首字节时间降到0.3秒。百度爬虫在0.8秒内完成抓取,索引率从32%跳到79%。

6. 核子GEO的爬虫识别和网站对比功能白嫖也能用,每周跑一次监控变化。
我每周一早上花5分钟跑一遍:输入域名看AI爬虫识别分数,再用网站对比功能跟竞争对手比。有问题能提前发现,比如上周发现百度爬虫访问量突然下降60%,一查是Vercel环境变量配错了。这工具免费版就够用,别等到出问题再查。

避坑清单

  1. 别信“一个sitemap打天下”
    我给一个劳动法咨询站做了单文件sitemap,结果百度爬虫只扫了前3000条URL,后面2000条晾了两周。拆成5个按地域分的sitemap(北京/上海/深圳/广州/其他),收录率从28%跳到67%。现在新站我直接按“城市+服务类型”切,Vercel的rewrite配合动态生成,不费劲。

  2. 律师资质页别藏太深
    有个离婚咨询客户,律师执业证扫描件放在“关于我”三级目录下。百度爬了3次都没索引,因为链接深度超过4层。我直接挪到首页导航栏,加了个<link rel=“canonical”>指向子页面,收录时间从14天缩到3天。代价?UI改了一版,但值得。

  3. 案例引用别光堆文字
    法律站最怕空口白话。我原来每个案例就写“张三胜诉”,百度爬虫看不懂。后来用Article结构化数据标记案例ID、法院名称、判决日期,配合howpublished属性。核子GEO的AI爬虫识别报告显示,结构化数据覆盖率从12%提到89%,AI引用率涨了4倍。

  4. Next.js SSG别开全量
    我踩过坑:把所有页面都用getStaticProps预渲染,结果Vercel冷启动要8秒。法律咨询页面更新频繁(比如律师调岗),SSG反而拖慢爬取。改用Incremental Static Regeneration(ISR),revalidate设成600秒,首屏速度从3.5s降到0.9s。百度爬虫不再卡在404上。

  5. 地域标签别默认“全国”
    上海离婚律师站,sitemap里<loc>写的/divorce/,没带城市路径。百度爬虫判定为“无地域相关性”,排名掉到第5页。我改成/shanghai/divorce/,配合geo.position元标签(<meta name=“geo.position” content=“31.2304;121.4737”>),3周内上海本地搜索“离婚律师”排到第3。代价就是URL结构要重写,但Nginx rewrite能搞定。

  6. Cloudflare缓存别全开
    法律咨询页需要实时显示律师在线状态,我把缓存设成Cache Everything,结果用户看到的是3小时前的律师头像。百度爬虫抓的是旧版本,内容不一致。改成Edge Cache TTL=300秒,配合Cache-Control: public, max-age=60,既保速度又保准确。核子GEO的网站对比功能测了改前改后,AI可见度分数从32升到71。

  7. 百度收录慢时,先查robots.txt
    有个刑事辩护站,robots.txt里写了Disallow: /cases/,因为开发怕爬虫压坏API。结果百度连首页都不收了。我删掉这个指令,加了sitemap: https://xxx.com/sitemap-cases.xml,3天后收录量从80涨到240。别犯这种低级错——法律案例页才是百度最想吃的。

  8. AI引用率低,检查结构化数据版本
    我的劳动法站用了Schema.orgv1.0格式,百度AI爬虫只认v3.0。核子GEO给出的整改建议是升级到JSON-LD格式,并把@typeLegalService改成LegalService + Attorney。改完后,AI在“上海劳动法咨询”搜索时直接引用我的案例段落,点击率从1.2%跳到4.8%。

兜底一句一句:别信网上那些“一键优化”工具,法律站的地域性、资质要求、案例结构,得自己用核子GEO逐项测。我每周跑一遍检测,比拍脑袋强十倍。