[{"data":1,"prerenderedAt":3808},["ShallowReactive",2],{"navigation_docs_en":3,"-en-guides-seo-checklist-nuxt":361,"-en-guides-seo-checklist-nuxt-surround":3803},[4,23,49,83,93,115,343,353],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":22},"Getting started","i-lucide-rocket","\u002Fen\u002Fgetting-started","en\u002F1.getting-started",[10,14,18],{"title":11,"path":12,"stem":13},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"ranklint init","\u002Fen\u002Fgetting-started\u002Finit","en\u002F1.getting-started\u002F3.init",false,{"title":24,"icon":25,"path":26,"stem":27,"children":28,"page":22},"Nuxt module","i-lucide-box","\u002Fen\u002Fmodule","en\u002F2.module",[29,33,37,41,45],{"title":30,"path":31,"stem":32},"Overview","\u002Fen\u002Fmodule\u002Foverview","en\u002F2.module\u002F1.overview",{"title":34,"path":35,"stem":36},"Sitemap","\u002Fen\u002Fmodule\u002Fsitemap","en\u002F2.module\u002F2.sitemap",{"title":38,"path":39,"stem":40},"Robots","\u002Fen\u002Fmodule\u002Frobots","en\u002F2.module\u002F3.robots",{"title":42,"path":43,"stem":44},"Composables","\u002Fen\u002Fmodule\u002Fcomposables","en\u002F2.module\u002F4.composables",{"title":46,"path":47,"stem":48},"DevTools","\u002Fen\u002Fmodule\u002Fdevtools","en\u002F2.module\u002F5.devtools",{"title":50,"icon":51,"path":52,"stem":53,"children":54,"page":22},"CLI","i-lucide-terminal","\u002Fen\u002Fcli","en\u002F3.cli",[55,59,63,67,71,75,79],{"title":56,"path":57,"stem":58},"ranklint audit","\u002Fen\u002Fcli\u002Faudit","en\u002F3.cli\u002F1.audit",{"title":60,"path":61,"stem":62},"Diff & CI","\u002Fen\u002Fcli\u002Fdiff-and-ci","en\u002F3.cli\u002F2.diff-and-ci",{"title":64,"path":65,"stem":66},"Production monitoring","\u002Fen\u002Fcli\u002Fmonitor","en\u002F3.cli\u002F3.monitor",{"title":68,"path":69,"stem":70},"Lighthouse","\u002Fen\u002Fcli\u002Flighthouse","en\u002F3.cli\u002F4.lighthouse",{"title":72,"path":73,"stem":74},"Zones (multi-app domains)","\u002Fen\u002Fcli\u002Fzones","en\u002F3.cli\u002F5.zones",{"title":76,"path":77,"stem":78},"Other commands","\u002Fen\u002Fcli\u002Fother-commands","en\u002F3.cli\u002F6.other-commands",{"title":80,"path":81,"stem":82},"Watch mode","\u002Fen\u002Fcli\u002Fwatch","en\u002F3.cli\u002F7.watch",{"title":84,"icon":85,"path":86,"stem":87,"children":88,"page":22},"Configuration","i-lucide-settings-2","\u002Fen\u002Fconfig","en\u002F4.config",[89],{"title":90,"path":91,"stem":92},"Reference","\u002Fen\u002Fconfig\u002Freference","en\u002F4.config\u002F1.reference",{"title":94,"icon":95,"path":96,"stem":97,"children":98,"page":22},"Advanced","i-lucide-wrench","\u002Fen\u002Fadvanced","en\u002F5.advanced",[99,103,107,111],{"title":100,"path":101,"stem":102},"Custom rules & presets","\u002Fen\u002Fadvanced\u002Fcustom-rules","en\u002F5.advanced\u002F1.custom-rules",{"title":104,"path":105,"stem":106},"Smart heuristics","\u002Fen\u002Fadvanced\u002Fheuristics","en\u002F5.advanced\u002F2.heuristics",{"title":108,"path":109,"stem":110},"Env variables","\u002Fen\u002Fadvanced\u002Fenv","en\u002F5.advanced\u002F3.env",{"title":112,"path":113,"stem":114},"Nuances & limitations","\u002Fen\u002Fadvanced\u002Fnuances","en\u002F5.advanced\u002F4.nuances",{"title":116,"icon":117,"path":118,"stem":119,"children":120},"Rules","i-lucide-list-checks","\u002Fen\u002Frules","en\u002F6.rules\u002Findex",[121,123,148,173,190,207,228,257,306,330],{"title":122,"path":118,"stem":119},"All rules",{"title":124,"path":125,"stem":126,"children":127,"page":22},"Headings","\u002Fen\u002Frules\u002Fheadings","en\u002F6.rules\u002Fheadings",[128,132,136,140,144],{"title":129,"path":130,"stem":131},"headings:h1-length","\u002Fen\u002Frules\u002Fheadings\u002Fheadings-h1-length","en\u002F6.rules\u002Fheadings\u002Fheadings-h1-length",{"title":133,"path":134,"stem":135},"headings:hierarchy","\u002Fen\u002Frules\u002Fheadings\u002Fheadings-hierarchy","en\u002F6.rules\u002Fheadings\u002Fheadings-hierarchy",{"title":137,"path":138,"stem":139},"headings:no-empty","\u002Fen\u002Frules\u002Fheadings\u002Fheadings-no-empty","en\u002F6.rules\u002Fheadings\u002Fheadings-no-empty",{"title":141,"path":142,"stem":143},"headings:single-h1","\u002Fen\u002Frules\u002Fheadings\u002Fheadings-single-h1","en\u002F6.rules\u002Fheadings\u002Fheadings-single-h1",{"title":145,"path":146,"stem":147},"headings:unique-h1","\u002Fen\u002Frules\u002Fheadings\u002Fheadings-unique-h1","en\u002F6.rules\u002Fheadings\u002Fheadings-unique-h1",{"title":149,"path":150,"stem":151,"children":152,"page":22},"Http","\u002Fen\u002Frules\u002Fhttp","en\u002F6.rules\u002Fhttp",[153,157,161,165,169],{"title":154,"path":155,"stem":156},"http:no-mixed-content","\u002Fen\u002Frules\u002Fhttp\u002Fhttp-no-mixed-content","en\u002F6.rules\u002Fhttp\u002Fhttp-no-mixed-content",{"title":158,"path":159,"stem":160},"http:no-soft-404","\u002Fen\u002Frules\u002Fhttp\u002Fhttp-no-soft-404","en\u002F6.rules\u002Fhttp\u002Fhttp-no-soft-404",{"title":162,"path":163,"stem":164},"http:ttfb-budget","\u002Fen\u002Frules\u002Fhttp\u002Fhttp-ttfb-budget","en\u002F6.rules\u002Fhttp\u002Fhttp-ttfb-budget",{"title":166,"path":167,"stem":168},"http:x-robots-consistent","\u002Fen\u002Frules\u002Fhttp\u002Fhttp-x-robots-consistent","en\u002F6.rules\u002Fhttp\u002Fhttp-x-robots-consistent",{"title":170,"path":171,"stem":172},"mobile:viewport","\u002Fen\u002Frules\u002Fhttp\u002Fmobile-viewport","en\u002F6.rules\u002Fhttp\u002Fmobile-viewport",{"title":174,"path":175,"stem":176,"children":177,"page":22},"I18n","\u002Fen\u002Frules\u002Fi18n","en\u002F6.rules\u002Fi18n",[178,182,186],{"title":179,"path":180,"stem":181},"hreflang:symmetric","\u002Fen\u002Frules\u002Fi18n\u002Fhreflang-symmetric","en\u002F6.rules\u002Fi18n\u002Fhreflang-symmetric",{"title":183,"path":184,"stem":185},"hreflang:valid-targets","\u002Fen\u002Frules\u002Fi18n\u002Fhreflang-valid-targets","en\u002F6.rules\u002Fi18n\u002Fhreflang-valid-targets",{"title":187,"path":188,"stem":189},"i18n:no-locale-leak","\u002Fen\u002Frules\u002Fi18n\u002Fi18n-no-locale-leak","en\u002F6.rules\u002Fi18n\u002Fi18n-no-locale-leak",{"title":191,"path":192,"stem":193,"children":194,"page":22},"Images","\u002Fen\u002Frules\u002Fimages","en\u002F6.rules\u002Fimages",[195,199,203],{"title":196,"path":197,"stem":198},"images:alt-required","\u002Fen\u002Frules\u002Fimages\u002Fimages-alt-required","en\u002F6.rules\u002Fimages\u002Fimages-alt-required",{"title":200,"path":201,"stem":202},"images:dimensions-required","\u002Fen\u002Frules\u002Fimages\u002Fimages-dimensions-required","en\u002F6.rules\u002Fimages\u002Fimages-dimensions-required",{"title":204,"path":205,"stem":206},"images:no-lazy-above-fold","\u002Fen\u002Frules\u002Fimages\u002Fimages-no-lazy-above-fold","en\u002F6.rules\u002Fimages\u002Fimages-no-lazy-above-fold",{"title":208,"path":209,"stem":210,"children":211,"page":22},"Indexability","\u002Fen\u002Frules\u002Findexability","en\u002F6.rules\u002Findexability",[212,218,224],{"title":213,"path":214,"stem":215,"children":216},"indexability:ssr-content","\u002Fen\u002Frules\u002Findexability\u002Findexability-ssr-content","en\u002F6.rules\u002Findexability\u002Findexability-ssr-content",[217],{"title":213,"path":214,"stem":215},{"title":219,"path":220,"stem":221,"children":222},"sitemap:no-noindex","\u002Fen\u002Frules\u002Findexability\u002Fsitemap-no-noindex","en\u002F6.rules\u002Findexability\u002Fsitemap-no-noindex",[223],{"title":219,"path":220,"stem":221},{"title":225,"path":226,"stem":227},"sitemap:reachable","\u002Fen\u002Frules\u002Findexability\u002Fsitemap-reachable","en\u002F6.rules\u002Findexability\u002Fsitemap-reachable",{"title":229,"path":230,"stem":231,"children":232,"page":22},"Links","\u002Fen\u002Frules\u002Flinks","en\u002F6.rules\u002Flinks",[233,237,241,245,249,253],{"title":234,"path":235,"stem":236},"links:no-broken","\u002Fen\u002Frules\u002Flinks\u002Flinks-no-broken","en\u002F6.rules\u002Flinks\u002Flinks-no-broken",{"title":238,"path":239,"stem":240},"links:no-orphans","\u002Fen\u002Frules\u002Flinks\u002Flinks-no-orphans","en\u002F6.rules\u002Flinks\u002Flinks-no-orphans",{"title":242,"path":243,"stem":244},"links:no-redirect-chain","\u002Fen\u002Frules\u002Flinks\u002Flinks-no-redirect-chain","en\u002F6.rules\u002Flinks\u002Flinks-no-redirect-chain",{"title":246,"path":247,"stem":248},"links:no-utm-internal","\u002Fen\u002Frules\u002Flinks\u002Flinks-no-utm-internal","en\u002F6.rules\u002Flinks\u002Flinks-no-utm-internal",{"title":250,"path":251,"stem":252},"links:permanent-redirects","\u002Fen\u002Frules\u002Flinks\u002Flinks-permanent-redirects","en\u002F6.rules\u002Flinks\u002Flinks-permanent-redirects",{"title":254,"path":255,"stem":256},"links:trailing-slash-consistent","\u002Fen\u002Frules\u002Flinks\u002Flinks-trailing-slash-consistent","en\u002F6.rules\u002Flinks\u002Flinks-trailing-slash-consistent",{"title":258,"path":259,"stem":260,"children":261,"page":22},"Meta","\u002Fen\u002Frules\u002Fmeta","en\u002F6.rules\u002Fmeta",[262,266,270,274,278,282,286,290,294,298,302],{"title":263,"path":264,"stem":265},"canonical:no-chain","\u002Fen\u002Frules\u002Fmeta\u002Fcanonical-no-chain","en\u002F6.rules\u002Fmeta\u002Fcanonical-no-chain",{"title":267,"path":268,"stem":269},"canonical:required","\u002Fen\u002Frules\u002Fmeta\u002Fcanonical-required","en\u002F6.rules\u002Fmeta\u002Fcanonical-required",{"title":271,"path":272,"stem":273},"canonical:valid","\u002Fen\u002Frules\u002Fmeta\u002Fcanonical-valid","en\u002F6.rules\u002Fmeta\u002Fcanonical-valid",{"title":275,"path":276,"stem":277},"meta:description-length","\u002Fen\u002Frules\u002Fmeta\u002Fmeta-description-length","en\u002F6.rules\u002Fmeta\u002Fmeta-description-length",{"title":279,"path":280,"stem":281},"meta:description-required","\u002Fen\u002Frules\u002Fmeta\u002Fmeta-description-required","en\u002F6.rules\u002Fmeta\u002Fmeta-description-required",{"title":283,"path":284,"stem":285},"meta:no-duplicate-description","\u002Fen\u002Frules\u002Fmeta\u002Fmeta-no-duplicate-description","en\u002F6.rules\u002Fmeta\u002Fmeta-no-duplicate-description",{"title":287,"path":288,"stem":289},"meta:no-duplicate-title","\u002Fen\u002Frules\u002Fmeta\u002Fmeta-no-duplicate-title","en\u002F6.rules\u002Fmeta\u002Fmeta-no-duplicate-title",{"title":291,"path":292,"stem":293},"meta:og-required","\u002Fen\u002Frules\u002Fmeta\u002Fmeta-og-required","en\u002F6.rules\u002Fmeta\u002Fmeta-og-required",{"title":295,"path":296,"stem":297},"meta:title-length","\u002Fen\u002Frules\u002Fmeta\u002Fmeta-title-length","en\u002F6.rules\u002Fmeta\u002Fmeta-title-length",{"title":299,"path":300,"stem":301},"meta:title-required","\u002Fen\u002Frules\u002Fmeta\u002Fmeta-title-required","en\u002F6.rules\u002Fmeta\u002Fmeta-title-required",{"title":303,"path":304,"stem":305},"meta:twitter-card","\u002Fen\u002Frules\u002Fmeta\u002Fmeta-twitter-card","en\u002F6.rules\u002Fmeta\u002Fmeta-twitter-card",{"title":38,"path":307,"stem":308,"children":309,"page":22},"\u002Fen\u002Frules\u002Frobots","en\u002F6.rules\u002Frobots",[310,314,318,322,326],{"title":311,"path":312,"stem":313},"robots:env-policy","\u002Fen\u002Frules\u002Frobots\u002Frobots-env-policy","en\u002F6.rules\u002Frobots\u002Frobots-env-policy",{"title":315,"path":316,"stem":317},"robots:expected-disallow","\u002Fen\u002Frules\u002Frobots\u002Frobots-expected-disallow","en\u002F6.rules\u002Frobots\u002Frobots-expected-disallow",{"title":319,"path":320,"stem":321},"robots:reachable","\u002Fen\u002Frules\u002Frobots\u002Frobots-reachable","en\u002F6.rules\u002Frobots\u002Frobots-reachable",{"title":323,"path":324,"stem":325},"robots:sitemap-declared","\u002Fen\u002Frules\u002Frobots\u002Frobots-sitemap-declared","en\u002F6.rules\u002Frobots\u002Frobots-sitemap-declared",{"title":327,"path":328,"stem":329},"robots:zone-not-blocked","\u002Fen\u002Frules\u002Frobots\u002Frobots-zone-not-blocked","en\u002F6.rules\u002Frobots\u002Frobots-zone-not-blocked",{"title":331,"path":332,"stem":333,"children":334,"page":22},"Structured Data","\u002Fen\u002Frules\u002Fstructured-data","en\u002F6.rules\u002Fstructured-data",[335,339],{"title":336,"path":337,"stem":338},"jsonld:parseable","\u002Fen\u002Frules\u002Fstructured-data\u002Fjsonld-parseable","en\u002F6.rules\u002Fstructured-data\u002Fjsonld-parseable",{"title":340,"path":341,"stem":342},"jsonld:valid-schema","\u002Fen\u002Frules\u002Fstructured-data\u002Fjsonld-valid-schema","en\u002F6.rules\u002Fstructured-data\u002Fjsonld-valid-schema",{"title":344,"icon":345,"path":346,"stem":347,"children":348,"page":22},"Guides","i-lucide-book-open","\u002Fen\u002Fguides","en\u002F7.guides",[349],{"title":350,"path":351,"stem":352},"SEO checklist for a Nuxt project","\u002Fen\u002Fguides\u002Fseo-checklist-nuxt","en\u002F7.guides\u002F1.seo-checklist-nuxt",{"title":354,"path":355,"stem":356,"children":357,"icon":360},"Changelog","\u002Fen\u002Fchangelog","en\u002F8.changelog\u002Findex",[358],{"title":359,"path":355,"stem":356},"ranklint changelog and release notes","i-lucide-history",{"id":362,"title":350,"body":363,"description":3797,"extension":3798,"links":3799,"meta":3800,"navigation":531,"path":351,"seo":3801,"stem":352,"__hash__":3802},"docs_en\u002Fen\u002F7.guides\u002F1.seo-checklist-nuxt.md",{"type":364,"value":365,"toc":3759},"minimark",[366,375,397,401,415,429,737,765,770,810,814,821,832,949,952,984,988,995,1001,1272,1275,1313,1316,1323,1344,1465,1468,1500,1504,1511,1532,1716,1839,1842,1862,1866,1869,1893,2163,2166,2180,2184,2204,2215,2713,2716,2736,2739,2749,2770,2981,2984,3016,3019,3036,3062,3254,3257,3277,3281,3297,3303,3411,3414,3434,3438,3441,3444,3617,3620,3658,3662,3665,3700,3730,3735,3738,3755],[367,368,369,370,374],"p",{},"Most SEO regressions in a Nuxt app are not strategy problems, they are code problems: a ",[371,372,373],"code",{},"noindex"," that survived a release, a canonical built from the wrong base URL, a heading tree that skips a level, a sitemap that still lists a deleted route. This checklist walks through twelve areas Google Search Central documents as technical requirements, shows the Nuxt 4 code for each one, and names the ranklint rules that fail the build when the code drifts.",[367,376,377,378,381,382,381,385,388,389,392,393,396],{},"Every snippet below uses APIs that ship with Nuxt 4, ",[371,379,380],{},"@nuxtjs\u002Fi18n",", ",[371,383,384],{},"@nuxt\u002Fimage",[371,386,387],{},"@nuxtjs\u002Frobots"," or the ",[371,390,391],{},"@ranklint\u002Fnuxt"," module itself. Rule ids link to the full reference in ",[394,395,122],"a",{"href":118},".",[398,399,208],"h2",{"id":400},"indexability",[367,402,403,404,407,408,410,411,414],{},"An indexable page has to answer three questions the same way: what the meta robots tag says, what the ",[371,405,406],{},"X-Robots-Tag"," header says, and what robots.txt allows. Google Search Central is explicit that a page blocked in robots.txt cannot be read, so a ",[371,409,373],{}," inside it is never seen, and the URL may still appear in results without a snippet. Yandex reads the same directives but also honours ",[371,412,413],{},"Clean-param",", which Googlebot ignores, so a robots.txt shared between both engines should keep that directive separate from the crawl rules that matter to Google.",[367,416,417,418,421,422,425,426,396],{},"The second half of indexability is server rendering. If the main content only appears after hydration, the first pass of the crawler sees an empty shell. In Nuxt that usually means a page with ",[371,419,420],{},"ssr: false"," or a data fetch that happens in ",[371,423,424],{},"onMounted"," instead of ",[371,427,428],{},"useAsyncData",[430,431,436],"pre",{"className":432,"code":433,"language":434,"meta":435,"style":435},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F app\u002Fpages\u002Fadmin\u002F[id].vue\nuseHead({\n  meta: [{ name: 'robots', content: 'noindex, follow' }],\n})\n\n\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['@nuxtjs\u002Frobots', '@ranklint\u002Fnuxt'],\n  robots: {\n    disallow: ['\u002Fadmin', '\u002Fcheckout'],\n    sitemap: ['https:\u002F\u002Fexample.com\u002Fsitemap.xml'],\n  },\n  ranklint: {\n    site: { url: 'https:\u002F\u002Fexample.com', name: 'Example' },\n    robots: { mode: 'external' },\n  },\n})\n","ts","",[371,437,438,447,462,517,526,533,539,556,584,595,625,646,652,662,701,725,730],{"__ignoreMap":435},[439,440,443],"span",{"class":441,"line":442},"line",1,[439,444,446],{"class":445},"sHwdD","\u002F\u002F app\u002Fpages\u002Fadmin\u002F[id].vue\n",[439,448,450,454,458],{"class":441,"line":449},2,[439,451,453],{"class":452},"s2Zo4","useHead",[439,455,457],{"class":456},"sTEyZ","(",[439,459,461],{"class":460},"sMK4o","{\n",[439,463,465,469,472,475,478,481,483,486,490,493,496,499,501,503,506,508,511,514],{"class":441,"line":464},3,[439,466,468],{"class":467},"swJcz","  meta",[439,470,471],{"class":460},":",[439,473,474],{"class":456}," [",[439,476,477],{"class":460},"{",[439,479,480],{"class":467}," name",[439,482,471],{"class":460},[439,484,485],{"class":460}," '",[439,487,489],{"class":488},"sfazB","robots",[439,491,492],{"class":460},"'",[439,494,495],{"class":460},",",[439,497,498],{"class":467}," content",[439,500,471],{"class":460},[439,502,485],{"class":460},[439,504,505],{"class":488},"noindex, follow",[439,507,492],{"class":460},[439,509,510],{"class":460}," }",[439,512,513],{"class":456},"]",[439,515,516],{"class":460},",\n",[439,518,520,523],{"class":441,"line":519},4,[439,521,522],{"class":460},"}",[439,524,525],{"class":456},")\n",[439,527,529],{"class":441,"line":528},5,[439,530,532],{"emptyLinePlaceholder":531},true,"\n",[439,534,536],{"class":441,"line":535},6,[439,537,538],{"class":445},"\u002F\u002F nuxt.config.ts\n",[439,540,542,546,549,552,554],{"class":441,"line":541},7,[439,543,545],{"class":544},"s7zQu","export",[439,547,548],{"class":544}," default",[439,550,551],{"class":452}," defineNuxtConfig",[439,553,457],{"class":456},[439,555,461],{"class":460},[439,557,559,562,564,566,568,570,572,574,576,578,580,582],{"class":441,"line":558},8,[439,560,561],{"class":467},"  modules",[439,563,471],{"class":460},[439,565,474],{"class":456},[439,567,492],{"class":460},[439,569,387],{"class":488},[439,571,492],{"class":460},[439,573,495],{"class":460},[439,575,485],{"class":460},[439,577,391],{"class":488},[439,579,492],{"class":460},[439,581,513],{"class":456},[439,583,516],{"class":460},[439,585,587,590,592],{"class":441,"line":586},9,[439,588,589],{"class":467},"  robots",[439,591,471],{"class":460},[439,593,594],{"class":460}," {\n",[439,596,598,601,603,605,607,610,612,614,616,619,621,623],{"class":441,"line":597},10,[439,599,600],{"class":467},"    disallow",[439,602,471],{"class":460},[439,604,474],{"class":456},[439,606,492],{"class":460},[439,608,609],{"class":488},"\u002Fadmin",[439,611,492],{"class":460},[439,613,495],{"class":460},[439,615,485],{"class":460},[439,617,618],{"class":488},"\u002Fcheckout",[439,620,492],{"class":460},[439,622,513],{"class":456},[439,624,516],{"class":460},[439,626,628,631,633,635,637,640,642,644],{"class":441,"line":627},11,[439,629,630],{"class":467},"    sitemap",[439,632,471],{"class":460},[439,634,474],{"class":456},[439,636,492],{"class":460},[439,638,639],{"class":488},"https:\u002F\u002Fexample.com\u002Fsitemap.xml",[439,641,492],{"class":460},[439,643,513],{"class":456},[439,645,516],{"class":460},[439,647,649],{"class":441,"line":648},12,[439,650,651],{"class":460},"  },\n",[439,653,655,658,660],{"class":441,"line":654},13,[439,656,657],{"class":467},"  ranklint",[439,659,471],{"class":460},[439,661,594],{"class":460},[439,663,665,668,670,673,676,678,680,683,685,687,689,691,693,696,698],{"class":441,"line":664},14,[439,666,667],{"class":467},"    site",[439,669,471],{"class":460},[439,671,672],{"class":460}," {",[439,674,675],{"class":467}," url",[439,677,471],{"class":460},[439,679,485],{"class":460},[439,681,682],{"class":488},"https:\u002F\u002Fexample.com",[439,684,492],{"class":460},[439,686,495],{"class":460},[439,688,480],{"class":467},[439,690,471],{"class":460},[439,692,485],{"class":460},[439,694,695],{"class":488},"Example",[439,697,492],{"class":460},[439,699,700],{"class":460}," },\n",[439,702,704,707,709,711,714,716,718,721,723],{"class":441,"line":703},15,[439,705,706],{"class":467},"    robots",[439,708,471],{"class":460},[439,710,672],{"class":460},[439,712,713],{"class":467}," mode",[439,715,471],{"class":460},[439,717,485],{"class":460},[439,719,720],{"class":488},"external",[439,722,492],{"class":460},[439,724,700],{"class":460},[439,726,728],{"class":441,"line":727},16,[439,729,651],{"class":460},[439,731,733,735],{"class":441,"line":732},17,[439,734,522],{"class":460},[439,736,525],{"class":456},[367,738,739,740,743,744,746,747,749,750,753,754,757,758,760,761,764],{},"Only one module may own ",[371,741,742],{},"\u002Frobots.txt",". With ",[371,745,387],{}," in the stack it writes the file, so ",[371,748,391],{}," runs with ",[371,751,752],{},"robots: { mode: 'external' }"," (or ",[371,755,756],{},"robots: false",") and does not register a competing route handler. The other way round works too: drop ",[371,759,387],{},", keep the default ",[371,762,763],{},"mode: 'owner'",", and the ranklint module serves an environment-aware robots.txt that closes non-production hosts and declares the sitemap.",[766,767,769],"h3",{"id":768},"how-ranklint-checks-this","How ranklint checks this",[771,772,773,780,786,792,798,804],"ul",{},[774,775,776],"li",{},[394,777,778],{"href":214},[371,779,213],{},[774,781,782],{},[394,783,784],{"href":167},[371,785,166],{},[774,787,788],{},[394,789,790],{"href":312},[371,791,311],{},[774,793,794],{},[394,795,796],{"href":328},[371,797,327],{},[774,799,800],{},[394,801,802],{"href":316},[371,803,315],{},[774,805,806],{},[394,807,808],{"href":220},[371,809,219],{},[398,811,813],{"id":812},"canonical-and-duplicates","Canonical and duplicates",[367,815,816,817,820],{},"Google treats ",[371,818,819],{},"rel=canonical"," as a strong hint, not a command, and picks the canonical URL itself when the signals disagree. The practical rule from Search Central: every indexable page declares a self-referencing absolute canonical, and duplicates point at the version you actually want ranked. Yandex reacts to the same tag but converges more slowly, which makes a stable canonical even more valuable on large catalogues.",[367,822,823,824,827,828,831],{},"Two failure modes dominate in Nuxt projects. The first is a relative or origin-less canonical built from ",[371,825,826],{},"useRoute().fullPath"," alone. The second is a canonical chain: page A points to B, B points to C. Build the value from ",[371,829,830],{},"useRequestURL()"," so the origin is correct on localhost, on preview deployments and in production.",[430,833,835],{"className":432,"code":834,"language":434,"meta":435,"style":435},"\u002F\u002F app\u002Fpages\u002Fproducts\u002F[slug].vue\nconst url = useRequestURL()\nconst canonical = `${url.origin}${url.pathname}`\n\nuseHead({\n  link: [{ rel: 'canonical', href: canonical }],\n})\n",[371,836,837,842,860,893,897,905,943],{"__ignoreMap":435},[439,838,839],{"class":441,"line":442},[439,840,841],{"class":445},"\u002F\u002F app\u002Fpages\u002Fproducts\u002F[slug].vue\n",[439,843,844,848,851,854,857],{"class":441,"line":449},[439,845,847],{"class":846},"spNyl","const",[439,849,850],{"class":456}," url ",[439,852,853],{"class":460},"=",[439,855,856],{"class":452}," useRequestURL",[439,858,859],{"class":456},"()\n",[439,861,862,864,867,869,872,875,877,880,883,885,887,890],{"class":441,"line":464},[439,863,847],{"class":846},[439,865,866],{"class":456}," canonical ",[439,868,853],{"class":460},[439,870,871],{"class":460}," `${",[439,873,874],{"class":456},"url",[439,876,396],{"class":460},[439,878,879],{"class":456},"origin",[439,881,882],{"class":460},"}${",[439,884,874],{"class":456},[439,886,396],{"class":460},[439,888,889],{"class":456},"pathname",[439,891,892],{"class":460},"}`\n",[439,894,895],{"class":441,"line":519},[439,896,532],{"emptyLinePlaceholder":531},[439,898,899,901,903],{"class":441,"line":528},[439,900,453],{"class":452},[439,902,457],{"class":456},[439,904,461],{"class":460},[439,906,907,910,912,914,916,919,921,923,926,928,930,933,935,937,939,941],{"class":441,"line":535},[439,908,909],{"class":467},"  link",[439,911,471],{"class":460},[439,913,474],{"class":456},[439,915,477],{"class":460},[439,917,918],{"class":467}," rel",[439,920,471],{"class":460},[439,922,485],{"class":460},[439,924,925],{"class":488},"canonical",[439,927,492],{"class":460},[439,929,495],{"class":460},[439,931,932],{"class":467}," href",[439,934,471],{"class":460},[439,936,866],{"class":456},[439,938,522],{"class":460},[439,940,513],{"class":456},[439,942,516],{"class":460},[439,944,945,947],{"class":441,"line":541},[439,946,522],{"class":460},[439,948,525],{"class":456},[766,950,769],{"id":951},"how-ranklint-checks-this-1",[771,953,954,960,966,972,978],{},[774,955,956],{},[394,957,958],{"href":268},[371,959,267],{},[774,961,962],{},[394,963,964],{"href":272},[371,965,271],{},[774,967,968],{},[394,969,970],{"href":264},[371,971,263],{},[774,973,974],{},[394,975,976],{"href":288},[371,977,287],{},[774,979,980],{},[394,981,982],{"href":284},[371,983,283],{},[398,985,987],{"id":986},"title-and-description","Title and description",[367,989,990,991,994],{},"Search Central asks for a unique, descriptive ",[371,992,993],{},"\u003Ctitle>"," per page and a meta description that summarises the page rather than repeating the title. Neither is a ranking lever on its own, but both control the snippet, and a missing description means Google writes one from the page body. Open Graph and Twitter tags are not search signals at all, they decide what a shared link looks like in chat apps and social feeds, which is why they belong in the same block of code.",[367,996,997,1000],{},[371,998,999],{},"useSeoMeta"," is the flat, typed way to write all of that in Nuxt 4. Keep the title near 30 to 60 characters and the description near 70 to 160, which are the defaults ranklint ships with.",[430,1002,1004],{"className":432,"code":1003,"language":434,"meta":435,"style":435},"\u002F\u002F app\u002Fpages\u002Fproducts\u002F[slug].vue\nconst route = useRoute()\nconst { data: product } = await useAsyncData(() => $fetch(`\u002Fapi\u002Fproducts\u002F${route.params.slug}`))\n\nuseSeoMeta({\n  title: () => `${product.value?.name} price and specs`,\n  description: () => product.value?.summary,\n  ogTitle: () => product.value?.name,\n  ogDescription: () => product.value?.summary,\n  ogImage: () => product.value?.image,\n  ogType: 'website',\n  twitterCard: 'summary_large_image',\n})\n",[371,1005,1006,1010,1024,1090,1094,1102,1139,1164,1187,1210,1234,1250,1266],{"__ignoreMap":435},[439,1007,1008],{"class":441,"line":442},[439,1009,841],{"class":445},[439,1011,1012,1014,1017,1019,1022],{"class":441,"line":449},[439,1013,847],{"class":846},[439,1015,1016],{"class":456}," route ",[439,1018,853],{"class":460},[439,1020,1021],{"class":452}," useRoute",[439,1023,859],{"class":456},[439,1025,1026,1028,1030,1033,1035,1038,1040,1043,1046,1049,1051,1054,1057,1060,1062,1065,1068,1071,1074,1076,1079,1081,1084,1087],{"class":441,"line":464},[439,1027,847],{"class":846},[439,1029,672],{"class":460},[439,1031,1032],{"class":467}," data",[439,1034,471],{"class":460},[439,1036,1037],{"class":456}," product ",[439,1039,522],{"class":460},[439,1041,1042],{"class":460}," =",[439,1044,1045],{"class":544}," await",[439,1047,1048],{"class":452}," useAsyncData",[439,1050,457],{"class":456},[439,1052,1053],{"class":460},"()",[439,1055,1056],{"class":846}," =>",[439,1058,1059],{"class":452}," $fetch",[439,1061,457],{"class":456},[439,1063,1064],{"class":460},"`",[439,1066,1067],{"class":488},"\u002Fapi\u002Fproducts\u002F",[439,1069,1070],{"class":460},"${",[439,1072,1073],{"class":456},"route",[439,1075,396],{"class":460},[439,1077,1078],{"class":456},"params",[439,1080,396],{"class":460},[439,1082,1083],{"class":456},"slug",[439,1085,1086],{"class":460},"}`",[439,1088,1089],{"class":456},"))\n",[439,1091,1092],{"class":441,"line":519},[439,1093,532],{"emptyLinePlaceholder":531},[439,1095,1096,1098,1100],{"class":441,"line":528},[439,1097,999],{"class":452},[439,1099,457],{"class":456},[439,1101,461],{"class":460},[439,1103,1104,1107,1109,1112,1114,1116,1119,1121,1124,1127,1130,1132,1135,1137],{"class":441,"line":535},[439,1105,1106],{"class":452},"  title",[439,1108,471],{"class":460},[439,1110,1111],{"class":460}," ()",[439,1113,1056],{"class":846},[439,1115,871],{"class":460},[439,1117,1118],{"class":456},"product",[439,1120,396],{"class":460},[439,1122,1123],{"class":456},"value",[439,1125,1126],{"class":460},"?.",[439,1128,1129],{"class":456},"name",[439,1131,522],{"class":460},[439,1133,1134],{"class":488}," price and specs",[439,1136,1064],{"class":460},[439,1138,516],{"class":460},[439,1140,1141,1144,1146,1148,1150,1153,1155,1157,1159,1162],{"class":441,"line":541},[439,1142,1143],{"class":452},"  description",[439,1145,471],{"class":460},[439,1147,1111],{"class":460},[439,1149,1056],{"class":846},[439,1151,1152],{"class":456}," product",[439,1154,396],{"class":460},[439,1156,1123],{"class":456},[439,1158,1126],{"class":460},[439,1160,1161],{"class":456},"summary",[439,1163,516],{"class":460},[439,1165,1166,1169,1171,1173,1175,1177,1179,1181,1183,1185],{"class":441,"line":558},[439,1167,1168],{"class":452},"  ogTitle",[439,1170,471],{"class":460},[439,1172,1111],{"class":460},[439,1174,1056],{"class":846},[439,1176,1152],{"class":456},[439,1178,396],{"class":460},[439,1180,1123],{"class":456},[439,1182,1126],{"class":460},[439,1184,1129],{"class":456},[439,1186,516],{"class":460},[439,1188,1189,1192,1194,1196,1198,1200,1202,1204,1206,1208],{"class":441,"line":586},[439,1190,1191],{"class":452},"  ogDescription",[439,1193,471],{"class":460},[439,1195,1111],{"class":460},[439,1197,1056],{"class":846},[439,1199,1152],{"class":456},[439,1201,396],{"class":460},[439,1203,1123],{"class":456},[439,1205,1126],{"class":460},[439,1207,1161],{"class":456},[439,1209,516],{"class":460},[439,1211,1212,1215,1217,1219,1221,1223,1225,1227,1229,1232],{"class":441,"line":597},[439,1213,1214],{"class":452},"  ogImage",[439,1216,471],{"class":460},[439,1218,1111],{"class":460},[439,1220,1056],{"class":846},[439,1222,1152],{"class":456},[439,1224,396],{"class":460},[439,1226,1123],{"class":456},[439,1228,1126],{"class":460},[439,1230,1231],{"class":456},"image",[439,1233,516],{"class":460},[439,1235,1236,1239,1241,1243,1246,1248],{"class":441,"line":627},[439,1237,1238],{"class":467},"  ogType",[439,1240,471],{"class":460},[439,1242,485],{"class":460},[439,1244,1245],{"class":488},"website",[439,1247,492],{"class":460},[439,1249,516],{"class":460},[439,1251,1252,1255,1257,1259,1262,1264],{"class":441,"line":648},[439,1253,1254],{"class":467},"  twitterCard",[439,1256,471],{"class":460},[439,1258,485],{"class":460},[439,1260,1261],{"class":488},"summary_large_image",[439,1263,492],{"class":460},[439,1265,516],{"class":460},[439,1267,1268,1270],{"class":441,"line":654},[439,1269,522],{"class":460},[439,1271,525],{"class":456},[766,1273,769],{"id":1274},"how-ranklint-checks-this-2",[771,1276,1277,1283,1289,1295,1301,1307],{},[774,1278,1279],{},[394,1280,1281],{"href":300},[371,1282,299],{},[774,1284,1285],{},[394,1286,1287],{"href":296},[371,1288,295],{},[774,1290,1291],{},[394,1292,1293],{"href":280},[371,1294,279],{},[774,1296,1297],{},[394,1298,1299],{"href":276},[371,1300,275],{},[774,1302,1303],{},[394,1304,1305],{"href":292},[371,1306,291],{},[774,1308,1309],{},[394,1310,1311],{"href":304},[371,1312,303],{},[398,1314,124],{"id":1315},"headings",[367,1317,1318,1319,1322],{},"Google Search Central describes headings as a way to express the structure of a document, not as a styling tool. One ",[371,1320,1321],{},"h1"," per page, no skipped levels, no empty heading elements left behind by a component that renders a title slot conditionally. Screen readers use the same tree, so the accessibility win comes for free.",[367,1324,1325,1326,1328,1329,1331,1332,1334,1335,1338,1339,1341,1342,396],{},"The Nuxt-specific trap is layouts. A layout that renders the site name inside an ",[371,1327,1321],{}," plus a page that renders its own ",[371,1330,1321],{}," produces two of them on every route, and duplicate ",[371,1333,1321],{}," text across the whole site. Keep the layout on ",[371,1336,1337],{},"div"," or ",[371,1340,367],{},", and let the page own the single ",[371,1343,1321],{},[430,1345,1349],{"className":1346,"code":1347,"language":1348,"meta":435,"style":435},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C!-- app\u002Fpages\u002Fproducts\u002F[slug].vue -->\n\u003Ctemplate>\n  \u003Carticle>\n    \u003Ch1>{{ product.name }}\u003C\u002Fh1>\n    \u003Ch2>Specifications\u003C\u002Fh2>\n    \u003Ch3>Dimensions\u003C\u002Fh3>\n    \u003Ch2>Reviews\u003C\u002Fh2>\n  \u003C\u002Farticle>\n\u003C\u002Ftemplate>\n","vue",[371,1350,1351,1356,1367,1377,1397,1414,1431,1448,1457],{"__ignoreMap":435},[439,1352,1353],{"class":441,"line":442},[439,1354,1355],{"class":445},"\u003C!-- app\u002Fpages\u002Fproducts\u002F[slug].vue -->\n",[439,1357,1358,1361,1364],{"class":441,"line":449},[439,1359,1360],{"class":460},"\u003C",[439,1362,1363],{"class":467},"template",[439,1365,1366],{"class":460},">\n",[439,1368,1369,1372,1375],{"class":441,"line":464},[439,1370,1371],{"class":460},"  \u003C",[439,1373,1374],{"class":467},"article",[439,1376,1366],{"class":460},[439,1378,1379,1382,1384,1387,1390,1393,1395],{"class":441,"line":519},[439,1380,1381],{"class":460},"    \u003C",[439,1383,1321],{"class":467},[439,1385,1386],{"class":460},">",[439,1388,1389],{"class":456},"{{ product.name }}",[439,1391,1392],{"class":460},"\u003C\u002F",[439,1394,1321],{"class":467},[439,1396,1366],{"class":460},[439,1398,1399,1401,1403,1405,1408,1410,1412],{"class":441,"line":528},[439,1400,1381],{"class":460},[439,1402,398],{"class":467},[439,1404,1386],{"class":460},[439,1406,1407],{"class":456},"Specifications",[439,1409,1392],{"class":460},[439,1411,398],{"class":467},[439,1413,1366],{"class":460},[439,1415,1416,1418,1420,1422,1425,1427,1429],{"class":441,"line":535},[439,1417,1381],{"class":460},[439,1419,766],{"class":467},[439,1421,1386],{"class":460},[439,1423,1424],{"class":456},"Dimensions",[439,1426,1392],{"class":460},[439,1428,766],{"class":467},[439,1430,1366],{"class":460},[439,1432,1433,1435,1437,1439,1442,1444,1446],{"class":441,"line":541},[439,1434,1381],{"class":460},[439,1436,398],{"class":467},[439,1438,1386],{"class":460},[439,1440,1441],{"class":456},"Reviews",[439,1443,1392],{"class":460},[439,1445,398],{"class":467},[439,1447,1366],{"class":460},[439,1449,1450,1453,1455],{"class":441,"line":558},[439,1451,1452],{"class":460},"  \u003C\u002F",[439,1454,1374],{"class":467},[439,1456,1366],{"class":460},[439,1458,1459,1461,1463],{"class":441,"line":586},[439,1460,1392],{"class":460},[439,1462,1363],{"class":467},[439,1464,1366],{"class":460},[766,1466,769],{"id":1467},"how-ranklint-checks-this-3",[771,1469,1470,1476,1482,1488,1494],{},[774,1471,1472],{},[394,1473,1474],{"href":142},[371,1475,141],{},[774,1477,1478],{},[394,1479,1480],{"href":130},[371,1481,129],{},[774,1483,1484],{},[394,1485,1486],{"href":134},[371,1487,133],{},[774,1489,1490],{},[394,1491,1492],{"href":138},[371,1493,137],{},[774,1495,1496],{},[394,1497,1498],{"href":146},[371,1499,145],{},[398,1501,1503],{"id":1502},"hreflang-and-i18n","hreflang and i18n",[367,1505,1506,1507,1510],{},"The hreflang documentation on Search Central states one hard requirement: the annotations must be reciprocal. If the English page lists the German one, the German page has to list the English one back, and each set should include an ",[371,1508,1509],{},"x-default"," for the language selector or the fallback locale. Broken reciprocity is silently ignored, so the tags look present in view-source while doing nothing.",[367,1512,1513,1514,1516,1517,1520,1521,1524,1525,1527,1528,1531],{},"In Nuxt, ",[371,1515,380],{}," generates the whole set from the locale config when each locale carries a ",[371,1518,1519],{},"language"," tag in BCP 47 form and ",[371,1522,1523],{},"baseUrl"," is absolute. The composable returns a ref, so feed it into ",[371,1526,453],{}," as a getter: unwrapping ",[371,1529,1530],{},".value"," once in setup freezes the annotations on the first rendered route.",[430,1533,1535],{"className":432,"code":1534,"language":434,"meta":435,"style":435},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['@nuxtjs\u002Fi18n'],\n  i18n: {\n    baseUrl: 'https:\u002F\u002Fexample.com',\n    defaultLocale: 'en',\n    strategy: 'prefix_except_default',\n    locales: [\n      { code: 'en', language: 'en-US' },\n      { code: 'de', language: 'de-DE' },\n    ],\n  },\n})\n",[371,1536,1537,1541,1553,1571,1580,1595,1611,1627,1637,1669,1699,1706,1710],{"__ignoreMap":435},[439,1538,1539],{"class":441,"line":442},[439,1540,538],{"class":445},[439,1542,1543,1545,1547,1549,1551],{"class":441,"line":449},[439,1544,545],{"class":544},[439,1546,548],{"class":544},[439,1548,551],{"class":452},[439,1550,457],{"class":456},[439,1552,461],{"class":460},[439,1554,1555,1557,1559,1561,1563,1565,1567,1569],{"class":441,"line":464},[439,1556,561],{"class":467},[439,1558,471],{"class":460},[439,1560,474],{"class":456},[439,1562,492],{"class":460},[439,1564,380],{"class":488},[439,1566,492],{"class":460},[439,1568,513],{"class":456},[439,1570,516],{"class":460},[439,1572,1573,1576,1578],{"class":441,"line":519},[439,1574,1575],{"class":467},"  i18n",[439,1577,471],{"class":460},[439,1579,594],{"class":460},[439,1581,1582,1585,1587,1589,1591,1593],{"class":441,"line":528},[439,1583,1584],{"class":467},"    baseUrl",[439,1586,471],{"class":460},[439,1588,485],{"class":460},[439,1590,682],{"class":488},[439,1592,492],{"class":460},[439,1594,516],{"class":460},[439,1596,1597,1600,1602,1604,1607,1609],{"class":441,"line":535},[439,1598,1599],{"class":467},"    defaultLocale",[439,1601,471],{"class":460},[439,1603,485],{"class":460},[439,1605,1606],{"class":488},"en",[439,1608,492],{"class":460},[439,1610,516],{"class":460},[439,1612,1613,1616,1618,1620,1623,1625],{"class":441,"line":541},[439,1614,1615],{"class":467},"    strategy",[439,1617,471],{"class":460},[439,1619,485],{"class":460},[439,1621,1622],{"class":488},"prefix_except_default",[439,1624,492],{"class":460},[439,1626,516],{"class":460},[439,1628,1629,1632,1634],{"class":441,"line":558},[439,1630,1631],{"class":467},"    locales",[439,1633,471],{"class":460},[439,1635,1636],{"class":456}," [\n",[439,1638,1639,1642,1645,1647,1649,1651,1653,1655,1658,1660,1662,1665,1667],{"class":441,"line":586},[439,1640,1641],{"class":460},"      {",[439,1643,1644],{"class":467}," code",[439,1646,471],{"class":460},[439,1648,485],{"class":460},[439,1650,1606],{"class":488},[439,1652,492],{"class":460},[439,1654,495],{"class":460},[439,1656,1657],{"class":467}," language",[439,1659,471],{"class":460},[439,1661,485],{"class":460},[439,1663,1664],{"class":488},"en-US",[439,1666,492],{"class":460},[439,1668,700],{"class":460},[439,1670,1671,1673,1675,1677,1679,1682,1684,1686,1688,1690,1692,1695,1697],{"class":441,"line":597},[439,1672,1641],{"class":460},[439,1674,1644],{"class":467},[439,1676,471],{"class":460},[439,1678,485],{"class":460},[439,1680,1681],{"class":488},"de",[439,1683,492],{"class":460},[439,1685,495],{"class":460},[439,1687,1657],{"class":467},[439,1689,471],{"class":460},[439,1691,485],{"class":460},[439,1693,1694],{"class":488},"de-DE",[439,1696,492],{"class":460},[439,1698,700],{"class":460},[439,1700,1701,1704],{"class":441,"line":627},[439,1702,1703],{"class":456},"    ]",[439,1705,516],{"class":460},[439,1707,1708],{"class":441,"line":648},[439,1709,651],{"class":460},[439,1711,1712,1714],{"class":441,"line":654},[439,1713,522],{"class":460},[439,1715,525],{"class":456},[430,1717,1719],{"className":432,"code":1718,"language":434,"meta":435,"style":435},"\u002F\u002F app\u002Fapp.vue\nconst head = useLocaleHead({ seo: true })\n\nuseHead(() => ({\n  htmlAttrs: head.value.htmlAttrs,\n  link: head.value.link,\n  meta: head.value.meta,\n}))\n",[371,1720,1721,1726,1755,1759,1774,1795,1814,1833],{"__ignoreMap":435},[439,1722,1723],{"class":441,"line":442},[439,1724,1725],{"class":445},"\u002F\u002F app\u002Fapp.vue\n",[439,1727,1728,1730,1733,1735,1738,1740,1742,1745,1747,1751,1753],{"class":441,"line":449},[439,1729,847],{"class":846},[439,1731,1732],{"class":456}," head ",[439,1734,853],{"class":460},[439,1736,1737],{"class":452}," useLocaleHead",[439,1739,457],{"class":456},[439,1741,477],{"class":460},[439,1743,1744],{"class":467}," seo",[439,1746,471],{"class":460},[439,1748,1750],{"class":1749},"sfNiH"," true",[439,1752,510],{"class":460},[439,1754,525],{"class":456},[439,1756,1757],{"class":441,"line":464},[439,1758,532],{"emptyLinePlaceholder":531},[439,1760,1761,1763,1765,1767,1769,1772],{"class":441,"line":519},[439,1762,453],{"class":452},[439,1764,457],{"class":456},[439,1766,1053],{"class":460},[439,1768,1056],{"class":846},[439,1770,1771],{"class":456}," (",[439,1773,461],{"class":460},[439,1775,1776,1779,1781,1784,1786,1788,1790,1793],{"class":441,"line":528},[439,1777,1778],{"class":467},"  htmlAttrs",[439,1780,471],{"class":460},[439,1782,1783],{"class":456}," head",[439,1785,396],{"class":460},[439,1787,1123],{"class":456},[439,1789,396],{"class":460},[439,1791,1792],{"class":456},"htmlAttrs",[439,1794,516],{"class":460},[439,1796,1797,1799,1801,1803,1805,1807,1809,1812],{"class":441,"line":535},[439,1798,909],{"class":467},[439,1800,471],{"class":460},[439,1802,1783],{"class":456},[439,1804,396],{"class":460},[439,1806,1123],{"class":456},[439,1808,396],{"class":460},[439,1810,1811],{"class":456},"link",[439,1813,516],{"class":460},[439,1815,1816,1818,1820,1822,1824,1826,1828,1831],{"class":441,"line":541},[439,1817,468],{"class":467},[439,1819,471],{"class":460},[439,1821,1783],{"class":456},[439,1823,396],{"class":460},[439,1825,1123],{"class":456},[439,1827,396],{"class":460},[439,1829,1830],{"class":456},"meta",[439,1832,516],{"class":460},[439,1834,1835,1837],{"class":441,"line":558},[439,1836,522],{"class":460},[439,1838,1089],{"class":456},[766,1840,769],{"id":1841},"how-ranklint-checks-this-4",[771,1843,1844,1850,1856],{},[774,1845,1846],{},[394,1847,1848],{"href":180},[371,1849,179],{},[774,1851,1852],{},[394,1853,1854],{"href":184},[371,1855,183],{},[774,1857,1858],{},[394,1859,1860],{"href":188},[371,1861,187],{},[398,1863,1865],{"id":1864},"json-ld","JSON-LD",[367,1867,1868],{},"Rich results need structured data, and Search Central prefers JSON-LD over microdata because it does not interleave with the markup. The two things that actually break in production are trivial: the JSON does not parse, usually after a string with an unescaped quote got interpolated into the script, or a required property of the chosen type is missing, so the type is dropped entirely instead of being downgraded.",[367,1870,1871,1872,1874,1875,1878,1879,1881,1882,1885,1886,1889,1890,1892],{},"The ",[371,1873,391],{}," module ships ",[371,1876,1877],{},"useJsonLd(type, data)",", which renders the script through ",[371,1880,453],{}," with ",[371,1883,1884],{},"@context"," and ",[371,1887,1888],{},"@type"," filled in and validates the payload with Zod in dev only. Without the module, a plain ",[371,1891,453],{}," with a raw script is the equivalent.",[430,1894,1896],{"className":432,"code":1895,"language":434,"meta":435,"style":435},"\u002F\u002F app\u002Fpages\u002Fproducts\u002F[slug].vue\nuseJsonLd('Product', {\n  name: product.value?.name,\n  description: product.value?.summary,\n  offers: { price: product.value?.price, priceCurrency: 'EUR' },\n})\n\n\u002F\u002F without the module\nuseHead({\n  script: [{\n    type: 'application\u002Fld+json',\n    innerHTML: JSON.stringify({\n      '@context': 'https:\u002F\u002Fschema.org',\n      '@type': 'Organization',\n      name: 'Example',\n      url: 'https:\u002F\u002Fexample.com',\n    }),\n  }],\n})\n",[371,1897,1898,1902,1920,1939,1957,1998,2004,2008,2013,2021,2032,2048,2067,2087,2106,2121,2136,2146,2156],{"__ignoreMap":435},[439,1899,1900],{"class":441,"line":442},[439,1901,841],{"class":445},[439,1903,1904,1907,1909,1911,1914,1916,1918],{"class":441,"line":449},[439,1905,1906],{"class":452},"useJsonLd",[439,1908,457],{"class":456},[439,1910,492],{"class":460},[439,1912,1913],{"class":488},"Product",[439,1915,492],{"class":460},[439,1917,495],{"class":460},[439,1919,594],{"class":460},[439,1921,1922,1925,1927,1929,1931,1933,1935,1937],{"class":441,"line":464},[439,1923,1924],{"class":467},"  name",[439,1926,471],{"class":460},[439,1928,1152],{"class":456},[439,1930,396],{"class":460},[439,1932,1123],{"class":456},[439,1934,1126],{"class":460},[439,1936,1129],{"class":456},[439,1938,516],{"class":460},[439,1940,1941,1943,1945,1947,1949,1951,1953,1955],{"class":441,"line":519},[439,1942,1143],{"class":467},[439,1944,471],{"class":460},[439,1946,1152],{"class":456},[439,1948,396],{"class":460},[439,1950,1123],{"class":456},[439,1952,1126],{"class":460},[439,1954,1161],{"class":456},[439,1956,516],{"class":460},[439,1958,1959,1962,1964,1966,1969,1971,1973,1975,1977,1979,1982,1984,1987,1989,1991,1994,1996],{"class":441,"line":528},[439,1960,1961],{"class":467},"  offers",[439,1963,471],{"class":460},[439,1965,672],{"class":460},[439,1967,1968],{"class":467}," price",[439,1970,471],{"class":460},[439,1972,1152],{"class":456},[439,1974,396],{"class":460},[439,1976,1123],{"class":456},[439,1978,1126],{"class":460},[439,1980,1981],{"class":456},"price",[439,1983,495],{"class":460},[439,1985,1986],{"class":467}," priceCurrency",[439,1988,471],{"class":460},[439,1990,485],{"class":460},[439,1992,1993],{"class":488},"EUR",[439,1995,492],{"class":460},[439,1997,700],{"class":460},[439,1999,2000,2002],{"class":441,"line":535},[439,2001,522],{"class":460},[439,2003,525],{"class":456},[439,2005,2006],{"class":441,"line":541},[439,2007,532],{"emptyLinePlaceholder":531},[439,2009,2010],{"class":441,"line":558},[439,2011,2012],{"class":445},"\u002F\u002F without the module\n",[439,2014,2015,2017,2019],{"class":441,"line":586},[439,2016,453],{"class":452},[439,2018,457],{"class":456},[439,2020,461],{"class":460},[439,2022,2023,2026,2028,2030],{"class":441,"line":597},[439,2024,2025],{"class":467},"  script",[439,2027,471],{"class":460},[439,2029,474],{"class":456},[439,2031,461],{"class":460},[439,2033,2034,2037,2039,2041,2044,2046],{"class":441,"line":627},[439,2035,2036],{"class":467},"    type",[439,2038,471],{"class":460},[439,2040,485],{"class":460},[439,2042,2043],{"class":488},"application\u002Fld+json",[439,2045,492],{"class":460},[439,2047,516],{"class":460},[439,2049,2050,2053,2055,2058,2060,2063,2065],{"class":441,"line":648},[439,2051,2052],{"class":467},"    innerHTML",[439,2054,471],{"class":460},[439,2056,2057],{"class":456}," JSON",[439,2059,396],{"class":460},[439,2061,2062],{"class":452},"stringify",[439,2064,457],{"class":456},[439,2066,461],{"class":460},[439,2068,2069,2072,2074,2076,2078,2080,2083,2085],{"class":441,"line":654},[439,2070,2071],{"class":460},"      '",[439,2073,1884],{"class":467},[439,2075,492],{"class":460},[439,2077,471],{"class":460},[439,2079,485],{"class":460},[439,2081,2082],{"class":488},"https:\u002F\u002Fschema.org",[439,2084,492],{"class":460},[439,2086,516],{"class":460},[439,2088,2089,2091,2093,2095,2097,2099,2102,2104],{"class":441,"line":664},[439,2090,2071],{"class":460},[439,2092,1888],{"class":467},[439,2094,492],{"class":460},[439,2096,471],{"class":460},[439,2098,485],{"class":460},[439,2100,2101],{"class":488},"Organization",[439,2103,492],{"class":460},[439,2105,516],{"class":460},[439,2107,2108,2111,2113,2115,2117,2119],{"class":441,"line":703},[439,2109,2110],{"class":467},"      name",[439,2112,471],{"class":460},[439,2114,485],{"class":460},[439,2116,695],{"class":488},[439,2118,492],{"class":460},[439,2120,516],{"class":460},[439,2122,2123,2126,2128,2130,2132,2134],{"class":441,"line":727},[439,2124,2125],{"class":467},"      url",[439,2127,471],{"class":460},[439,2129,485],{"class":460},[439,2131,682],{"class":488},[439,2133,492],{"class":460},[439,2135,516],{"class":460},[439,2137,2138,2141,2144],{"class":441,"line":732},[439,2139,2140],{"class":460},"    }",[439,2142,2143],{"class":456},")",[439,2145,516],{"class":460},[439,2147,2149,2152,2154],{"class":441,"line":2148},18,[439,2150,2151],{"class":460},"  }",[439,2153,513],{"class":456},[439,2155,516],{"class":460},[439,2157,2159,2161],{"class":441,"line":2158},19,[439,2160,522],{"class":460},[439,2162,525],{"class":456},[766,2164,769],{"id":2165},"how-ranklint-checks-this-5",[771,2167,2168,2174],{},[774,2169,2170],{},[394,2171,2172],{"href":337},[371,2173,336],{},[774,2175,2176],{},[394,2177,2178],{"href":341},[371,2179,340],{},[398,2181,2183],{"id":2182},"breadcrumbs","Breadcrumbs",[367,2185,2186,2187,2190,2191,2194,2195,381,2198,1885,2200,2203],{},"Breadcrumb rich results replace the raw URL in the Google result with a readable path, and Search Central requires the ",[371,2188,2189],{},"BreadcrumbList"," type with an ordered ",[371,2192,2193],{},"itemListElement",", each element carrying ",[371,2196,2197],{},"position",[371,2199,1129],{},[371,2201,2202],{},"item",". Yandex renders its own navigation chain from the same markup. The list has to mirror what the user sees: invisible breadcrumbs that exist only in JSON-LD are a structured data violation.",[367,2205,2206,2207,2210,2211,2214],{},"Render the visible trail with ",[371,2208,2209],{},"NuxtLink"," so internal navigation stays client-side and the crawler still gets real ",[371,2212,2213],{},"href"," values, then emit the matching JSON-LD from the same array.",[430,2216,2218],{"className":1346,"code":2217,"language":1348,"meta":435,"style":435},"\u003C!-- app\u002Fcomponents\u002FBreadcrumbs.vue -->\n\u003Cscript setup lang=\"ts\">\nconst props = defineProps\u003C{ product: { name: string, slug: string } }>()\n\nconst crumbs = [\n  { name: 'Home', path: '\u002F' },\n  { name: 'Products', path: '\u002Fproducts' },\n  { name: props.product.name, path: `\u002Fproducts\u002F${props.product.slug}` },\n]\n\nuseJsonLd('BreadcrumbList', {\n  itemListElement: crumbs.map((crumb, index) => ({\n    '@type': 'ListItem',\n    position: index + 1,\n    name: crumb.name,\n    item: `https:\u002F\u002Fexample.com${crumb.path}`,\n  })),\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cnav aria-label=\"Breadcrumb\">\n    \u003CNuxtLink v-for=\"crumb in crumbs\" :key=\"crumb.path\" :to=\"crumb.path\">\n      {{ crumb.name }}\n    \u003C\u002FNuxtLink>\n  \u003C\u002Fnav>\n\u003C\u002Ftemplate>\n",[371,2219,2220,2225,2249,2294,2298,2309,2341,2371,2419,2424,2428,2444,2480,2500,2519,2535,2559,2568,2574,2582,2587,2596,2618,2679,2685,2695,2704],{"__ignoreMap":435},[439,2221,2222],{"class":441,"line":442},[439,2223,2224],{"class":445},"\u003C!-- app\u002Fcomponents\u002FBreadcrumbs.vue -->\n",[439,2226,2227,2229,2232,2235,2238,2240,2243,2245,2247],{"class":441,"line":449},[439,2228,1360],{"class":460},[439,2230,2231],{"class":467},"script",[439,2233,2234],{"class":846}," setup",[439,2236,2237],{"class":846}," lang",[439,2239,853],{"class":460},[439,2241,2242],{"class":460},"\"",[439,2244,434],{"class":488},[439,2246,2242],{"class":460},[439,2248,1366],{"class":460},[439,2250,2251,2253,2256,2258,2261,2264,2266,2268,2270,2272,2274,2278,2280,2283,2285,2287,2289,2292],{"class":441,"line":464},[439,2252,847],{"class":846},[439,2254,2255],{"class":456}," props ",[439,2257,853],{"class":460},[439,2259,2260],{"class":452}," defineProps",[439,2262,2263],{"class":460},"\u003C{",[439,2265,1152],{"class":467},[439,2267,471],{"class":460},[439,2269,672],{"class":460},[439,2271,480],{"class":467},[439,2273,471],{"class":460},[439,2275,2277],{"class":2276},"sBMFI"," string",[439,2279,495],{"class":460},[439,2281,2282],{"class":467}," slug",[439,2284,471],{"class":460},[439,2286,2277],{"class":2276},[439,2288,510],{"class":460},[439,2290,2291],{"class":460}," }>",[439,2293,859],{"class":456},[439,2295,2296],{"class":441,"line":519},[439,2297,532],{"emptyLinePlaceholder":531},[439,2299,2300,2302,2305,2307],{"class":441,"line":528},[439,2301,847],{"class":846},[439,2303,2304],{"class":456}," crumbs ",[439,2306,853],{"class":460},[439,2308,1636],{"class":456},[439,2310,2311,2314,2316,2318,2320,2323,2325,2327,2330,2332,2334,2337,2339],{"class":441,"line":535},[439,2312,2313],{"class":460},"  {",[439,2315,480],{"class":467},[439,2317,471],{"class":460},[439,2319,485],{"class":460},[439,2321,2322],{"class":488},"Home",[439,2324,492],{"class":460},[439,2326,495],{"class":460},[439,2328,2329],{"class":467}," path",[439,2331,471],{"class":460},[439,2333,485],{"class":460},[439,2335,2336],{"class":488},"\u002F",[439,2338,492],{"class":460},[439,2340,700],{"class":460},[439,2342,2343,2345,2347,2349,2351,2354,2356,2358,2360,2362,2364,2367,2369],{"class":441,"line":541},[439,2344,2313],{"class":460},[439,2346,480],{"class":467},[439,2348,471],{"class":460},[439,2350,485],{"class":460},[439,2352,2353],{"class":488},"Products",[439,2355,492],{"class":460},[439,2357,495],{"class":460},[439,2359,2329],{"class":467},[439,2361,471],{"class":460},[439,2363,485],{"class":460},[439,2365,2366],{"class":488},"\u002Fproducts",[439,2368,492],{"class":460},[439,2370,700],{"class":460},[439,2372,2373,2375,2377,2379,2382,2384,2386,2388,2390,2392,2394,2396,2399,2402,2404,2407,2409,2411,2413,2415,2417],{"class":441,"line":558},[439,2374,2313],{"class":460},[439,2376,480],{"class":467},[439,2378,471],{"class":460},[439,2380,2381],{"class":456}," props",[439,2383,396],{"class":460},[439,2385,1118],{"class":456},[439,2387,396],{"class":460},[439,2389,1129],{"class":456},[439,2391,495],{"class":460},[439,2393,2329],{"class":467},[439,2395,471],{"class":460},[439,2397,2398],{"class":460}," `",[439,2400,2401],{"class":488},"\u002Fproducts\u002F",[439,2403,1070],{"class":460},[439,2405,2406],{"class":456},"props",[439,2408,396],{"class":460},[439,2410,1118],{"class":456},[439,2412,396],{"class":460},[439,2414,1083],{"class":456},[439,2416,1086],{"class":460},[439,2418,700],{"class":460},[439,2420,2421],{"class":441,"line":586},[439,2422,2423],{"class":456},"]\n",[439,2425,2426],{"class":441,"line":597},[439,2427,532],{"emptyLinePlaceholder":531},[439,2429,2430,2432,2434,2436,2438,2440,2442],{"class":441,"line":627},[439,2431,1906],{"class":452},[439,2433,457],{"class":456},[439,2435,492],{"class":460},[439,2437,2189],{"class":488},[439,2439,492],{"class":460},[439,2441,495],{"class":460},[439,2443,594],{"class":460},[439,2445,2446,2449,2451,2454,2456,2459,2461,2463,2467,2469,2472,2474,2476,2478],{"class":441,"line":648},[439,2447,2448],{"class":467},"  itemListElement",[439,2450,471],{"class":460},[439,2452,2453],{"class":456}," crumbs",[439,2455,396],{"class":460},[439,2457,2458],{"class":452},"map",[439,2460,457],{"class":456},[439,2462,457],{"class":460},[439,2464,2466],{"class":2465},"sHdIc","crumb",[439,2468,495],{"class":460},[439,2470,2471],{"class":2465}," index",[439,2473,2143],{"class":460},[439,2475,1056],{"class":846},[439,2477,1771],{"class":456},[439,2479,461],{"class":460},[439,2481,2482,2485,2487,2489,2491,2493,2496,2498],{"class":441,"line":654},[439,2483,2484],{"class":460},"    '",[439,2486,1888],{"class":467},[439,2488,492],{"class":460},[439,2490,471],{"class":460},[439,2492,485],{"class":460},[439,2494,2495],{"class":488},"ListItem",[439,2497,492],{"class":460},[439,2499,516],{"class":460},[439,2501,2502,2505,2507,2510,2513,2517],{"class":441,"line":664},[439,2503,2504],{"class":467},"    position",[439,2506,471],{"class":460},[439,2508,2509],{"class":456}," index ",[439,2511,2512],{"class":460},"+",[439,2514,2516],{"class":2515},"sbssI"," 1",[439,2518,516],{"class":460},[439,2520,2521,2524,2526,2529,2531,2533],{"class":441,"line":703},[439,2522,2523],{"class":467},"    name",[439,2525,471],{"class":460},[439,2527,2528],{"class":456}," crumb",[439,2530,396],{"class":460},[439,2532,1129],{"class":456},[439,2534,516],{"class":460},[439,2536,2537,2540,2542,2544,2546,2548,2550,2552,2555,2557],{"class":441,"line":727},[439,2538,2539],{"class":467},"    item",[439,2541,471],{"class":460},[439,2543,2398],{"class":460},[439,2545,682],{"class":488},[439,2547,1070],{"class":460},[439,2549,2466],{"class":456},[439,2551,396],{"class":460},[439,2553,2554],{"class":456},"path",[439,2556,1086],{"class":460},[439,2558,516],{"class":460},[439,2560,2561,2563,2566],{"class":441,"line":732},[439,2562,2151],{"class":460},[439,2564,2565],{"class":456},"))",[439,2567,516],{"class":460},[439,2569,2570,2572],{"class":441,"line":2148},[439,2571,522],{"class":460},[439,2573,525],{"class":456},[439,2575,2576,2578,2580],{"class":441,"line":2158},[439,2577,1392],{"class":460},[439,2579,2231],{"class":467},[439,2581,1366],{"class":460},[439,2583,2585],{"class":441,"line":2584},20,[439,2586,532],{"emptyLinePlaceholder":531},[439,2588,2590,2592,2594],{"class":441,"line":2589},21,[439,2591,1360],{"class":460},[439,2593,1363],{"class":467},[439,2595,1366],{"class":460},[439,2597,2599,2601,2604,2607,2609,2611,2614,2616],{"class":441,"line":2598},22,[439,2600,1371],{"class":460},[439,2602,2603],{"class":467},"nav",[439,2605,2606],{"class":846}," aria-label",[439,2608,853],{"class":460},[439,2610,2242],{"class":460},[439,2612,2613],{"class":488},"Breadcrumb",[439,2615,2242],{"class":460},[439,2617,1366],{"class":460},[439,2619,2621,2623,2625,2628,2630,2632,2634,2637,2640,2642,2645,2648,2650,2652,2654,2656,2658,2660,2662,2665,2667,2669,2671,2673,2675,2677],{"class":441,"line":2620},23,[439,2622,1381],{"class":460},[439,2624,2209],{"class":467},[439,2626,2627],{"class":544}," v-for",[439,2629,853],{"class":460},[439,2631,2242],{"class":460},[439,2633,2466],{"class":456},[439,2635,2636],{"class":460}," in ",[439,2638,2639],{"class":456},"crumbs",[439,2641,2242],{"class":460},[439,2643,2644],{"class":460}," :",[439,2646,2647],{"class":846},"key",[439,2649,853],{"class":460},[439,2651,2242],{"class":460},[439,2653,2466],{"class":456},[439,2655,396],{"class":460},[439,2657,2554],{"class":456},[439,2659,2242],{"class":460},[439,2661,2644],{"class":460},[439,2663,2664],{"class":846},"to",[439,2666,853],{"class":460},[439,2668,2242],{"class":460},[439,2670,2466],{"class":456},[439,2672,396],{"class":460},[439,2674,2554],{"class":456},[439,2676,2242],{"class":460},[439,2678,1366],{"class":460},[439,2680,2682],{"class":441,"line":2681},24,[439,2683,2684],{"class":456},"      {{ crumb.name }}\n",[439,2686,2688,2691,2693],{"class":441,"line":2687},25,[439,2689,2690],{"class":460},"    \u003C\u002F",[439,2692,2209],{"class":467},[439,2694,1366],{"class":460},[439,2696,2698,2700,2702],{"class":441,"line":2697},26,[439,2699,1452],{"class":460},[439,2701,2603],{"class":467},[439,2703,1366],{"class":460},[439,2705,2707,2709,2711],{"class":441,"line":2706},27,[439,2708,1392],{"class":460},[439,2710,1363],{"class":467},[439,2712,1366],{"class":460},[766,2714,769],{"id":2715},"how-ranklint-checks-this-6",[771,2717,2718,2724,2730],{},[774,2719,2720],{},[394,2721,2722],{"href":341},[371,2723,340],{},[774,2725,2726],{},[394,2727,2728],{"href":337},[371,2729,336],{},[774,2731,2732],{},[394,2733,2734],{"href":235},[371,2735,234],{},[398,2737,34],{"id":2738},"sitemap",[367,2740,2741,2742,2744,2745,2748],{},"A sitemap is a discovery aid, not an index guarantee. Search Central is clear about what belongs in it: canonical, indexable, 200-answering URLs only. A ",[371,2743,373],{}," page in the sitemap is a contradictory signal, and a 404 in the sitemap wastes crawl budget on every fetch. The file also has to be declared in robots.txt through a ",[371,2746,2747],{},"Sitemap:"," directive, which is how Yandex discovers it when the host is not verified in a webmaster console.",[367,2750,1871,2751,2753,2754,2757,2758,2761,2762,2765,2766,2769],{},[371,2752,391],{}," module serves ",[371,2755,2756],{},"\u002Fsitemap.xml"," with no configuration: it collects static routes from ",[371,2759,2760],{},"app\u002Fpages",", absolutises every ",[371,2763,2764],{},"loc"," against ",[371,2767,2768],{},"site.url"," and escapes the XML. Dynamic routes come from explicit sources.",[430,2771,2773],{"className":432,"code":2772,"language":434,"meta":435,"style":435},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['@ranklint\u002Fnuxt'],\n  ranklint: {\n    site: { url: 'https:\u002F\u002Fexample.com', name: 'Example' },\n    sitemap: {\n      path: '\u002Fsitemap.xml',\n      autoRoutes: true,\n      cacheTtl: 3600,\n      sources: [\n        '\u002Fapi\u002Fseo\u002Fproduct-urls',\n        { loc: '\u002Fpricing', changefreq: 'weekly', priority: 0.8 },\n      ],\n    },\n  },\n})\n",[371,2774,2775,2779,2791,2809,2817,2849,2857,2872,2883,2895,2904,2916,2959,2966,2971,2975],{"__ignoreMap":435},[439,2776,2777],{"class":441,"line":442},[439,2778,538],{"class":445},[439,2780,2781,2783,2785,2787,2789],{"class":441,"line":449},[439,2782,545],{"class":544},[439,2784,548],{"class":544},[439,2786,551],{"class":452},[439,2788,457],{"class":456},[439,2790,461],{"class":460},[439,2792,2793,2795,2797,2799,2801,2803,2805,2807],{"class":441,"line":464},[439,2794,561],{"class":467},[439,2796,471],{"class":460},[439,2798,474],{"class":456},[439,2800,492],{"class":460},[439,2802,391],{"class":488},[439,2804,492],{"class":460},[439,2806,513],{"class":456},[439,2808,516],{"class":460},[439,2810,2811,2813,2815],{"class":441,"line":519},[439,2812,657],{"class":467},[439,2814,471],{"class":460},[439,2816,594],{"class":460},[439,2818,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847],{"class":441,"line":528},[439,2820,667],{"class":467},[439,2822,471],{"class":460},[439,2824,672],{"class":460},[439,2826,675],{"class":467},[439,2828,471],{"class":460},[439,2830,485],{"class":460},[439,2832,682],{"class":488},[439,2834,492],{"class":460},[439,2836,495],{"class":460},[439,2838,480],{"class":467},[439,2840,471],{"class":460},[439,2842,485],{"class":460},[439,2844,695],{"class":488},[439,2846,492],{"class":460},[439,2848,700],{"class":460},[439,2850,2851,2853,2855],{"class":441,"line":535},[439,2852,630],{"class":467},[439,2854,471],{"class":460},[439,2856,594],{"class":460},[439,2858,2859,2862,2864,2866,2868,2870],{"class":441,"line":541},[439,2860,2861],{"class":467},"      path",[439,2863,471],{"class":460},[439,2865,485],{"class":460},[439,2867,2756],{"class":488},[439,2869,492],{"class":460},[439,2871,516],{"class":460},[439,2873,2874,2877,2879,2881],{"class":441,"line":558},[439,2875,2876],{"class":467},"      autoRoutes",[439,2878,471],{"class":460},[439,2880,1750],{"class":1749},[439,2882,516],{"class":460},[439,2884,2885,2888,2890,2893],{"class":441,"line":586},[439,2886,2887],{"class":467},"      cacheTtl",[439,2889,471],{"class":460},[439,2891,2892],{"class":2515}," 3600",[439,2894,516],{"class":460},[439,2896,2897,2900,2902],{"class":441,"line":597},[439,2898,2899],{"class":467},"      sources",[439,2901,471],{"class":460},[439,2903,1636],{"class":456},[439,2905,2906,2909,2912,2914],{"class":441,"line":627},[439,2907,2908],{"class":460},"        '",[439,2910,2911],{"class":488},"\u002Fapi\u002Fseo\u002Fproduct-urls",[439,2913,492],{"class":460},[439,2915,516],{"class":460},[439,2917,2918,2921,2924,2926,2928,2931,2933,2935,2938,2940,2942,2945,2947,2949,2952,2954,2957],{"class":441,"line":648},[439,2919,2920],{"class":460},"        {",[439,2922,2923],{"class":467}," loc",[439,2925,471],{"class":460},[439,2927,485],{"class":460},[439,2929,2930],{"class":488},"\u002Fpricing",[439,2932,492],{"class":460},[439,2934,495],{"class":460},[439,2936,2937],{"class":467}," changefreq",[439,2939,471],{"class":460},[439,2941,485],{"class":460},[439,2943,2944],{"class":488},"weekly",[439,2946,492],{"class":460},[439,2948,495],{"class":460},[439,2950,2951],{"class":467}," priority",[439,2953,471],{"class":460},[439,2955,2956],{"class":2515}," 0.8",[439,2958,700],{"class":460},[439,2960,2961,2964],{"class":441,"line":654},[439,2962,2963],{"class":456},"      ]",[439,2965,516],{"class":460},[439,2967,2968],{"class":441,"line":664},[439,2969,2970],{"class":460},"    },\n",[439,2972,2973],{"class":441,"line":703},[439,2974,651],{"class":460},[439,2976,2977,2979],{"class":441,"line":727},[439,2978,522],{"class":460},[439,2980,525],{"class":456},[766,2982,769],{"id":2983},"how-ranklint-checks-this-7",[771,2985,2986,2992,2998,3004,3010],{},[774,2987,2988],{},[394,2989,2990],{"href":226},[371,2991,225],{},[774,2993,2994],{},[394,2995,2996],{"href":220},[371,2997,219],{},[774,2999,3000],{},[394,3001,3002],{"href":324},[371,3003,323],{},[774,3005,3006],{},[394,3007,3008],{"href":320},[371,3009,319],{},[774,3011,3012],{},[394,3013,3014],{"href":239},[371,3015,238],{},[398,3017,191],{"id":3018},"images",[367,3020,3021,3022,3025,3026,3028,3029,1885,3032,3035],{},"Google Images documentation asks for descriptive ",[371,3023,3024],{},"alt"," text on content images and decorative images marked with an empty ",[371,3027,3024],{},". Layout stability matters too: intrinsic ",[371,3030,3031],{},"width",[371,3033,3034],{},"height"," let the browser reserve space, which keeps Cumulative Layout Shift low, and CLS is part of Core Web Vitals.",[367,3037,3038,3039,3042,3043,3046,3047,3050,3051,3054,3055,3057,3058,3061],{},"The third rule is about ",[371,3040,3041],{},"loading=\"lazy\"",". Lazy loading below the fold is a win, lazy loading the hero image delays Largest Contentful Paint on every visit. ",[371,3044,3045],{},"NuxtImg"," does not add ",[371,3048,3049],{},"loading"," on its own, it is a plain attribute passed through to the ",[371,3052,3053],{},"img",", so set ",[371,3056,3041],{}," explicitly on the images below the fold and mark the hero with the ",[371,3059,3060],{},"preload"," prop instead.",[430,3063,3065],{"className":1346,"code":3064,"language":1348,"meta":435,"style":435},"\u003Ctemplate>\n  \u003CNuxtImg\n    src=\"\u002Fimg\u002Fhero.jpg\"\n    alt=\"Blue widget on a workbench\"\n    width=\"1200\"\n    height=\"630\"\n    sizes=\"100vw md:1200px\"\n    format=\"webp\"\n    preload\n  \u002F>\n  \u003CNuxtImg src=\"\u002Fimg\u002Fgallery-1.jpg\" alt=\"Widget from the side\" width=\"600\" height=\"400\" loading=\"lazy\" \u002F>\n\u003C\u002Ftemplate>\n",[371,3066,3067,3075,3082,3097,3111,3125,3139,3153,3167,3172,3177,3246],{"__ignoreMap":435},[439,3068,3069,3071,3073],{"class":441,"line":442},[439,3070,1360],{"class":460},[439,3072,1363],{"class":467},[439,3074,1366],{"class":460},[439,3076,3077,3079],{"class":441,"line":449},[439,3078,1371],{"class":460},[439,3080,3081],{"class":467},"NuxtImg\n",[439,3083,3084,3087,3089,3091,3094],{"class":441,"line":464},[439,3085,3086],{"class":846},"    src",[439,3088,853],{"class":460},[439,3090,2242],{"class":460},[439,3092,3093],{"class":488},"\u002Fimg\u002Fhero.jpg",[439,3095,3096],{"class":460},"\"\n",[439,3098,3099,3102,3104,3106,3109],{"class":441,"line":519},[439,3100,3101],{"class":846},"    alt",[439,3103,853],{"class":460},[439,3105,2242],{"class":460},[439,3107,3108],{"class":488},"Blue widget on a workbench",[439,3110,3096],{"class":460},[439,3112,3113,3116,3118,3120,3123],{"class":441,"line":528},[439,3114,3115],{"class":846},"    width",[439,3117,853],{"class":460},[439,3119,2242],{"class":460},[439,3121,3122],{"class":488},"1200",[439,3124,3096],{"class":460},[439,3126,3127,3130,3132,3134,3137],{"class":441,"line":535},[439,3128,3129],{"class":846},"    height",[439,3131,853],{"class":460},[439,3133,2242],{"class":460},[439,3135,3136],{"class":488},"630",[439,3138,3096],{"class":460},[439,3140,3141,3144,3146,3148,3151],{"class":441,"line":541},[439,3142,3143],{"class":846},"    sizes",[439,3145,853],{"class":460},[439,3147,2242],{"class":460},[439,3149,3150],{"class":488},"100vw md:1200px",[439,3152,3096],{"class":460},[439,3154,3155,3158,3160,3162,3165],{"class":441,"line":558},[439,3156,3157],{"class":846},"    format",[439,3159,853],{"class":460},[439,3161,2242],{"class":460},[439,3163,3164],{"class":488},"webp",[439,3166,3096],{"class":460},[439,3168,3169],{"class":441,"line":586},[439,3170,3171],{"class":846},"    preload\n",[439,3173,3174],{"class":441,"line":597},[439,3175,3176],{"class":460},"  \u002F>\n",[439,3178,3179,3181,3183,3186,3188,3190,3193,3195,3198,3200,3202,3205,3207,3210,3212,3214,3217,3219,3222,3224,3226,3229,3231,3234,3236,3238,3241,3243],{"class":441,"line":627},[439,3180,1371],{"class":460},[439,3182,3045],{"class":467},[439,3184,3185],{"class":846}," src",[439,3187,853],{"class":460},[439,3189,2242],{"class":460},[439,3191,3192],{"class":488},"\u002Fimg\u002Fgallery-1.jpg",[439,3194,2242],{"class":460},[439,3196,3197],{"class":846}," alt",[439,3199,853],{"class":460},[439,3201,2242],{"class":460},[439,3203,3204],{"class":488},"Widget from the side",[439,3206,2242],{"class":460},[439,3208,3209],{"class":846}," width",[439,3211,853],{"class":460},[439,3213,2242],{"class":460},[439,3215,3216],{"class":488},"600",[439,3218,2242],{"class":460},[439,3220,3221],{"class":846}," height",[439,3223,853],{"class":460},[439,3225,2242],{"class":460},[439,3227,3228],{"class":488},"400",[439,3230,2242],{"class":460},[439,3232,3233],{"class":846}," loading",[439,3235,853],{"class":460},[439,3237,2242],{"class":460},[439,3239,3240],{"class":488},"lazy",[439,3242,2242],{"class":460},[439,3244,3245],{"class":460}," \u002F>\n",[439,3247,3248,3250,3252],{"class":441,"line":648},[439,3249,1392],{"class":460},[439,3251,1363],{"class":467},[439,3253,1366],{"class":460},[766,3255,769],{"id":3256},"how-ranklint-checks-this-8",[771,3258,3259,3265,3271],{},[774,3260,3261],{},[394,3262,3263],{"href":197},[371,3264,196],{},[774,3266,3267],{},[394,3268,3269],{"href":201},[371,3270,200],{},[774,3272,3273],{},[394,3274,3275],{"href":205},[371,3276,204],{},[398,3278,3280],{"id":3279},"internal-links","Internal links",[367,3282,3283,3284,3286,3287,3289,3290,3292,3293,3296],{},"Search Central describes crawling as link discovery: a page nobody links to is found only through the sitemap, and its importance is read as low. Internal links need a real ",[371,3285,2213],{}," in the server-rendered HTML, which ",[371,3288,2209],{}," produces, unlike a ",[371,3291,1337],{}," with a ",[371,3294,3295],{},"@click"," handler that navigates programmatically.",[367,3298,3299,3300,3302],{},"Consistency is the other half. Pick one trailing-slash convention for the whole site and keep every internal link on it, otherwise each route exists as two URLs and the signals split. Mark genuinely external links with ",[371,3301,720],{}," so Nuxt does not try to resolve them against the router.",[430,3304,3306],{"className":1346,"code":3305,"language":1348,"meta":435,"style":435},"\u003Ctemplate>\n  \u003CNuxtLink to=\"\u002Fproducts\u002Fblue-widget\">Blue widget\u003C\u002FNuxtLink>\n  \u003CNuxtLink to=\"https:\u002F\u002Fstatus.example.com\" external target=\"_blank\" rel=\"noopener\">\n    Status page\n  \u003C\u002FNuxtLink>\n\u003C\u002Ftemplate>\n",[371,3307,3308,3316,3345,3390,3395,3403],{"__ignoreMap":435},[439,3309,3310,3312,3314],{"class":441,"line":442},[439,3311,1360],{"class":460},[439,3313,1363],{"class":467},[439,3315,1366],{"class":460},[439,3317,3318,3320,3322,3325,3327,3329,3332,3334,3336,3339,3341,3343],{"class":441,"line":449},[439,3319,1371],{"class":460},[439,3321,2209],{"class":467},[439,3323,3324],{"class":846}," to",[439,3326,853],{"class":460},[439,3328,2242],{"class":460},[439,3330,3331],{"class":488},"\u002Fproducts\u002Fblue-widget",[439,3333,2242],{"class":460},[439,3335,1386],{"class":460},[439,3337,3338],{"class":456},"Blue widget",[439,3340,1392],{"class":460},[439,3342,2209],{"class":467},[439,3344,1366],{"class":460},[439,3346,3347,3349,3351,3353,3355,3357,3360,3362,3365,3368,3370,3372,3375,3377,3379,3381,3383,3386,3388],{"class":441,"line":464},[439,3348,1371],{"class":460},[439,3350,2209],{"class":467},[439,3352,3324],{"class":846},[439,3354,853],{"class":460},[439,3356,2242],{"class":460},[439,3358,3359],{"class":488},"https:\u002F\u002Fstatus.example.com",[439,3361,2242],{"class":460},[439,3363,3364],{"class":846}," external",[439,3366,3367],{"class":846}," target",[439,3369,853],{"class":460},[439,3371,2242],{"class":460},[439,3373,3374],{"class":488},"_blank",[439,3376,2242],{"class":460},[439,3378,918],{"class":846},[439,3380,853],{"class":460},[439,3382,2242],{"class":460},[439,3384,3385],{"class":488},"noopener",[439,3387,2242],{"class":460},[439,3389,1366],{"class":460},[439,3391,3392],{"class":441,"line":519},[439,3393,3394],{"class":456},"    Status page\n",[439,3396,3397,3399,3401],{"class":441,"line":528},[439,3398,1452],{"class":460},[439,3400,2209],{"class":467},[439,3402,1366],{"class":460},[439,3404,3405,3407,3409],{"class":441,"line":535},[439,3406,1392],{"class":460},[439,3408,1363],{"class":467},[439,3410,1366],{"class":460},[766,3412,769],{"id":3413},"how-ranklint-checks-this-9",[771,3415,3416,3422,3428],{},[774,3417,3418],{},[394,3419,3420],{"href":235},[371,3421,234],{},[774,3423,3424],{},[394,3425,3426],{"href":255},[371,3427,254],{},[774,3429,3430],{},[394,3431,3432],{"href":239},[371,3433,238],{},[398,3435,3437],{"id":3436},"http-and-redirects","HTTP and redirects",[367,3439,3440],{},"A moved URL gets a 301, and Search Central states that a permanent redirect is the strongest consolidation signal there is, while a 302 tells the crawler to keep the old URL. Chains are the second problem: every extra hop costs crawl budget and dilutes the signal, so redirect straight to the final destination instead of walking through two intermediate routes. Yandex follows the same rules but consolidates a 301 more slowly, often over several crawl cycles.",[367,3442,3443],{},"The rest of this block is hygiene that only shows up in the response: mixed content on an HTTPS page, a deleted product that returns 200 with an empty body instead of a 404, a viewport meta tag missing from a mobile-first index, and a time to first byte that grows until the crawl rate drops.",[430,3445,3447],{"className":432,"code":3446,"language":434,"meta":435,"style":435},"\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  routeRules: {\n    '\u002Fold-pricing': { redirect: { to: '\u002Fpricing', statusCode: 301 } },\n    '\u002Fblog\u002F**': { swr: 3600 },\n  },\n  app: {\n    head: {\n      meta: [{ name: 'viewport', content: 'width=device-width, initial-scale=1' }],\n    },\n  },\n})\n",[371,3448,3449,3453,3465,3474,3518,3540,3544,3553,3562,3603,3607,3611],{"__ignoreMap":435},[439,3450,3451],{"class":441,"line":442},[439,3452,538],{"class":445},[439,3454,3455,3457,3459,3461,3463],{"class":441,"line":449},[439,3456,545],{"class":544},[439,3458,548],{"class":544},[439,3460,551],{"class":452},[439,3462,457],{"class":456},[439,3464,461],{"class":460},[439,3466,3467,3470,3472],{"class":441,"line":464},[439,3468,3469],{"class":467},"  routeRules",[439,3471,471],{"class":460},[439,3473,594],{"class":460},[439,3475,3476,3478,3481,3483,3485,3487,3490,3492,3494,3496,3498,3500,3502,3504,3506,3509,3511,3514,3516],{"class":441,"line":519},[439,3477,2484],{"class":460},[439,3479,3480],{"class":467},"\u002Fold-pricing",[439,3482,492],{"class":460},[439,3484,471],{"class":460},[439,3486,672],{"class":460},[439,3488,3489],{"class":467}," redirect",[439,3491,471],{"class":460},[439,3493,672],{"class":460},[439,3495,3324],{"class":467},[439,3497,471],{"class":460},[439,3499,485],{"class":460},[439,3501,2930],{"class":488},[439,3503,492],{"class":460},[439,3505,495],{"class":460},[439,3507,3508],{"class":467}," statusCode",[439,3510,471],{"class":460},[439,3512,3513],{"class":2515}," 301",[439,3515,510],{"class":460},[439,3517,700],{"class":460},[439,3519,3520,3522,3525,3527,3529,3531,3534,3536,3538],{"class":441,"line":528},[439,3521,2484],{"class":460},[439,3523,3524],{"class":467},"\u002Fblog\u002F**",[439,3526,492],{"class":460},[439,3528,471],{"class":460},[439,3530,672],{"class":460},[439,3532,3533],{"class":467}," swr",[439,3535,471],{"class":460},[439,3537,2892],{"class":2515},[439,3539,700],{"class":460},[439,3541,3542],{"class":441,"line":535},[439,3543,651],{"class":460},[439,3545,3546,3549,3551],{"class":441,"line":541},[439,3547,3548],{"class":467},"  app",[439,3550,471],{"class":460},[439,3552,594],{"class":460},[439,3554,3555,3558,3560],{"class":441,"line":558},[439,3556,3557],{"class":467},"    head",[439,3559,471],{"class":460},[439,3561,594],{"class":460},[439,3563,3564,3567,3569,3571,3573,3575,3577,3579,3582,3584,3586,3588,3590,3592,3595,3597,3599,3601],{"class":441,"line":586},[439,3565,3566],{"class":467},"      meta",[439,3568,471],{"class":460},[439,3570,474],{"class":456},[439,3572,477],{"class":460},[439,3574,480],{"class":467},[439,3576,471],{"class":460},[439,3578,485],{"class":460},[439,3580,3581],{"class":488},"viewport",[439,3583,492],{"class":460},[439,3585,495],{"class":460},[439,3587,498],{"class":467},[439,3589,471],{"class":460},[439,3591,485],{"class":460},[439,3593,3594],{"class":488},"width=device-width, initial-scale=1",[439,3596,492],{"class":460},[439,3598,510],{"class":460},[439,3600,513],{"class":456},[439,3602,516],{"class":460},[439,3604,3605],{"class":441,"line":597},[439,3606,2970],{"class":460},[439,3608,3609],{"class":441,"line":627},[439,3610,651],{"class":460},[439,3612,3613,3615],{"class":441,"line":648},[439,3614,522],{"class":460},[439,3616,525],{"class":456},[766,3618,769],{"id":3619},"how-ranklint-checks-this-10",[771,3621,3622,3628,3634,3640,3646,3652],{},[774,3623,3624],{},[394,3625,3626],{"href":251},[371,3627,250],{},[774,3629,3630],{},[394,3631,3632],{"href":243},[371,3633,242],{},[774,3635,3636],{},[394,3637,3638],{"href":155},[371,3639,154],{},[774,3641,3642],{},[394,3643,3644],{"href":159},[371,3645,158],{},[774,3647,3648],{},[394,3649,3650],{"href":163},[371,3651,162],{},[774,3653,3654],{},[394,3655,3656],{"href":171},[371,3657,170],{},[398,3659,3661],{"id":3660},"run-it-locally-and-in-ci","Run it locally and in CI",[367,3663,3664],{},"Everything above is checkable before a deploy. Start the app, point ranklint at it, and the crawler walks the site, runs all 43 rules and exits with code 1 when an error-severity issue is found. Without a config it audits with a minimal one derived from the URL origin, which is enough for a first pass.",[430,3666,3670],{"className":3667,"code":3668,"language":3669,"meta":435,"style":435},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm run dev\nnpx ranklint audit --url http:\u002F\u002Flocalhost:3000\n","bash",[371,3671,3672,3683],{"__ignoreMap":435},[439,3673,3674,3677,3680],{"class":441,"line":442},[439,3675,3676],{"class":2276},"npm",[439,3678,3679],{"class":488}," run",[439,3681,3682],{"class":488}," dev\n",[439,3684,3685,3688,3691,3694,3697],{"class":441,"line":449},[439,3686,3687],{"class":2276},"npx",[439,3689,3690],{"class":488}," ranklint",[439,3692,3693],{"class":488}," audit",[439,3695,3696],{"class":488}," --url",[439,3698,3699],{"class":488}," http:\u002F\u002Flocalhost:3000\n",[430,3701,3703],{"className":3667,"code":3702,"language":3669,"meta":435,"style":435},"npx ranklint audit --url https:\u002F\u002Fexample.com --reporter markdown --json-output report.json\n",[371,3704,3705],{"__ignoreMap":435},[439,3706,3707,3709,3711,3713,3715,3718,3721,3724,3727],{"class":441,"line":442},[439,3708,3687],{"class":2276},[439,3710,3690],{"class":488},[439,3712,3693],{"class":488},[439,3714,3696],{"class":488},[439,3716,3717],{"class":488}," https:\u002F\u002Fexample.com",[439,3719,3720],{"class":488}," --reporter",[439,3722,3723],{"class":488}," markdown",[439,3725,3726],{"class":488}," --json-output",[439,3728,3729],{"class":488}," report.json\n",[367,3731,3732,3733,396],{},"In a pipeline the useful shape is audit plus diff: the audit fails the job on new error issues, and the diff compares the current report against the base branch report so a review only shows what this change broke. Setup for GitHub Actions and GitLab CI, including the sticky pull request comment and SARIF upload, lives in ",[394,3734,60],{"href":61},[766,3736,769],{"id":3737},"how-ranklint-checks-this-11",[771,3739,3740,3745,3750],{},[774,3741,3742,3743],{},"Full rule reference with default severities: ",[394,3744,122],{"href":118},[774,3746,3747,3748],{},"Crawl, reporters and flags: ",[394,3749,56],{"href":57},[774,3751,3752,3753],{},"Base reports, artifacts and pipeline presets: ",[394,3754,60],{"href":61},[3756,3757,3758],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}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);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":435,"searchDepth":449,"depth":449,"links":3760},[3761,3764,3767,3770,3773,3776,3779,3782,3785,3788,3791,3794],{"id":400,"depth":449,"text":208,"children":3762},[3763],{"id":768,"depth":464,"text":769},{"id":812,"depth":449,"text":813,"children":3765},[3766],{"id":951,"depth":464,"text":769},{"id":986,"depth":449,"text":987,"children":3768},[3769],{"id":1274,"depth":464,"text":769},{"id":1315,"depth":449,"text":124,"children":3771},[3772],{"id":1467,"depth":464,"text":769},{"id":1502,"depth":449,"text":1503,"children":3774},[3775],{"id":1841,"depth":464,"text":769},{"id":1864,"depth":449,"text":1865,"children":3777},[3778],{"id":2165,"depth":464,"text":769},{"id":2182,"depth":449,"text":2183,"children":3780},[3781],{"id":2715,"depth":464,"text":769},{"id":2738,"depth":449,"text":34,"children":3783},[3784],{"id":2983,"depth":464,"text":769},{"id":3018,"depth":449,"text":191,"children":3786},[3787],{"id":3256,"depth":464,"text":769},{"id":3279,"depth":449,"text":3280,"children":3789},[3790],{"id":3413,"depth":464,"text":769},{"id":3436,"depth":449,"text":3437,"children":3792},[3793],{"id":3619,"depth":464,"text":769},{"id":3660,"depth":449,"text":3661,"children":3795},[3796],{"id":3737,"depth":464,"text":769},"Indexability, canonical, hreflang, JSON-LD, breadcrumbs, sitemap and links: what a Nuxt site needs and how ranklint checks each item.","md",null,{},{"title":350,"description":3797},"rln7cy2MUtWbwZ1Kk7FRUYEiyUnwooV7sgun-ifRdDM",[3804,3806],{"title":340,"path":341,"stem":342,"description":3805,"children":-1},"validity against Schema.org schemas; { schemas } — your own",{"title":359,"path":355,"stem":356,"description":3807,"children":-1},"Every ranklint release with breaking changes, features and fixes, newest first, with links to the commits behind them.",1791750392632]