[{"data":1,"prerenderedAt":237},["ShallowReactive",2],{"blog-nuxt-prerendering-on-vercel":3},{"id":4,"title":5,"body":6,"date":225,"description":226,"extension":227,"meta":228,"navigation":229,"path":230,"seo":231,"stem":232,"tags":233,"__hash__":236},"blog\u002Fblog\u002Fnuxt-prerendering-on-vercel.md","Prerendering a Nuxt 3 Site and Deploying It to Vercel",{"type":7,"value":8,"toc":219},"minimark",[9,13,18,26,122,129,133,136,154,161,185,188,192,200,204,215],[10,11,12],"p",{},"Prerendering generates HTML for your routes at build time. The browser and search engine crawlers get complete pages immediately, without waiting for JavaScript to run. It works well for portfolios, blogs and documentation, where content rarely changes between deploys.",[14,15,17],"h2",{"id":16},"configure-prerendering","Configure prerendering",[10,19,20,21,25],{},"Tell Nitro which routes to render. With ",[22,23,24],"code",{},"crawlLinks"," enabled, Nitro follows internal links from the routes you list and renders those too:",[27,28,33],"pre",{"className":29,"code":30,"language":31,"meta":32,"style":32},"language-ts shiki shiki-themes github-light github-dark","export default defineNuxtConfig({\n  nitro: {\n    prerender: {\n      crawlLinks: true,\n      routes: ['\u002F', '\u002Fsitemap.xml', '\u002Frobots.txt'],\n    },\n  },\n})\n","ts","",[22,34,35,55,61,67,80,104,110,116],{"__ignoreMap":32},[36,37,40,44,47,51],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"szBVR","export",[36,45,46],{"class":42}," default",[36,48,50],{"class":49},"sScJk"," defineNuxtConfig",[36,52,54],{"class":53},"sVt8B","({\n",[36,56,58],{"class":38,"line":57},2,[36,59,60],{"class":53},"  nitro: {\n",[36,62,64],{"class":38,"line":63},3,[36,65,66],{"class":53},"    prerender: {\n",[36,68,70,73,77],{"class":38,"line":69},4,[36,71,72],{"class":53},"      crawlLinks: ",[36,74,76],{"class":75},"sj4cs","true",[36,78,79],{"class":53},",\n",[36,81,83,86,90,93,96,98,101],{"class":38,"line":82},5,[36,84,85],{"class":53},"      routes: [",[36,87,89],{"class":88},"sZZnC","'\u002F'",[36,91,92],{"class":53},", ",[36,94,95],{"class":88},"'\u002Fsitemap.xml'",[36,97,92],{"class":53},[36,99,100],{"class":88},"'\u002Frobots.txt'",[36,102,103],{"class":53},"],\n",[36,105,107],{"class":38,"line":106},6,[36,108,109],{"class":53},"    },\n",[36,111,113],{"class":38,"line":112},7,[36,114,115],{"class":53},"  },\n",[36,117,119],{"class":38,"line":118},8,[36,120,121],{"class":53},"})\n",[10,123,124,125,128],{},"Dynamic routes such as ",[22,126,127],{},"\u002Fblog\u002Fmy-post"," are discovered when a prerendered page links to them, so make sure your blog index links to every post.",[14,130,132],{"id":131},"verify-the-output","Verify the output",[10,134,135],{},"Build the site and look at the generated HTML:",[27,137,141],{"className":138,"code":139,"language":140,"meta":32,"style":32},"language-bash shiki shiki-themes github-light github-dark","npx nuxt build\n","bash",[22,142,143],{"__ignoreMap":32},[36,144,145,148,151],{"class":38,"line":39},[36,146,147],{"class":49},"npx",[36,149,150],{"class":88}," nuxt",[36,152,153],{"class":88}," build\n",[10,155,156,157,160],{},"Then request the page with ",[22,158,159],{},"curl"," and check that your content is in the response:",[27,162,164],{"className":138,"code":163,"language":140,"meta":32,"style":32},"curl -s http:\u002F\u002Flocalhost:3000 | grep \"\u003Ch1\"\n",[22,165,166],{"__ignoreMap":32},[36,167,168,170,173,176,179,182],{"class":38,"line":39},[36,169,159],{"class":49},[36,171,172],{"class":75}," -s",[36,174,175],{"class":88}," http:\u002F\u002Flocalhost:3000",[36,177,178],{"class":42}," |",[36,180,181],{"class":49}," grep",[36,183,184],{"class":88}," \"\u003Ch1\"\n",[10,186,187],{},"If the heading shows up, crawlers can see it too.",[14,189,191],{"id":190},"deploy-to-vercel","Deploy to Vercel",[10,193,194,195,199],{},"Vercel detects Nuxt automatically. Push the repository, import it in the Vercel dashboard, and the default build settings work. Add any environment variables, such as API keys for contact forms, under ",[196,197,198],"strong",{},"Project Settings → Environment Variables",".",[14,201,203],{"id":202},"check-what-google-sees","Check what Google sees",[10,205,206,207,210,211,214],{},"After deploying, open Google Search Console, paste a URL into ",[196,208,209],{},"URL inspection",", and choose ",[196,212,213],{},"View crawled page",". This shows the HTML Google actually received, so you can confirm that your content and meta tags are present.",[216,217,218],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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":32,"searchDepth":57,"depth":57,"links":220},[221,222,223,224],{"id":16,"depth":57,"text":17},{"id":131,"depth":57,"text":132},{"id":190,"depth":57,"text":191},{"id":202,"depth":57,"text":203},"2026-10-03","How to prerender a Nuxt 3 site, check that crawlers receive full HTML, and deploy it to Vercel.","md",{},true,"\u002Fblog\u002Fnuxt-prerendering-on-vercel",{"title":5,"description":226},"blog\u002Fnuxt-prerendering-on-vercel",[234,235],"nuxt","vercel","TjUE2lAESftwzOqZaz3nQ2mSTJJwyg9iDNX5DNsuUd0",1791287285668]