[{"data":1,"prerenderedAt":892},["ShallowReactive",2],{"blog-multilingual-sitemap-structure":3,"blog-prev-multilingual-sitemap-structure":187,"blog-next-multilingual-sitemap-structure":799},{"id":4,"title":5,"author":6,"body":7,"canonical":171,"category":172,"cover":171,"date":173,"description":174,"draft":175,"extension":176,"keywords":171,"meta":177,"navigation":178,"noindex":175,"ogImage":171,"path":179,"seo":180,"seoDescription":171,"seoTitle":171,"stem":181,"tags":182,"updated":171,"__hash__":186},"blog\u002Fblog\u002Fmultilingual-sitemap-structure.md","多语言站 sitemap：一个索引文件管 40 个语言版本","元析智能",{"type":8,"value":9,"toc":162},"minimark",[10,14,18,21,57,60,91,94,98,101,104,107,130,134,137,140,143,146,149,152,155,158],[11,12,13],"p",{},"多语言 sitemap 的正确结构只有一种：一个 sitemapindex，按语言拆成子 sitemap，每条 URL 带上其他语言版本的 hreflang 注解。混在一个文件里，超过 5 万条会被截断，权重也分散。",[15,16,17],"h2",{"id":17},"结构长什么样",[11,19,20],{},"索引文件只列子文件地址：",[22,23,28],"pre",{"className":24,"code":25,"language":26,"meta":27,"style":27},"language-xml shiki shiki-themes github-light github-dark","\u003Csitemapindex>\n  \u003Csitemap>\u003Cloc>https:\u002F\u002Fexample.com\u002Fsitemap-zh.xml\u003C\u002Floc>\u003C\u002Fsitemap>\n  \u003Csitemap>\u003Cloc>https:\u002F\u002Fexample.com\u002Fsitemap-en.xml\u003C\u002Floc>\u003C\u002Fsitemap>\n\u003C\u002Fsitemapindex>\n","xml","",[29,30,31,39,45,51],"code",{"__ignoreMap":27},[32,33,36],"span",{"class":34,"line":35},"line",1,[32,37,38],{},"\u003Csitemapindex>\n",[32,40,42],{"class":34,"line":41},2,[32,43,44],{},"  \u003Csitemap>\u003Cloc>https:\u002F\u002Fexample.com\u002Fsitemap-zh.xml\u003C\u002Floc>\u003C\u002Fsitemap>\n",[32,46,48],{"class":34,"line":47},3,[32,49,50],{},"  \u003Csitemap>\u003Cloc>https:\u002F\u002Fexample.com\u002Fsitemap-en.xml\u003C\u002Floc>\u003C\u002Fsitemap>\n",[32,52,54],{"class":34,"line":53},4,[32,55,56],{},"\u003C\u002Fsitemapindex>\n",[11,58,59],{},"子文件里每条 URL 带完整语言组：",[22,61,63],{"className":24,"code":62,"language":26,"meta":27,"style":27},"\u003Curl>\n  \u003Cloc>https:\u002F\u002Fexample.com\u002Fzh\u002Fdocs\u002Fapi\u003C\u002Floc>\n  \u003Cxhtml:link rel=\"alternate\" hreflang=\"en\" href=\"https:\u002F\u002Fexample.com\u002Fen\u002Fdocs\u002Fapi\"\u002F>\n  \u003Cxhtml:link rel=\"alternate\" hreflang=\"zh-Hans\" href=\"https:\u002F\u002Fexample.com\u002Fzh\u002Fdocs\u002Fapi\"\u002F>\n\u003C\u002Furl>\n",[29,64,65,70,75,80,85],{"__ignoreMap":27},[32,66,67],{"class":34,"line":35},[32,68,69],{},"\u003Curl>\n",[32,71,72],{"class":34,"line":41},[32,73,74],{},"  \u003Cloc>https:\u002F\u002Fexample.com\u002Fzh\u002Fdocs\u002Fapi\u003C\u002Floc>\n",[32,76,77],{"class":34,"line":47},[32,78,79],{},"  \u003Cxhtml:link rel=\"alternate\" hreflang=\"en\" href=\"https:\u002F\u002Fexample.com\u002Fen\u002Fdocs\u002Fapi\"\u002F>\n",[32,81,82],{"class":34,"line":53},[32,83,84],{},"  \u003Cxhtml:link rel=\"alternate\" hreflang=\"zh-Hans\" href=\"https:\u002F\u002Fexample.com\u002Fzh\u002Fdocs\u002Fapi\"\u002F>\n",[32,86,88],{"class":34,"line":87},5,[32,89,90],{},"\u003C\u002Furl>\n",[11,92,93],{},"注意 xhtml 命名空间要声明，漏了整份文件解析失败。",[15,95,97],{"id":96},"_2025-年-12-月那次改造","2025 年 12 月那次改造",[11,99,100],{},"一个出海 SaaS，40 个语言版本、每个 1500 页左右。之前所有语言塞进一个 sitemap，6 万条 URL 超限被截断，最靠后的 20 个语言版本根本没进文件。hreflang 又只写在 HTML head 里，部分版本模板漏了自引用。",[11,102,103],{},"改成分语言 sitemap、URL 级 hreflang、索引文件汇总之后，Google 读到的 URL 从 3.2 万涨到 5.8 万。德语和西语版本的收录率两个月从 30% 到 68%。",[15,105,106],{"id":106},"三个常见错",[108,109,110,118,124],"ol",{},[111,112,113,117],"li",{},[114,115,116],"strong",{},"所有语言混一个文件","：超 5 万条截断，且各语言互相稀释。",[111,119,120,123],{},[114,121,122],{},"sitemap 和 HTML 的 hreflang 不一致","：两处都写可以，但必须一致，冲突时以 HTML 为准。",[111,125,126,129],{},[114,127,128],{},"没有自引用","：语言组里不含自己，整组失效。",[15,131,133],{"id":132},"_40-个版本里哪些值得进-sitemap","40 个版本里，哪些值得进 sitemap",[11,135,136],{},"不是所有语言版本都值得提交。判断标准是\"有没有独立内容\"，机翻出来只换了语言、结构和正文都一样的页面，提交了也是重复内容。我们的做法是先给每个语言版本打分：本地化文案、本地案例、本地价格、本地联系方式，四项里占两项以上才进 sitemap，其余的先 noindex，等翻译团队补齐。",[11,138,139],{},"那次改造里 40 个版本只提交了 26 个，另外 14 个先挡在 noindex 后面。三个月后补齐内容的 9 个版本陆续放开，收录率都在 60% 以上。",[15,141,142],{"id":142},"提交和监控",[11,144,145],{},"sitemapindex 提交一次就够，子文件增删不用重新提交。GSC 的 sitemap 报告能按子文件看\"已发现 URL 数\"，哪个语言的数字明显偏低，就去看那个语言的模板和 hreflang 组。百度这边对整个 sitemapindex 的支持不如 Google 完善，我们会单独提交几个主力语言的子文件。",[15,147,148],{"id":148},"生成的工程做法",[11,150,151],{},"别手写。让后端按语言和内容类型生成，每次内容发布触发增量更新，lastmod 只改真正变动的那几条。多语言站最怕的是翻译平台回写时把 URL 改了但 sitemap 没跟上，我们在发布流程里加了一步校验：新 URL 必须同时出现在子 sitemap 和对应页面的 hreflang 组里，缺一个就报警。",[15,153,154],{"id":154},"判断",[11,156,157],{},"语言版本少于 5 个的站，不用搞这么复杂，一个 sitemap 加 HTML head 的 hreflang 就够。进入 10 个以上市场、每个市场都有独立内容团队时，sitemap 的组织方式比内容数量更影响收录。",[159,160,161],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":27,"searchDepth":41,"depth":41,"links":163},[164,165,166,167,168,169,170],{"id":17,"depth":41,"text":17},{"id":96,"depth":41,"text":97},{"id":106,"depth":41,"text":106},{"id":132,"depth":41,"text":133},{"id":142,"depth":41,"text":142},{"id":148,"depth":41,"text":148},{"id":154,"depth":41,"text":154},null,"技术SEO","2026-01-29","40 个语言版本、每个几千页，sitemap 怎么组织才不会互相拖累。我们用 2025 年 12 月一个出海 SaaS 的改造，讲清 sitemapindex 的结构、URL 级 hreflang 写法，以及三个常见错。",false,"md",{},true,"\u002Fblog\u002Fmultilingual-sitemap-structure",{"title":5,"description":174},"blog\u002Fmultilingual-sitemap-structure",[183,184,185],"sitemap","多语言","hreflang","od7GlkQ0jcoiUW4S8vLNtZgqoffM6pMOtKhAXCaA-3w",{"id":188,"title":189,"author":6,"body":190,"canonical":171,"category":787,"cover":171,"date":788,"description":789,"draft":175,"extension":176,"keywords":171,"meta":790,"navigation":178,"noindex":175,"ogImage":171,"path":791,"seo":792,"seoDescription":171,"seoTitle":171,"stem":793,"tags":794,"updated":171,"__hash__":798},"blog\u002Fblog\u002Fseo-technical-audit-checklist.md","软件公司 SEO 技术检查清单:15 个常见问题",{"type":8,"value":191,"toc":757},[192,195,199,202,207,232,236,264,268,288,292,295,299,334,338,364,368,391,395,414,418,421,425,452,456,476,480,504,508,511,515,570,574,593,597,600,604,650,654,673,677,696,699,702,705,708,711,714,717,722,725,730,733,738,741,746,749,754],[11,193,194],{},"软件公司的站技术问题特别多,因为产品页经常是 SPA(单页应用),文档站结构复杂,动态参数一堆。技术问题不修,内容做得再好也排不上去——搜索引擎根本抓不到。这份清单列我们诊断时最常见的 15 个技术 SEO 问题,按类分组,每条写清楚查什么、怎么查、怎么修。照着过一遍,基本能覆盖软件公司站的主要技术坑。",[15,196,198],{"id":197},"一渲染问题spassr","一、渲染问题(SPA\u002FSSR)",[11,200,201],{},"软件公司最常踩的坑。React、Vue 做的 SPA,默认客户端渲染,搜索引擎抓到的是空 HTML。",[203,204,206],"h3",{"id":205},"_1-spa-客户端渲染内容抓不到","1. SPA 客户端渲染,内容抓不到",[208,209,210,216,226],"ul",{},[111,211,212,215],{},[114,213,214],{},"查什么",":页面内容是不是 JS 执行后才出现",[111,217,218,221,222,225],{},[114,219,220],{},"怎么查",":用 Google Search Console 的\"网址检查\"工具,看\"已呈现的页面\"。或者直接 ",[29,223,224],{},"curl"," 你的页面 URL,看返回的 HTML 里有没有正文内容。如果 HTML 是空的壳子,内容全靠 JS 填,就是这个问题",[111,227,228,231],{},[114,229,230],{},"怎么修",":改成 SSR(服务端渲染)或 SSG(静态生成)。React 用 Next.js,Vue 用 Nuxt.js。如果改造成本高,至少把首屏内容和 SEO 关键内容做服务端渲染",[203,233,235],{"id":234},"_2-js-和-css-资源被-robots-屏蔽","2. JS 和 CSS 资源被 robots 屏蔽",[208,237,238,246,259],{},[111,239,240,242,245],{},[114,241,214],{},[243,244],"robots",{},".txt 是不是屏了 \u002Fjs\u002F \u002Fassets\u002F 这类路径",[111,247,248,250,251,254,255,258],{},[114,249,220],{},":打开 ",[29,252,253],{},"yourdomain.com\u002Frobots.txt"," 看有没有 ",[29,256,257],{},"Disallow: \u002Fjs\u002F"," 之类的规则。再在 Google Search Console 的\"网址检查\"里看渲染是否完整",[111,260,261,263],{},[114,262,230],{},":搜索引擎现在需要执行 JS 才能渲染页面,JS 资源必须允许抓取。robots.txt 里删掉对 JS\u002FCSS 路径的 Disallow",[203,265,267],{"id":266},"_3-关键内容-js-动态加载延迟出现","3. 关键内容 JS 动态加载,延迟出现",[208,269,270,275,280],{},[111,271,272,274],{},[114,273,214],{},":重要内容(标题、正文、内链)是不是页面加载后通过 AJAX\u002F接口请求才填充",[111,276,277,279],{},[114,278,220],{},":禁用浏览器 JS,看页面还有多少内容。或者在 Google Search Console 看渲染快照,关键内容在不在",[111,281,282,284,287],{},[114,283,230],{},[285,286],"seo",{}," 关键内容(标题、正文、H1、内链)放进初始 HTML,不要靠 JS 异步加载。非关键内容(评论、推荐)可以异步",[15,289,291],{"id":290},"二收录问题","二、收录问题",[11,293,294],{},"收录是基础,页面没被收录,后面什么都谈不上。",[203,296,298],{"id":297},"_4-robotstxt-屏蔽了重要页面","4. robots.txt 屏蔽了重要页面",[208,300,301,308,325],{},[111,302,303,305,307],{},[114,304,214],{},[243,306],{},".txt 是不是误屏了文档站、博客、产品页",[111,309,310,312,313,316,317,320,321,324],{},[114,311,220],{},":看 ",[29,314,315],{},"robots.txt",",特别留意 ",[29,318,319],{},"Disallow: \u002F"," 这种全站屏蔽(测试环境漏改到生产是常见原因),以及 ",[29,322,323],{},"Disallow: \u002Fdocs\u002F"," 这种局部屏蔽",[111,326,327,329,330,333],{},[114,328,230],{},":删掉误加的 Disallow。测试环境用 ",[29,331,332],{},"noindex"," meta 标签或 HTTP 认证,不要用 robots.txt 屏蔽——robots.txt 屏蔽的页面搜索引擎还是会爬,只是不索引,而且会阻止发现内链",[203,335,337],{"id":336},"_5-误用-noindex","5. 误用 noindex",[208,339,340,348,356],{},[111,341,342,344,345,347],{},[114,343,214],{},":重要页面是不是被加了 ",[29,346,332],{}," meta 标签",[111,349,350,352,353,355],{},[114,351,220],{},":用 Screaming Frog 爬全站,筛 ",[29,354,332],{}," 页面。重点看产品页、文档页、博客文章有没有被误标",[111,357,358,360,361,363],{},[114,359,230],{},":去掉误加的 ",[29,362,332],{},"。常见原因:开发环境用了 noindex,上线忘改;CMS 模板默认 noindex 没改;某些插件自动加 noindex",[203,365,367],{"id":366},"_6-canonical-标签错误","6. canonical 标签错误",[208,369,370,378,386],{},[111,371,372,374,377],{},[114,373,214],{},[375,376],"canonical",{}," 标签指向对不对,有没有指向自己(等于没用)、指向错误页面、或者循环指向",[111,379,380,382,385],{},[114,381,220],{},[383,384],"screaming",{}," Frog 爬取,看每个页面的 canonical 指向。重点查:canonical 是不是指向自己(正常情况应该指向规范版,如果只有一个版本就指向自己,但有多个 URL 版本时要指向规范版),有没有指向 404 或错误页",[111,387,388,390],{},[114,389,230],{},":每个页面 canonical 指向它的规范 URL。分页、参数变体、移动版都要正确指向规范版。不要用 canonical 解决跨语言或跨设备问题,那是 hreflang 的事",[203,392,394],{"id":393},"_7-孤立页面没有内链指向","7. 孤立页面(没有内链指向)",[208,396,397,402,409],{},[111,398,399,401],{},[114,400,214],{},":站内有没有没有任何内链指向的页面",[111,403,404,406,408],{},[114,405,220],{},[383,407],{}," Frog 爬取后,看\"Inlinks\"为 0 的页面。这些页面搜索引擎很难发现,权重也传不进去",[111,410,411,413],{},[114,412,230],{},":给孤立页面加内链。从相关文章、分类页、面包屑导航链接过去。软件公司常见孤立页:旧版文档、特定版本的功能页、历史博客",[15,415,417],{"id":416},"三速度问题","三、速度问题",[11,419,420],{},"百度和 Google 都把速度作为排名因素。软件公司站 JS 重,速度问题尤其多。",[203,422,424],{"id":423},"_8-首屏加载慢lcp-超过-25-秒","8. 首屏加载慢(LCP 超过 2.5 秒)",[208,426,427,435,443],{},[111,428,429,431,434],{},[114,430,214],{},[432,433],"largest",{}," Contentful Paint(最大内容绘制)时间",[111,436,437,439,442],{},[114,438,220],{},[440,441],"google",{}," PageSpeed Insights 或 Lighthouse 跑一遍,看 LCP 数值。超过 2.5 秒就是差",[111,444,445,447,448,451],{},[114,446,230],{},":首屏内容服务端渲染,关键 CSS 内联,图片懒加载(但首屏图片不要懒加载),字体用 ",[29,449,450],{},"font-display: swap",",减少首屏 JS 阻塞",[203,453,455],{"id":454},"_9-js-包过大","9. JS 包过大",[208,457,458,463,471],{},[111,459,460,462],{},[114,461,214],{},":页面加载的 JS 体积",[111,464,465,467,470],{},[114,466,220],{},[468,469],"chrome",{}," DevTools 的 Network 面板,看 JS 资源总大小(传输后)。超过 500KB 就偏大了",[111,472,473,475],{},[114,474,230],{},":代码分割(code splitting),按路由懒加载,Tree shaking 去掉没用的依赖,把第三方库(分析、聊天)改成异步加载",[203,477,479],{"id":478},"_10-图片未优化","10. 图片未优化",[208,481,482,487,495],{},[111,483,484,486],{},[114,485,214],{},":图片体积和格式",[111,488,489,491,494],{},[114,490,220],{},[492,493],"page-speed",{}," Insights 会列出未优化的图片。或者手动看图片大小,单张超过 200KB 的要查",[111,496,497,499,500,503],{},[114,498,230],{},":用 WebP 或 AVIF 格式(比 JPEG\u002FPNG 小 30%-50%),图片压缩,设置合适的宽高属性(避免布局偏移),用 ",[29,501,502],{},"loading=\"lazy\""," 懒加载非首屏图片",[15,505,507],{"id":506},"四结构化数据","四、结构化数据",[11,509,510],{},"结构化数据帮搜索引擎理解你的内容,软件公司尤其要标 SoftwareApplication、FAQ、Article。",[203,512,514],{"id":513},"_11-没有任何-schemaorg-结构化数据","11. 没有任何 Schema.org 结构化数据",[208,516,517,522,533],{},[111,518,519,521],{},[114,520,214],{},":页面有没有结构化数据标记",[111,523,524,526,528,529,532],{},[114,525,220],{},[440,527],{}," Rich Results Test 工具,输入 URL 看有没有结构化数据。或者看页面源码有没有 ",[29,530,531],{},"application\u002Fld+json"," 的 script 标签",[111,534,535,537,538],{},[114,536,230],{},":软件公司至少标这几种:\n",[208,539,540,546,552,558,564],{},[111,541,542,545],{},[29,543,544],{},"SoftwareApplication",":产品页,标名称、描述、价格、评分",[111,547,548,551],{},[29,549,550],{},"FAQPage",":FAQ 内容页",[111,553,554,557],{},[29,555,556],{},"Article",":博客文章",[111,559,560,563],{},[29,561,562],{},"BreadcrumbList",":面包屑导航",[111,565,566,569],{},[29,567,568],{},"Organization",":关于页\u002F首页",[203,571,573],{"id":572},"_12-结构化数据错误或与页面内容不符","12. 结构化数据错误或与页面内容不符",[208,575,576,581,588],{},[111,577,578,580],{},[114,579,214],{},":结构化数据格式对不对,内容跟页面实际是不是一致",[111,582,583,585,587],{},[114,584,220],{},[440,586],{}," Search Console 的\"增强型报告\"会列出结构化数据错误。Rich Results Test 看具体警告",[111,589,590,592],{},[114,591,230],{},":常见错误——必填字段缺失(如 SoftwareApplication 缺 name)、数据对不上(标记了 rating 但页面没有评分组件)、嵌套层级错。按 Search Console 报的错误逐条修",[15,594,596],{"id":595},"五url-问题","五、URL 问题",[11,598,599],{},"URL 结构影响收录和权重传递,软件公司站尤其乱。",[203,601,603],{"id":602},"_13-url-不语义化","13. URL 不语义化",[208,605,606,614,631],{},[111,607,608,610,613],{},[114,609,214],{},[611,612],"url",{}," 是不是有意义的词,还是一串 ID",[111,615,616,618,619,622,623,626,627,630],{},[114,617,220],{},":看你的 URL 长什么样。",[29,620,621],{},"\u002Fproducts\u002Fcrm"," 是好的,",[29,624,625],{},"\u002Fp\u002F12345"," 或 ",[29,628,629],{},"\u002F?id=12345"," 是差的",[111,632,633,635,637,638,641,642,645,646,649],{},[114,634,230],{},[611,636],{}," 用语义化路径,包含关键词。产品页 ",[29,639,640],{},"\u002Fproducts\u002F产品名",",文档页 ",[29,643,644],{},"\u002Fdocs\u002F功能名",",博客 ",[29,647,648],{},"\u002Fblog\u002F文章标题","。改 URL 要做 301 重定向,旧 URL 权重传给新 URL",[203,651,653],{"id":652},"_14-url-参数导致重复内容","14. URL 参数导致重复内容",[208,655,656,661,668],{},[111,657,658,660],{},[114,659,214],{},":同一内容是不是有多个 URL 版本(参数不同)",[111,662,663,665,667],{},[114,664,220],{},[383,666],{}," Frog 爬取,看有没有大量 URL 只是参数不同但内容相同。常见:排序参数、筛选参数、追踪参数(utm)",[111,669,670,672],{},[114,671,230],{},":对参数 URL 用 canonical 指向规范版。或者用 Google Search Console 的\"网址参数\"工具告诉 Google 哪些参数不影响内容。追踪参数(utm_source 等)最好在服务端处理,不要让搜索引擎索引带参数的版本",[203,674,676],{"id":675},"_15-重定向链过长","15. 重定向链过长",[208,678,679,686,691],{},[111,680,681,683,685],{},[114,682,214],{},[611,684],{}," 是不是经过多次重定向才到最终页",[111,687,688,690],{},[114,689,220],{},":用 Redirect Checker 工具,或者 Screaming Frog 看\"重定向链\"。超过 2 次跳转就是问题",[111,692,693,695],{},[114,694,230],{},":把重定向链改成直接跳转。常见原因:HTTP → HTTPS → www → 非 www → 新 URL,层层跳。改成 HTTP 直接 301 到最终 URL。重定向链过长会浪费抓取预算,权重传递也会衰减",[15,697,698],{"id":698},"怎么用这份清单",[11,700,701],{},"建议按顺序过一遍:先解决渲染问题(第一类),这是基础,不解决后面都白搭。再查收录(第二类),确保该收录的页面都收录了。然后是速度和结构化数据(URL 问题随时修)。",[11,703,704],{},"每类查一遍大概半天到一天。全站完整技术审计我们一般用 2-3 天。这份清单是自查版,自己能上手查。如果查出来问题多,或者改不动(比如 SPA 改 SSR 工程量大),再找专业团队。",[15,706,707],{"id":707},"总结",[11,709,710],{},"软件公司站最常踩的 15 个技术 SEO 问题:渲染(SPA 客户端渲染、JS 被屏、内容异步加载)、收录(robots 误屏、noindex 误用、canonical 错、孤立页)、速度(LCP 慢、JS 大、图片没优化)、结构化数据(没有、有但错)、URL(不语义化、参数重复、重定向链长)。工具用 Google Search Console、Screaming Frog、PageSpeed Insights 这三个就够自查。",[11,712,713],{},"查出来问题不知道怎么改,联系我们聊聊。",[15,715,716],{"id":716},"常见问题",[11,718,719],{},[114,720,721],{},"Q: 自查需要什么工具?",[11,723,724],{},"A: 三个就够:Google Search Console(免费,看收录和抓取)、Screaming Frog(免费版能爬 500 个 URL,够小站用)、PageSpeed Insights(免费,看速度)。专业诊断还会用 Ahrefs Site Audit 或 Sitebulb,但自查上面三个够用。",[11,726,727],{},[114,728,729],{},"Q: SPA 一定要改 SSR 吗?",[11,731,732],{},"A: 几乎一定要。Google 现在能执行 JS 渲染,但有延迟,且不是所有 JS 内容都能抓到。百度对 JS 渲染支持更差。SPA 不改 SSR,SEO 效果会打很大折扣。如果 SSR 改造工程量太大,退一步用预渲染(prerender)也比纯客户端渲染强。",[11,734,735],{},[114,736,737],{},"Q: 技术问题修了多久见效?",[11,739,740],{},"A: 渲染和收录问题修了,一般 2-4 周搜索引擎重新抓取后开始见效。速度和结构化数据是慢功夫,1-2 个月体现在排名上。URL 改动要做 301,权重传递需要 1-3 个月。",[11,742,743],{},[114,744,745],{},"Q: robots.txt 和 noindex 有什么区别?",[11,747,748],{},"A: robots.txt 是告诉搜索引擎别爬这个 URL(但其实搜索引擎可能还是会爬,只是不索引,且会阻止发现内链)。noindex 是允许爬,但不索引。一般用 noindex 控制索引,robots.txt 只用来屏掉真正不想被抓的资源(如后台、API)。",[11,750,751],{},[114,752,753],{},"Q: 结构化数据对排名有影响吗?",[11,755,756],{},"A: 不直接影响排名,但影响展示效果。标了 FAQ 会有展开式结果,标了 BreadcrumbList 会有面包屑,标了 SoftwareApplication 会有价格等信息展示。展示效果好,点击率高,间接提升排名。Google 官方说结构化数据不是排名因素,但做了比不做好。",{"title":27,"searchDepth":41,"depth":41,"links":758},[759,764,770,775,779,784,785,786],{"id":197,"depth":41,"text":198,"children":760},[761,762,763],{"id":205,"depth":47,"text":206},{"id":234,"depth":47,"text":235},{"id":266,"depth":47,"text":267},{"id":290,"depth":41,"text":291,"children":765},[766,767,768,769],{"id":297,"depth":47,"text":298},{"id":336,"depth":47,"text":337},{"id":366,"depth":47,"text":367},{"id":393,"depth":47,"text":394},{"id":416,"depth":41,"text":417,"children":771},[772,773,774],{"id":423,"depth":47,"text":424},{"id":454,"depth":47,"text":455},{"id":478,"depth":47,"text":479},{"id":506,"depth":41,"text":507,"children":776},[777,778],{"id":513,"depth":47,"text":514},{"id":572,"depth":47,"text":573},{"id":595,"depth":41,"text":596,"children":780},[781,782,783],{"id":602,"depth":47,"text":603},{"id":652,"depth":47,"text":653},{"id":675,"depth":47,"text":676},{"id":698,"depth":41,"text":698},{"id":707,"depth":41,"text":707},{"id":716,"depth":41,"text":716},"SEO","2026-01-28","软件公司网站常见的 15 个技术 SEO 问题,按渲染、收录、速度、结构化数据、URL 五类整理。每个写清楚查什么、怎么查、怎么修,照着这份清单逐条过一遍,基本覆盖主要技术坑。",{},"\u002Fblog\u002Fseo-technical-audit-checklist",{"title":189,"description":789},"blog\u002Fseo-technical-audit-checklist",[172,795,796,797],"SEO检查","网站诊断","软件公司","V-yKYGQTmQONKHOmvPibM6xelo1d8NRq5qCX0n4NaSo",{"id":800,"title":801,"author":6,"body":802,"canonical":171,"category":172,"cover":171,"date":881,"description":882,"draft":175,"extension":176,"keywords":171,"meta":883,"navigation":178,"noindex":175,"ogImage":171,"path":884,"seo":885,"seoDescription":171,"seoTitle":171,"stem":886,"tags":887,"updated":171,"__hash__":891},"blog\u002Fblog\u002Flazy-loading-placement.md","懒加载不是越多越好，首屏和折叠线要分开处理",{"type":8,"value":803,"toc":873},[804,810,813,816,819,822,825,831,835,838,845,849,852,855,858,861,864,867,870],[11,805,806,807,809],{},"懒加载不是越多越好。今年 1 月我们给一个文档站做首屏优化，把三张首屏图的 ",[29,808,502],{}," 去掉，LCP 从 2.9 秒降到 2.0 秒。同一个页面，代码只删了三个属性。",[15,811,812],{"id":812},"首屏一律不用懒加载",[11,814,815],{},"原理不复杂：懒加载让浏览器把图片下载推迟到布局计算之后，首屏图本来最该先下载，结果排在最后。移动端这一步的代价是 300 到 600 毫秒。",[11,817,818],{},"判断首屏别靠感觉。用 375×667 的视口截图，能看到的都算。注意边界会随设备变化，iPhone SE 和 iPhone 15 Pro Max 差了两屏，我们按最小视口来定\"必须立即加载\"的范围。",[15,820,821],{"id":821},"折叠线附近要提前加载",[11,823,824],{},"第二类错误是等进了视口才加载。用户往下滚 200 像素图片才开始下载，等待感很明显。",[11,826,827,828,830],{},"做法是 ",[29,829,502],{}," 加 IntersectionObserver 的 rootMargin，提前 300 到 500 像素开始加载。这个文档站的侧边目录有 12 张缩略图，原来滚到才加载，滚快了会看到空白。加 400 像素预载后，滚动过程里再没出现空位。",[15,832,834],{"id":833},"iframe-要单独处理","iframe 要单独处理",[11,836,837],{},"第三类错误是把视频、地图、客服 iframe 都设成 lazy。副作用是用户点击播放时才开始加载播放器，第一次点击要等 1 到 2 秒，这个延迟会被记进 INP。",[11,839,840,841,844],{},"做法是首屏 iframe 用 ",[29,842,843],{},"srcdoc"," 放一个静态封面，点击后再换 src。既省了首屏体积，又不让点击变慢。",[15,846,848],{"id":847},"和图片-cdn-的配合","和图片 CDN 的配合",[11,850,851],{},"用图片 CDN 的站要注意参数别打架。CDN 按 URL 生成不同尺寸，懒加载按视口决定何时请求，两边都配错会出现\"小图被放大\"或者\"下载了 2000 像素宽的图放进 300 像素的框\"。",[11,853,854],{},"我们的做法是让 CSS 和 HTML 的 sizes 声明对齐，再由 CDN 按 UA 和 DPR 返回合适尺寸。这个文档站改完后，移动端图片平均体积从 180KB 降到 62KB，首屏三张图的请求时间提前了 400 毫秒。",[15,856,857],{"id":857},"一个反例",[11,859,860],{},"我们也见过相反的站：所有图立即加载，一个文档页 40 张截图，首屏请求 6MB。这种站要做的是分页或者折叠，而不是调懒加载参数。真正的浪费不是\"懒加载太少\"，是\"内容一次性全给\"。",[11,862,863],{},"所以正确用法就三句：首屏立即加载，折叠线下提前加载，非内容型 iframe 延迟到交互。这三句能覆盖九成情况。",[15,865,866],{"id":866},"怎么验收",[11,868,869],{},"改完别只看 Lighthouse 分数，看网络面板里首屏图片的加载顺序和开始时间。首屏图的开始时间应该排在前三个请求里，如果不是，说明有别的东西在抢带宽，先解决抢的那个。",[11,871,872],{},"这个站我们改完复查了三次，第一次首屏图还是排在第 6 位，原因是字体 CSS 阻塞了 HTML 解析。把字体改成 preload 之后，顺序才真正提上来。",{"title":27,"searchDepth":41,"depth":41,"links":874},[875,876,877,878,879,880],{"id":812,"depth":41,"text":812},{"id":821,"depth":41,"text":821},{"id":833,"depth":41,"text":834},{"id":847,"depth":41,"text":848},{"id":857,"depth":41,"text":857},{"id":866,"depth":41,"text":866},"2026-01-30","删掉三张首屏图的 loading=\"lazy\"，LCP 从 2.9 秒降到 2.0 秒。首屏立即加载、折叠线下提前 400 像素预载、视频 iframe 等点击再加载，三句话覆盖九成情况。",{},"\u002Fblog\u002Flazy-loading-placement",{"title":801,"description":882},"blog\u002Flazy-loading-placement",[888,889,890],"懒加载","首屏优化","LCP","UriQnTMflLup-QaZVe4nVs8Od7HU_wt9n3MUoWOLdLA",1794088108822]