[{"data":1,"prerenderedAt":311},["ShallowReactive",2],{"blog-index-bloat-control":3,"blog-prev-index-bloat-control":130,"blog-next-index-bloat-control":200},{"id":4,"title":5,"author":6,"body":7,"canonical":114,"category":115,"cover":114,"date":116,"description":117,"draft":118,"extension":119,"keywords":114,"meta":120,"navigation":121,"noindex":118,"ogImage":114,"path":122,"seo":123,"seoDescription":114,"seoTitle":114,"stem":124,"tags":125,"updated":114,"__hash__":129},"blog\u002Fblog\u002Findex-bloat-control.md","索引膨胀：站内 60% 页面不该被收录，怎么控制","元析智能",{"type":8,"value":9,"toc":103},"minimark",[10,14,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,73,76,79,82,85,88,91,94,97,100],[11,12,13],"p",{},"索引膨胀的意思是搜索引擎收录了大量没有搜索价值的页面，占着抓取预算还拉低整站评价。我们给一个 8 万页的站做清理，压到 1.2 万页，核心页抓取频次翻倍。",[15,16,17],"h2",{"id":17},"什么是索引膨胀",[11,19,20],{},"假设一个站点有 8 万页，其中真正有搜索需求、能带来访问的只有 1 万多页，剩下的是标签页、分页、参数页、重复的产品变体、测试页。",[11,22,23],{},"搜索引擎把这些页面收进索引，不会给你流量，但会占用抓取资源，还会让\"整站质量\"这个判断变差。",[15,25,26],{"id":26},"我们的判断标准",[11,28,29],{},"三个问题，任何一个答案是\"否\"，这个页面就不该被收录：",[11,31,32],{},"第一，用户会不会主动搜这个页面想解决的问题？",[11,34,35],{},"第二，这个页面有没有独立的内容价值，还是只是换个排列组合？",[11,37,38],{},"第三，这个页面有没有内链或者外链指向它？",[11,40,41],{},"三个都过，保留；只过一两个，考虑合并；都不过，挡掉。",[15,43,44],{"id":44},"三类该挡的页面",[11,46,47],{},"第一类，参数和组合页。筛选组合、排序、视图模式，绝大多数没有搜索需求。",[11,49,50],{},"第二类，分页尾部。列表第 20 页之后的页面，用户不会直接搜，也没有独立内容。",[11,52,53],{},"第三类，重复变体。同一产品的不同颜色、不同版本，内容 90% 一样的，合并成一个页面。",[15,55,56],{"id":56},"挡住的方式",[11,58,59],{},"robots.txt 屏蔽：最彻底，页面不会被抓取。适合大量参数页。",[11,61,62],{},"noindex：页面能被抓取，但不进索引。适合需要保留给用户访问、但不想被搜到的页面。",[11,64,65],{},"canonical：页面能被抓取、能被用户访问，权重归到主页面。适合内容重复但都有流量的页面。",[11,67,68],{},"我们一般组合用：参数页用 robots，站内搜索页用 noindex，重复变体用 canonical。",[15,70,72],{"id":71},"一个-8-万页的案例","一个 8 万页的案例",[11,74,75],{},"2025 年 12 月接的一个电商 SaaS 站，8.2 万页，实际有搜索价值的约 1.1 万页。",[11,77,78],{},"我们做了三件事：按上面的标准筛出 6.9 万页不该收录的；参数页 robots 屏蔽、站内搜索页 noindex、重复产品变体合并；sitemap 只保留该收录的 1.2 万页。",[11,80,81],{},"清理用了 6 周。第 8 周看数据：索引量从 7.1 万降到 1.4 万，核心产品页的平均抓取间隔从 11 天降到 4 天，有排名的词从 3800 涨到 6100。",[11,83,84],{},"流量没有掉，反而涨了 18%。因为留下的都是有价值的页面。",[15,86,87],{"id":87},"一个提醒",[11,89,90],{},"别一次全挡。我们一般按 20% 分批，每批观察两周，看抓取和流量的变化。一次性清掉几万页，出问题很难回滚。",[11,92,93],{},"还有：挡之前先导出清单，挡之后保留 3 个月，方便回滚。",[15,95,96],{"id":96},"判断",[11,98,99],{},"索引膨胀的本质是\"贪多\"。很多站觉得收录越多越好，其实索引里全是垃圾，比收录少更糟。",[11,101,102],{},"先把页面数量压到和质量匹配，再谈收录增长。",{"title":104,"searchDepth":105,"depth":105,"links":106},"",2,[107,108,109,110,111,112,113],{"id":17,"depth":105,"text":17},{"id":26,"depth":105,"text":26},{"id":44,"depth":105,"text":44},{"id":56,"depth":105,"text":56},{"id":71,"depth":105,"text":72},{"id":87,"depth":105,"text":87},{"id":96,"depth":105,"text":96},null,"技术SEO","2026-07-31","索引膨胀的意思是搜索引擎收录了大量没有搜索价值的页面，占着抓取预算还拉低整站评价。我们给一个 8 万页的站做清理，压到 1.2 万页，核心页抓取频次翻倍。判断标准和三种控制手段都在这篇，照着做能少走弯路。",false,"md",{},true,"\u002Fblog\u002Findex-bloat-control",{"title":5,"description":117},"blog\u002Findex-bloat-control",[126,127,128],"索引膨胀","收录控制","站点健康","TW3ejOzTysGNJrXnofPJrsL897_nh4sH9CRFdNem3fs",{"id":131,"title":132,"author":6,"body":133,"canonical":114,"category":115,"cover":114,"date":189,"description":190,"draft":118,"extension":119,"keywords":114,"meta":191,"navigation":121,"noindex":118,"ogImage":114,"path":192,"seo":193,"seoDescription":114,"seoTitle":114,"stem":194,"tags":195,"updated":114,"__hash__":199},"blog\u002Fblog\u002Fcdn-waf-blocking-crawlers.md","CDN 和防火墙把蜘蛛拦了，日志里看不出来的坑",{"type":8,"value":134,"toc":181},[135,138,141,144,148,151,154,157,160,163,166,169,172,175,178],[11,136,137],{},"蜘蛛被拦分两种：一种能被日志看见，比如 403、429；另一种看不见，CDN 直接在边缘返回验证页或者在网络层丢弃，源站日志里一条记录都没有。第二种最要命，因为你在日志里找不到任何证据。",[15,139,140],{"id":140},"怎么发现",[11,142,143],{},"GSC 抓取统计里请求量突然归零，但站点本身访问正常，大概率是被拦了。百度搜索资源平台的抓取诊断会报\"抓取失败\"，或者返回的内容不是你的页面。日志里 Googlebot UA 的请求数变成 0，而其他 UA 正常。最直接的验证方法：找一台海外 VPS，用 curl 带蜘蛛 UA 请求首页，看返回什么。",[15,145,147],{"id":146},"_2025-年-11-月那次","2025 年 11 月那次",[11,149,150],{},"一个客户上线新的 WAF，默认规则把 UA 里含 \"bot\" 的请求全部拦截。Google 抓取量三天内从每天 4000 次掉到 200 次，他们一直以为是\"算法波动\"，第 6 周才找我们。恢复访问后两周抓取量回来，但掉下去的那批关键词排名过了两个月才补回来一部分。",[15,152,153],{"id":153},"白名单怎么配",[11,155,156],{},"Google 和 Bing 都提供官方 IP 段或者反向 DNS 验证方式，百度也有官方 IP 列表。别只按 UA 做白名单——UA 可以伪造，安全团队也不接受这种规则。用 IP 段加反向解析双重校验，既安全又不误伤。",[11,158,159],{},"Cloudflare 这类 CDN 有自己的\"已验证机器人\"机制，直接打开就行，别自己写规则。",[15,161,162],{"id":162},"一个排查清单",[11,164,165],{},"发现抓取量异常时，按这个顺序查：GSC 抓取统计是不是全站归零；百度抓取诊断能不能抓到；日志里蜘蛛 UA 的请求数；CDN 后台的拦截日志（很多厂商有这个报表）；安全产品的拦截规则里有没有 bot、crawler 这类关键词。五步走完，基本能定位到是哪一层拦的。",[11,167,168],{},"如果是 CDN 厂商的默认防护拦的，让他们把已验证机器人放行；如果是自己配的规则，加 IP 段白名单。改完立刻用 curl 验证，别等第二天看数据。",[15,170,171],{"id":171},"上线安全产品前必须做的一件事",[11,173,174],{},"跑一次蜘蛛访问测试：用 Googlebot、Bingbot、Baiduspider 的 UA 和官方 IP 各请求一次核心页面，确认返回 200 和正常 HTML。这次测试要写进变更流程，和\"上线后检查监控\"同等重要。",[15,176,177],{"id":177},"立场",[11,179,180],{},"安全团队和 SEO 团队的矛盾不会消失，但可以靠流程解决：任何影响入口流量的变更，上线前必须验证蜘蛛可达。这一条比事后排查六周便宜太多。",{"title":104,"searchDepth":105,"depth":105,"links":182},[183,184,185,186,187,188],{"id":140,"depth":105,"text":140},{"id":146,"depth":105,"text":147},{"id":153,"depth":105,"text":153},{"id":162,"depth":105,"text":162},{"id":171,"depth":105,"text":171},{"id":177,"depth":105,"text":177},"2026-07-30","蜘蛛被 WAF 拦掉时，日志里可能只剩空白或者 403，甚至完全没有记录。我们遇到 5 次这类事故，最久的一次被拦了 6 周。这篇讲怎么发现、怎么配白名单、怎么进变更流程。",{},"\u002Fblog\u002Fcdn-waf-blocking-crawlers",{"title":132,"description":190},"blog\u002Fcdn-waf-blocking-crawlers",[196,197,198],"抓取","CDN","日志分析","5bNahw7QT6DYXnyBi6VjmAhnmSjig7EZZMAM8C_29fk",{"id":201,"title":202,"author":6,"body":203,"canonical":114,"category":115,"cover":114,"date":300,"description":301,"draft":118,"extension":119,"keywords":114,"meta":302,"navigation":121,"noindex":118,"ogImage":114,"path":303,"seo":304,"seoDescription":114,"seoTitle":114,"stem":305,"tags":306,"updated":114,"__hash__":310},"blog\u002Fblog\u002Fresponsive-images-srcset.md","一张图三个尺寸：srcset 配对了能省七成流量",{"type":8,"value":204,"toc":291},[205,208,211,214,217,220,224,227,230,233,236,239,242,245,249,252,255,258,261,264,267,270,273,276,279,282,285,288],[11,206,207],{},"2026 年 8 月我们给一个官网改图片，改之前首屏图片总重 3.8 兆，改完 1.1 兆，视觉上看不出差别。做法不复杂：一张图准备三个尺寸，让浏览器自己挑。",[15,209,210],{"id":210},"一张图三个尺寸",[11,212,213],{},"手机竖屏大概需要 400 到 600 像素宽，平板 800 到 1000，桌面 1400 到 1600。",[11,215,216],{},"只做这三个就够，没必要给每个断点都生成一版。尺寸太多，构建和缓存都变复杂。",[11,218,219],{},"高分辨率屏要乘 2，所以桌面最大那张要准备 2800 像素左右的版本。这是文件变大主要来源，但也只在必要时加载。",[15,221,223],{"id":222},"srcset-和-sizes-怎么写","srcset 和 sizes 怎么写",[11,225,226],{},"srcset 列出候选图片和宽度，sizes 告诉浏览器这张图在不同视口下占多宽。",[11,228,229],{},"最常见的错是 sizes 写死 100vw。图片实际只占一半宽度，浏览器却按整屏挑图，结果加载了双倍大小的文件。",[11,231,232],{},"sizes 写不对，srcset 就白配。这条我们踩过，改完发现流量只降了一成，问题就在 sizes。",[15,234,235],{"id":235},"格式怎么选",[11,237,238],{},"优先 AVIF，其次 WebP，最后才是 JPEG 和 PNG。用 picture 标签做回退，浏览器自己选支持的最好格式。",[11,240,241],{},"质量参数别设满。照片类 70 到 80 就够，人眼很难分辨，文件能小一半。",[11,243,244],{},"截图和带文字的图要另说，压缩过头会糊，这类图控制在 85 左右。",[15,246,248],{"id":247},"图片-cdn-能省很多事","图片 CDN 能省很多事",[11,250,251],{},"图片放 CDN，URL 里带参数控制宽高和格式，不用提前生成多份。",[11,253,254],{},"一张原图，通过参数输出 400、800、1600 三个版本，缓存也由 CDN 管。改动成本比构建时生成低。",[11,256,257],{},"注意缓存策略。参数不同就是不同资源，URL 变了缓存要重新建，第一次访问会慢一点。",[15,259,260],{"id":260},"三个容易踩的坑",[11,262,263],{},"第一个，首屏那张图加了懒加载。LCP 图必须优先加载，懒加载会把它推到很后面。",[11,265,266],{},"第二个，显示尺寸和实际尺寸不一致。CSS 里显示 300 像素宽，加载的是 1600 像素的图，白白浪费七成流量。",[11,268,269],{},"第三个，图片没有宽高比。这会同时拖慢 LCP 和造成 CLS，等于两个指标一起坏。",[15,271,272],{"id":272},"一个省事的构建配置",[11,274,275],{},"站点如果用现代框架，图片组件一般能自动生成 srcset。手写容易漏尺寸，配置一次省事很多。",[11,277,278],{},"我们的默认输出是三个宽度加两种格式，构建时生成，交给 CDN 缓存。新图片进来不用单独交代。",[15,280,281],{"id":281},"一个态度",[11,283,284],{},"图片优化是首屏优化里收益最确定的一件事。软件公司的官网尤其明显，因为首屏往往就是一张产品截图。",[11,286,287],{},"但它需要设计和开发配合。设计稿出图的时候就要约定输出规格，别等上线了再回头改。",[11,289,290],{},"我们的默认要求是：新建页面提测时，首屏图片总量不超过 500KB，超过就不让上线。",{"title":104,"searchDepth":105,"depth":105,"links":292},[293,294,295,296,297,298,299],{"id":210,"depth":105,"text":210},{"id":222,"depth":105,"text":223},{"id":235,"depth":105,"text":235},{"id":247,"depth":105,"text":248},{"id":260,"depth":105,"text":260},{"id":272,"depth":105,"text":272},{"id":281,"depth":105,"text":281},"2026-08-01","一个站图片总重 3.8 兆，配上 srcset 和图片 CDN 之后降到 1.1 兆。这篇写 sizes 怎么写、格式怎么选，以及高分辨率屏和懒加载的坑。",{},"\u002Fblog\u002Fresponsive-images-srcset",{"title":202,"description":301},"blog\u002Fresponsive-images-srcset",[307,308,309],"图片优化","srcset","页面体验","0fsMyxB4gSBLh_aRv6MZ7GWGwUkmWzdxNfIxnpDU1Ds",1794088103300]