[{"data":1,"prerenderedAt":345},["ShallowReactive",2],{"blog-xml-sitemap-segmentation":3,"blog-prev-xml-sitemap-segmentation":105,"blog-next-xml-sitemap-segmentation":237},{"id":4,"title":5,"author":6,"body":7,"canonical":89,"category":90,"cover":89,"date":91,"description":92,"draft":93,"extension":94,"keywords":89,"meta":95,"navigation":96,"noindex":93,"ogImage":89,"path":97,"seo":98,"seoDescription":89,"seoTitle":89,"stem":99,"tags":100,"updated":89,"__hash__":104},"blog\u002Fblog\u002Fxml-sitemap-segmentation.md","大站 sitemap 怎么分片：5 万页站点的三条规则和一次失败","元析智能",{"type":8,"value":9,"toc":79},"minimark",[10,14,18,21,24,28,31,34,37,41,44,47,50,54,57,60,64,67,70,73,76],[11,12,13],"p",{},"一个 5 万页的 SaaS 文档站，sitemap 之前只有 40% 的页面被收录。我们按内容类型拆成 18 个分片、给 lastmod 立了规矩，8 周后收录率到 78%。分片不是玄学，有三条能落地的规则。",[15,16,17],"h2",{"id":17},"我们接手的那个站",[11,19,20],{},"2025 年 11 月接的一个开发者工具客户，站点 5 万页左右：文档 3.2 万页、博客 6000 页、产品页 800 个、剩下的是一堆版本归档和参数页。",[11,22,23],{},"当时只有一份 sitemap.xml，5 万条 URL 塞在一个文件里，lastmod 全部写成抓取当天。Google Search Console 显示已发现 5 万条、已收录 2.1 万条，百度那边更差，收录不到 1.5 万。",[15,25,27],{"id":26},"规则一按内容类型分不按日期分","规则一：按内容类型分，不按日期分",[11,29,30],{},"第一版分片我们按月份拆，每个月一个 sitemap。结果证明这是错的：文档页和博客页混在一起，版本归档页和老文档混在一起，搜索引擎没法判断哪个分片值得优先抓。",[11,32,33],{},"第二版改成按内容类型拆：docs、blog、product、changelog、archive 五个大类，docs 再按产品模块拆成 12 份，一共 18 个分片，外面套一个 sitemap index。",[11,35,36],{},"改完第二周，GSC 里\"已发现\"从 5 万涨到 4.9 万（之前有一部分根本没被发现），文档页的抓取频次涨了 2 倍。",[15,38,40],{"id":39},"规则二单文件不超过-3-万条留余量","规则二：单文件不超过 3 万条，留余量",[11,42,43],{},"协议上限是单文件 5 万条，但我们建议控制在 3 万以内。原因很简单：文件越大，解析越慢，出错的概率越高。",[11,45,46],{},"这个站的文档分片每个控制在 1.5 万到 2 万条，18 个文件加起来不到 600KB。搜索引擎的抓取和解析都很顺。",[11,48,49],{},"还有一条：sitemap 文件本身不要做 gzip 之外的压缩，不要加登录鉴权，不要 301。我们见过一个客户把 sitemap 放在需要登录的 CDN 后面，蜘蛛拿到的是 403，白等了三个月。",[15,51,53],{"id":52},"规则三lastmod-只写真实更新时间","规则三：lastmod 只写真实更新时间",[11,55,56],{},"这个站的 lastmod 之前全写抓取当天，等于告诉搜索引擎\"所有页面每天都在变\"。结果搜索引擎不再相信这个字段，抓取优先级完全按别的信号走。",[11,58,59],{},"改成真实更新时间之后：只有内容实质变更的页面才更新 lastmod，模板调整、样式修改不算。改完第六周，GSC 里\"已发现未收录\"从 2.8 万降到 9000。",[15,61,63],{"id":62},"一次失败分片后忘了更新索引","一次失败：分片后忘了更新索引",[11,65,66],{},"第一版上线时我们只提交了 18 个子 sitemap，忘了更新 sitemap index 里的引用。搜索引擎三天没发现新分片，我们以为分片没用，差点回滚。",[11,68,69],{},"教训：分片上线后必须验证三件事——index 能访问、index 里的子文件都能访问、每个子文件里的 URL 都能打开。我们后来写了个脚本，每次发布跑一遍，5 分钟。",[15,71,72],{"id":72},"判断",[11,74,75],{},"sitemap 分片不是给搜索引擎看的\"提交动作\"，是给抓取排优先级的\"结构声明\"。内容类型清楚、文件大小可控、lastmod 可信，这三件事做到，收录率自然上来。",[11,77,78],{},"5 万页以下的站，其实一份 sitemap 就够。分片是给大站和内容类型复杂的站准备的，别为了\"看起来规范\"过度拆分。",{"title":80,"searchDepth":81,"depth":81,"links":82},"",2,[83,84,85,86,87,88],{"id":17,"depth":81,"text":17},{"id":26,"depth":81,"text":27},{"id":39,"depth":81,"text":40},{"id":52,"depth":81,"text":53},{"id":62,"depth":81,"text":63},{"id":72,"depth":81,"text":72},null,"技术SEO","2026-05-03","一个 5 万页的 SaaS 文档站，sitemap 之前只有 40% 的页面被收录。我们按内容类型拆成 18 个分片、给 lastmod 立了规矩，2025 年 11 月开始改，8 周后收录率到 78%。分片规则、失败教训和验证方法都在这篇。如果你也在管大站，这篇能省一次返工，少走三个月弯路。",false,"md",{},true,"\u002Fblog\u002Fxml-sitemap-segmentation",{"title":5,"description":92},"blog\u002Fxml-sitemap-segmentation",[101,102,103],"sitemap","收录","站点结构","1ntf9MrnCVdbtT39M-cGiU6X493sqN3_fTXMBioldAE",{"id":106,"title":107,"author":6,"body":108,"canonical":89,"category":90,"cover":89,"date":228,"description":229,"draft":93,"extension":94,"keywords":89,"meta":230,"navigation":96,"noindex":93,"ogImage":89,"path":231,"seo":232,"seoDescription":89,"seoTitle":89,"stem":233,"tags":234,"updated":89,"__hash__":236},"blog\u002Fblog\u002Fpagination-canonical-rules.md","分页页的 canonical 要指向自己，别指向第一页",{"type":8,"value":109,"toc":220},[110,113,116,119,122,178,186,189,193,196,199,202,205,208,211,214,217],[11,111,112],{},"分页页 canonical 要指向自己，不要指向第一页。深层分页也别急着 noindex 或 robots 屏蔽，那是在切断内容发现链。这两个错误在软件站里特别普遍，因为模板大多是抄来的。",[15,114,115],{"id":115},"为什么不能指向第一页",[11,117,118],{},"第 2 页的内容不会出现在第 1 页。canonical 指过去，等于告诉搜索引擎\"第 2 页不用单独存在\"，它上面的长尾内容就永远没机会排名。我们见过一个站把 40 页分页全部 canonical 到第一页，结果第 2 到 40 页的内容完全没收录。",[15,120,121],{"id":121},"三种场景的配置",[123,124,125,141],"table",{},[126,127,128],"thead",{},[129,130,131,135,138],"tr",{},[132,133,134],"th",{},"场景",[132,136,137],{},"canonical",[132,139,140],{},"索引控制",[142,143,144,156,167],"tbody",{},[129,145,146,150,153],{},[147,148,149],"td",{},"标准列表分页",[147,151,152],{},"自指",[147,154,155],{},"都允许索引",[129,157,158,161,164],{},[147,159,160],{},"无限滚动",[147,162,163],{},"URL 不变即可",[147,165,166],{},"不生成新 URL",[129,168,169,172,175],{},[147,170,171],{},"筛选加翻页",[147,173,174],{},"指向无筛选的对应分页",[147,176,177],{},"交给 canonical",[11,179,180,181,185],{},"标准分页最简单：每页 canonical 指向自己，第 1 页也指向自己。第 1 页的 URL 要干净，别带 ",[182,183,184],"code",{},"?page=1","。",[11,187,188],{},"无限滚动如果每次加载都改 URL，用 history.replaceState 而不是 pushState，别让浏览器地址栏堆出一串页码。用 pushState 的站，蜘蛛会把每个滚动状态当成独立页面，抓取预算直接崩。",[15,190,192],{"id":191},"_2026-年-3-月那个模板站","2026 年 3 月那个模板站",[11,194,195],{},"一个电商 SaaS 的模板市场，1200 个列表页，每页 20 个模板。原来所有分页 canonical 都指向第一页，结果只有第 1 页的内容被收录，深层模板页拿不到内链权重。",[11,197,198],{},"改成自指、第 1 页 URL 规范化之后，两个月收录从 300 涨到 1100，模板详情页的自然点击涨 52%。改动只有模板里的一行配置。",[15,200,201],{"id":201},"分页页还要注意两件事",[11,203,204],{},"一是标题和描述。分页页的 title 要带上页码或内容范围，比如\"模板市场 - 第 3 页\"，别所有页共用同一个标题，否则蜘蛛分不清哪页是哪页。二是加载速度，分页页往往图片多，LCP 容易超标，图片懒加载和尺寸标注要做。",[11,206,207],{},"另外，分页页的 URL 形式只保留一种。有的站同时支持 \u002Flist\u002Fpage\u002F2 和 \u002Flist?page=2，两套都在线，就是重复内容。上线前统一成路径形式，旧的 301。",[15,209,210],{"id":210},"一个例外",[11,212,213],{},"超过 20 页的深层分页，内容价值确实低。这种可以 noindex，但保留页面上的链接——别用 robots 屏蔽，屏蔽了蜘蛛就爬不到后面的内容了。noindex 至少还能让链接权重流过去。",[15,215,216],{"id":216},"立场",[11,218,219],{},"分页是内容发现链的一部分，不是重复内容。把它当重复内容处理，等于把内链结构拆了。做 SEO 的人要能跟开发讲清楚：分页的 canonical 指向自己，这一条没有例外。",{"title":80,"searchDepth":81,"depth":81,"links":221},[222,223,224,225,226,227],{"id":115,"depth":81,"text":115},{"id":121,"depth":81,"text":121},{"id":191,"depth":81,"text":192},{"id":201,"depth":81,"text":201},{"id":210,"depth":81,"text":210},{"id":216,"depth":81,"text":216},"2026-05-02","分页页指向第一页、给深层分页加 noindex，这两个做法都在伤害收录。我们按三种分页场景给配置表，附一个 2026 年 3 月的模板站案例：收录从 300 涨到 1100。",{},"\u002Fblog\u002Fpagination-canonical-rules",{"title":107,"description":229},"blog\u002Fpagination-canonical-rules",[235,137,102],"分页","UDtpk6-AZFMQdkIm7wmKw3OszmynOJ5lrD0IrXTkm8g",{"id":238,"title":239,"author":6,"body":240,"canonical":89,"category":90,"cover":89,"date":334,"description":335,"draft":93,"extension":94,"keywords":89,"meta":336,"navigation":96,"noindex":93,"ogImage":89,"path":337,"seo":338,"seoDescription":89,"seoTitle":89,"stem":339,"tags":340,"updated":89,"__hash__":344},"blog\u002Fblog\u002Fcls-mobile-viewport-shift.md","移动端 CLS 的三个特有来源，桌面测不出来",{"type":8,"value":241,"toc":326},[242,245,249,252,255,258,262,265,268,271,274,278,281,284,287,290,293,296,299,302,305,308,311,314,317,320,323],[11,243,244],{},"2026 年 5 月我们遇到一个站，桌面 CLS 0.02，移动端 0.21。图片宽高、第三方组件都查过了，没问题。最后发现三个偏移来源只在手机上出现，桌面版永远看不到。",[15,246,248],{"id":247},"第一处地址栏收起和展开","第一处：地址栏收起和展开",[11,250,251],{},"移动浏览器滚动时，地址栏会收起，视口高度变大，页面重新布局。如果页面里有依赖视口高度的元素，就会跳一下。",[11,253,254],{},"最典型的是用 100vh 设定的全屏区块。地址栏一收，100vh 变大，里面的内容跟着重排。",[11,256,257],{},"改法是换成 svh 或 dvh 单位，让高度跟着实际视口走。固定底部的按钮也要检查，别用绝对定位加百分比高度。",[15,259,261],{"id":260},"第二处输入法和键盘弹出","第二处：输入法和键盘弹出",[11,263,264],{},"用户在表单页点输入框，键盘弹出，视口高度瞬间减少一半。底部固定的元素被顶上去，或者页面滚动位置变化，都会记一次偏移。",[11,266,267],{},"这个问题在注册页、留资页特别常见，而这些页面恰恰是转化最关键的页面。",[11,269,270],{},"改法是尽量不用 fixed 定位的底部元素，或者用 visualViewport 接口监听键盘状态，主动调整布局。",[11,272,273],{},"还有一个细节：输入框获得焦点时页面自动滚动，这个滚动不算 CLS，但如果同时触发了元素重排，就会算。",[15,275,277],{"id":276},"第三处折叠菜单和横向标签","第三处：折叠菜单和横向标签",[11,279,280],{},"移动端的导航是折叠的。用户点开菜单，菜单把下面的内容推下去，这是一次明显的偏移。",[11,282,283],{},"横向滚动的标签栏也有类似问题：切换标签时内容区高度变化，下面的内容跟着跳。",[11,285,286],{},"改法是把折叠面板做成浮层，不占文档流；或者给内容区固定最小高度，变化范围控制在几十像素内。",[15,288,289],{"id":289},"为什么桌面测不出来",[11,291,292],{},"桌面浏览器没有地址栏收起，没有软键盘，视口高度固定，所以这三类问题在桌面上不会触发。",[11,294,295],{},"DevTools 的设备模拟虽然能模拟移动端视口，但它不会模拟地址栏和键盘的真实行为，滚动起来视口尺寸是固定的。",[11,297,298],{},"所以移动端 CLS 必须上真机测。模拟器只能看个大概。",[15,300,301],{"id":301},"真机怎么测",[11,303,304],{},"用安卓手机连电脑，打开 Chrome 的远程调试，在电脑上看 Performance 面板录屏。",[11,306,307],{},"录的时候做三个动作：上下滚动、点开菜单、在表单里点输入框。每个动作之后看有没有 Layout Shift 标记。",[11,309,310],{},"录屏比数据有用，因为你能看到具体是哪个元素在动、动了多少。",[11,312,313],{},"再看 CrUX 里按设备分组的数据。桌面合格、移动端超标，就说明问题出在这三类场景里。",[15,315,316],{"id":316},"一个建议",[11,318,319],{},"移动端的 CLS 单独设一条线，不和桌面共用。我们给客户的标准是移动端 0.1 以内、桌面 0.05 以内。",[11,321,322],{},"因为移动端的偏移对用户影响更大。屏幕小，一次偏移可能把整个按钮挪出视野，用户点不到，直接流失。",[11,324,325],{},"这类问题修起来都不难，难的是发现。桌面数据好看的时候，很少有人会想到用真机再测一遍。",{"title":80,"searchDepth":81,"depth":81,"links":327},[328,329,330,331,332,333],{"id":247,"depth":81,"text":248},{"id":260,"depth":81,"text":261},{"id":276,"depth":81,"text":277},{"id":289,"depth":81,"text":289},{"id":301,"depth":81,"text":301},{"id":316,"depth":81,"text":316},"2026-05-04","一个站桌面 CLS 0.02、移动端 0.21，查下来是地址栏、输入法和折叠菜单三个移动端独有的场景。这篇写成因、改法，以及真机怎么测。",{},"\u002Fblog\u002Fcls-mobile-viewport-shift",{"title":239,"description":335},"blog\u002Fcls-mobile-viewport-shift",[341,342,343],"CLS","移动端","页面体验","GwKpO4JJL9LLd1xbPHLu8h2ikEaAATw7UjWswU2FolU",1794088106276]