[{"data":1,"prerenderedAt":1071},["ShallowReactive",2],{"blog-seo-for-ai-agents-vue-nuxt":3},{"id":4,"title":5,"author":6,"authorSlug":7,"body":8,"date":1039,"description":1040,"extension":1041,"faq":1042,"featured":1058,"image":1059,"meta":1060,"navigation":884,"path":1061,"readTime":1062,"seo":1063,"stem":1064,"tags":1065,"__hash__":1070},"blog\u002Fblog\u002Fseo-for-ai-agents-vue-nuxt.md","SEO Optimization for AI Agents: A Practical Vue and Nuxt Guide","Pavel Mironov","pavel-mironov",{"type":9,"value":10,"toc":1025},"minimark",[11,15,18,23,69,73,84,87,97,103,106,110,113,306,309,367,371,378,381,429,432,436,439,480,658,668,672,675,730,734,737,775,779,782,785,802,806,809,847,850,854,866,869,873,998,1002,1005,1016,1021],[12,13,14],"p",{},"Search has quietly split in two. Alongside the ranked list of blue links, a growing share of queries now get answered directly — by Google's AI Overviews, by ChatGPT search, by Perplexity, by Claude fetching a page mid-conversation. For a website, that means there are now two audiences to write and build for: people scanning search results, and language models trying to extract, summarize, and cite your content in real time.",[12,16,17],{},"This guide combines Google's and Bing's own AI-search documentation, OpenAI's crawler docs, and academic research on Generative Engine Optimization (GEO) into one practical framework — with Vue and Nuxt specifics for the technical parts. Where the evidence is solid, it says so plainly. Where it's still experimental, it says that too.",[19,20,22],"h2",{"id":21},"tldr","TL;DR",[24,25,26,34,45,51,57,63],"ul",{},[27,28,29,33],"li",{},[30,31,32],"strong",{},"GEO\u002FAEO is not a separate discipline from SEO."," Google's AI features run on the same crawling, indexing, and ranking systems as regular Search — there's no secret AI-only ranking factor to chase.",[27,35,36,39,40,44],{},[30,37,38],{},"AI crawlers are not one thing."," OpenAI, Google, Anthropic, and Perplexity each run separate bots for search inclusion vs. model training, and you can control them independently in ",[41,42,43],"code",{},"robots.txt",".",[27,46,47,50],{},[30,48,49],{},"Rendering mode is the single biggest technical risk."," Most AI crawlers don't execute JavaScript. Client-side-rendered pages are frequently invisible to them.",[27,52,53,56],{},[30,54,55],{},"Content that gets cited is specific, not vague."," Research shows adding statistics, direct quotations, and citations to source material measurably increases how often generative engines quote a page — keyword stuffing does not.",[27,58,59,62],{},[30,60,61],{},"llms.txt is experimental and unproven."," Google explicitly says it doesn't help. Treat it as a nice-to-have, not a strategy.",[27,64,65,68],{},[30,66,67],{},"You can't fully measure AI referrals yet."," Search Console, Bing Webmaster Tools, and analytics referral segments each show a partial picture.",[19,70,72],{"id":71},"geoaeo-compared-with-traditional-seo","GEO\u002FAEO Compared With Traditional SEO",[12,74,75,76,83],{},"\"Generative Engine Optimization\" (GEO) and \"Answer Engine Optimization\" (AEO) are the informal names for optimizing content to be selected and cited by AI systems, as opposed to ranked in a list of links. The terms come from outside the search engines themselves — most notably a widely-cited ",[77,78,82],"a",{"href":79,"rel":80},"https:\u002F\u002Farxiv.org\u002Fhtml\u002F2311.09735v3",[81],"nofollow","2024 research paper"," that framed GEO as a black-box optimization problem: given that generative engines synthesize an answer from several sources and attach inline citations, which changes to a page increase the odds it gets pulled into that answer?",[12,85,86],{},"That paper is a useful frame, but it's worth being precise about what's actually established versus experimental:",[12,88,89,92,93,96],{},[30,90,91],{},"Established (Google's own position):"," AI Overviews and AI Mode are built on Google's core Search ranking and quality systems. There is no separate technical requirement or special markup needed to appear in them — a page needs to be indexed, crawlable, and eligible for regular search results. Google's guidance goes further and explicitly debunks several popular \"AI SEO\" tactics: creating an ",[41,94,95],{},"llms.txt"," file, \"chunking\" content into AI-friendly fragments, and rewriting content specifically to sound more AI-friendly are all called out as not helping.",[12,98,99,102],{},[30,100,101],{},"Experimental (from the GEO research and industry practice):"," because generative engines still have to select which sources to quote from a candidate set, content-level choices can shift how often a given page is the one selected. The GEO paper's own testing found that adding quotations from experts (+41% on their visibility metric), adding statistics (+40%), and citing credible sources (+30%) produced the largest gains, while traditional keyword stuffing produced almost none. That's a meaningful signal, but it's a single study of specific generative systems at a specific point in time — treat the direction as useful and the exact percentages as illustrative, not guaranteed.",[12,104,105],{},"The practical takeaway: don't treat GEO as a replacement for SEO fundamentals, and don't chase AI-specific hacks that have no evidence behind them. Do treat \"write clearly, back claims with evidence, and structure content so a machine can parse it\" as good practice for both humans and AI systems at once.",[19,107,109],{"id":108},"ai-crawlers-and-robotstxt","AI Crawlers and robots.txt",[12,111,112],{},"Every major AI provider runs more than one crawler, and they are controlled separately. Conflating them is the most common mistake — disallowing \"AI bots\" wholesale can remove a site from ChatGPT search results while doing nothing to stop model training, or vice versa.",[114,115,116,135],"table",{},[117,118,119],"thead",{},[120,121,122,126,129,132],"tr",{},[123,124,125],"th",{},"Crawler",[123,127,128],{},"Operator",[123,130,131],{},"Purpose",[123,133,134],{},"Controlled via",[136,137,138,157,174,192,209,232,249,265,281],"tbody",{},[120,139,140,146,149,152],{},[141,142,143],"td",{},[41,144,145],{},"GPTBot",[141,147,148],{},"OpenAI",[141,150,151],{},"Crawls content to train OpenAI's models",[141,153,154,156],{},[41,155,43],{}," — disallow to opt out of training",[120,158,159,164,166,169],{},[141,160,161],{},[41,162,163],{},"OAI-SearchBot",[141,165,148],{},[141,167,168],{},"Indexes pages so they can appear in ChatGPT search results",[141,170,171,173],{},[41,172,43],{}," — allow to be eligible for citation",[120,175,176,181,183,186],{},[141,177,178],{},[41,179,180],{},"ChatGPT-User",[141,182,148],{},[141,184,185],{},"Fetches a page live when a user asks ChatGPT to visit it",[141,187,188,189,191],{},"User-triggered; ",[41,190,43],{}," rules may not always apply",[120,193,194,199,202,205],{},[141,195,196],{},[41,197,198],{},"Google-Extended",[141,200,201],{},"Google",[141,203,204],{},"Controls use of content for Gemini and AI features training, separate from regular Search indexing",[141,206,207],{},[41,208,43],{},[120,210,211,216,218,221],{},[141,212,213],{},[41,214,215],{},"Googlebot",[141,217,201],{},[141,219,220],{},"Standard crawling\u002Findexing that also feeds AI Overviews and AI Mode",[141,222,223,225,226,225,229],{},[41,224,43],{},", ",[41,227,228],{},"noindex",[41,230,231],{},"nosnippet",[120,233,234,239,242,245],{},[141,235,236],{},[41,237,238],{},"ClaudeBot",[141,240,241],{},"Anthropic",[141,243,244],{},"Crawls content to train Anthropic's models",[141,246,247,156],{},[41,248,43],{},[120,250,251,256,258,261],{},[141,252,253],{},[41,254,255],{},"Claude-SearchBot",[141,257,241],{},[141,259,260],{},"Indexes pages to improve search results shown in Claude",[141,262,263,173],{},[41,264,43],{},[120,266,267,272,274,277],{},[141,268,269],{},[41,270,271],{},"Claude-User",[141,273,241],{},[141,275,276],{},"Fetches a page live when a user asks Claude to visit it",[141,278,188,279,191],{},[41,280,43],{},[120,282,283,292,295,298],{},[141,284,285,288,289],{},[41,286,287],{},"PerplexityBot"," \u002F ",[41,290,291],{},"Perplexity-User",[141,293,294],{},"Perplexity",[141,296,297],{},"Indexing vs. live user-triggered fetches",[141,299,300,302,303,305],{},[41,301,43],{}," (partial; user-triggered fetches behave similarly to ",[41,304,180],{},")",[12,307,308],{},"A few practical rules:",[24,310,311,330,344,361],{},[27,312,313,314,318,319,322,323,325,326,329],{},"If you ",[315,316,317],"em",{},"want"," citations from ChatGPT, Claude, or Perplexity, make sure their ",[30,320,321],{},"search\u002Findexing"," bots aren't blocked — check your ",[41,324,43],{}," doesn't have a blanket ",[41,327,328],{},"Disallow: \u002F"," for these user agents.",[27,331,332,333,336,337,225,339,225,341,343],{},"If you want to opt out of your content being used for ",[30,334,335],{},"model training"," specifically, disallow the training-focused bots (",[41,338,145],{},[41,340,198],{},[41,342,238],{},") while still allowing the search-focused ones.",[27,345,346,347,350,351,225,353,225,355,357,358,360],{},"Bots that fetch pages because a ",[315,348,349],{},"user"," asked an AI assistant to (",[41,352,180],{},[41,354,271],{},[41,356,291],{},") behave more like a human clicking a link than a background crawler — some of these may not fully respect ",[41,359,43],{}," the way a scheduled crawl does, since they're acting on direct user intent.",[27,362,363,364,366],{},"Review this periodically. Crawler names and behavior have changed multiple times as these products evolve; don't treat a ",[41,365,43],{}," block list as a \"set once\" artifact.",[19,368,370],{"id":369},"semantic-html-and-crawlable-server-rendered-content","Semantic HTML and Crawlable Server-Rendered Content",[12,372,373,374,377],{},"None of the AI crawlers above execute JavaScript the way a browser does. They request a URL and parse whatever HTML comes back. If that HTML is a near-empty shell — a single ",[41,375,376],{},"\u003Cdiv id=\"app\">"," waiting for a client-side framework to hydrate it — there is nothing for the crawler to read, summarize, or cite.",[12,379,380],{},"This makes two things matter more for AI visibility than they might for a human audience reading in a modern browser:",[382,383,384,390],"ol",{},[27,385,386,389],{},[30,387,388],{},"The initial HTTP response must contain the real content",", not a loading state. This is a rendering-mode decision, covered below.",[27,391,392,395,396,399,400,403,404,225,407,225,410,225,413,416,417,420,421,424,425,428],{},[30,393,394],{},"Semantic HTML carries meaning that a language model uses to parse structure"," — ",[41,397,398],{},"\u003Ch1>","–",[41,401,402],{},"\u003Ch3>"," hierarchy, ",[41,405,406],{},"\u003Carticle>",[41,408,409],{},"\u003Cnav>",[41,411,412],{},"\u003Ctable>",[41,414,415],{},"\u003Cdl>"," for definitions, proper ",[41,418,419],{},"\u003Cbutton>","\u002F",[41,422,423],{},"\u003Ca>"," usage. A wall of unstyled ",[41,426,427],{},"\u003Cdiv>","s with visual formatting applied purely via CSS gives a crawler no structural signal about what's a heading, what's a list, and what's the primary content versus a sidebar.",[12,430,431],{},"Neither of these is AI-specific advice, exactly — they're accessibility and traditional SEO best practices that happen to matter even more once a non-rendering bot is the reader.",[19,433,435],{"id":434},"csr-vs-ssr-ssg-and-hybrid-rendering-in-vue-and-nuxt","CSR vs. SSR, SSG, and Hybrid Rendering in Vue and Nuxt",[12,437,438],{},"This is the single most consequential technical decision for AI (and traditional) crawlability, so it's worth being explicit about the trade-offs:",[24,440,441,447,453,466],{},[27,442,443,446],{},[30,444,445],{},"CSR (client-side rendering)"," — a plain Vite SPA. The server sends an empty shell; the browser runs JavaScript to render content. Googlebot queues these for a delayed, resource-limited second rendering pass with no guaranteed timeline, and most AI crawlers don't render JavaScript at all. Fine for authenticated dashboards and internal tools; a liability for any public, indexable page.",[27,448,449,452],{},[30,450,451],{},"SSR (server-side rendering)"," — a Vue\u002FNuxt server renders full HTML per request. Every crawler gets complete content immediately. Best for pages with personalized or frequently-changing content, at the cost of server compute per request.",[27,454,455,458,459,462,463,465],{},[30,456,457],{},"SSG (static site generation)"," — routes are pre-rendered to static HTML at build\u002Fdeploy time (",[41,460,461],{},"nuxt generate","). Ideal for marketing pages, documentation, and blog posts that don't need per-request data. This site is built this way: ",[41,464,461],{}," prerenders every route to static HTML served from a CDN, so every crawler — Googlebot, GPTBot, ClaudeBot, or a human — receives identical, complete HTML with no JavaScript execution required.",[27,467,468,471,472,475,476,479],{},[30,469,470],{},"ISR \u002F hybrid rendering"," — Nuxt's ",[41,473,474],{},"routeRules"," let you mix strategies per route: static generation for marketing pages, ",[41,477,478],{},"swr"," (stale-while-revalidate) for content that updates periodically, and full SSR reserved for genuinely dynamic or personalized routes.",[481,482,487],"pre",{"className":483,"code":484,"language":485,"meta":486,"style":486},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F nuxt.config.ts — mixing rendering strategies per route\nexport default defineNuxtConfig({\n  routeRules: {\n    '\u002Fblog\u002F**': { prerender: true },       \u002F\u002F static at build time\n    '\u002Fcase-studies\u002F**': { prerender: true },\n    '\u002Fdashboard\u002F**': { ssr: false },       \u002F\u002F CSR is fine — not indexable\n    '\u002Fpricing': { swr: 3600 },             \u002F\u002F ISR — revalidate hourly\n  },\n})\n","ts","",[41,488,489,498,520,533,565,588,615,643,649],{"__ignoreMap":486},[490,491,494],"span",{"class":492,"line":493},"line",1,[490,495,497],{"class":496},"sHwdD","\u002F\u002F nuxt.config.ts — mixing rendering strategies per route\n",[490,499,501,505,508,512,516],{"class":492,"line":500},2,[490,502,504],{"class":503},"s7zQu","export",[490,506,507],{"class":503}," default",[490,509,511],{"class":510},"s2Zo4"," defineNuxtConfig",[490,513,515],{"class":514},"sTEyZ","(",[490,517,519],{"class":518},"sMK4o","{\n",[490,521,523,527,530],{"class":492,"line":522},3,[490,524,526],{"class":525},"swJcz","  routeRules",[490,528,529],{"class":518},":",[490,531,532],{"class":518}," {\n",[490,534,536,539,542,545,547,550,553,555,559,562],{"class":492,"line":535},4,[490,537,538],{"class":518},"    '",[490,540,541],{"class":525},"\u002Fblog\u002F**",[490,543,544],{"class":518},"'",[490,546,529],{"class":518},[490,548,549],{"class":518}," {",[490,551,552],{"class":525}," prerender",[490,554,529],{"class":518},[490,556,558],{"class":557},"sfNiH"," true",[490,560,561],{"class":518}," },",[490,563,564],{"class":496},"       \u002F\u002F static at build time\n",[490,566,568,570,573,575,577,579,581,583,585],{"class":492,"line":567},5,[490,569,538],{"class":518},[490,571,572],{"class":525},"\u002Fcase-studies\u002F**",[490,574,544],{"class":518},[490,576,529],{"class":518},[490,578,549],{"class":518},[490,580,552],{"class":525},[490,582,529],{"class":518},[490,584,558],{"class":557},[490,586,587],{"class":518}," },\n",[490,589,591,593,596,598,600,602,605,607,610,612],{"class":492,"line":590},6,[490,592,538],{"class":518},[490,594,595],{"class":525},"\u002Fdashboard\u002F**",[490,597,544],{"class":518},[490,599,529],{"class":518},[490,601,549],{"class":518},[490,603,604],{"class":525}," ssr",[490,606,529],{"class":518},[490,608,609],{"class":557}," false",[490,611,561],{"class":518},[490,613,614],{"class":496},"       \u002F\u002F CSR is fine — not indexable\n",[490,616,618,620,623,625,627,629,632,634,638,640],{"class":492,"line":617},7,[490,619,538],{"class":518},[490,621,622],{"class":525},"\u002Fpricing",[490,624,544],{"class":518},[490,626,529],{"class":518},[490,628,549],{"class":518},[490,630,631],{"class":525}," swr",[490,633,529],{"class":518},[490,635,637],{"class":636},"sbssI"," 3600",[490,639,561],{"class":518},[490,641,642],{"class":496},"             \u002F\u002F ISR — revalidate hourly\n",[490,644,646],{"class":492,"line":645},8,[490,647,648],{"class":518},"  },\n",[490,650,652,655],{"class":492,"line":651},9,[490,653,654],{"class":518},"}",[490,656,657],{"class":514},")\n",[12,659,660,661,664,665,44],{},"Whatever mode you choose for a public page, verify it the same way a crawler would: view source (not the rendered DOM in DevTools), or ",[41,662,663],{},"curl"," the URL directly and confirm the response body already contains your headline and body copy — not just a ",[41,666,667],{},"\u003Cdiv id=\"__nuxt\">",[19,669,671],{"id":670},"metadata-json-ld-sitemaps-canonical-urls-and-indexnow","Metadata, JSON-LD, Sitemaps, Canonical URLs, and IndexNow",[12,673,674],{},"These are established SEO fundamentals that also directly feed AI systems, since AI Overviews and AI Mode are built on the same indexing pipeline as regular Search.",[24,676,677,686,708,714,724],{},[27,678,679,685],{},[30,680,681,684],{},[41,682,683],{},"useSeoMeta()"," on every page"," — title, meta description, Open Graph, and Twitter card tags. AI summarizers frequently lean on the meta description when a page lacks a clear opening paragraph, so don't leave it generic.",[27,687,688,691,692,695,696,699,700,703,704,707],{},[30,689,690],{},"JSON-LD structured data",", placed on the page it describes, using the most specific applicable schema.org type, and matching the visible content exactly. Google's structured-data policy is explicit that markup must reflect what's actually on the page — don't mark up content that isn't visible, and don't over-claim a schema type your page doesn't fully support. This site emits ",[41,693,694],{},"Organization"," and ",[41,697,698],{},"OfferCatalog"," JSON-LD on the homepage and ",[41,701,702],{},"BlogPosting"," JSON-LD (title, description, image, ",[41,705,706],{},"datePublished",", author, publisher) on every post automatically via the page template.",[27,709,710,713],{},[30,711,712],{},"Canonical URLs"," on every indexable page, especially where the same content is reachable through more than one path.",[27,715,716,719,720,723],{},[30,717,718],{},"A sitemap"," that's accurate and excludes pages you don't want indexed (",[41,721,722],{},"@nuxtjs\u002Fseo"," generates one automatically from your routes here, with explicit excludes for private\u002Fnoindex pages).",[27,725,726,729],{},[30,727,728],{},"IndexNow"," — a protocol, currently supported by Bing (and Yandex), that lets a site push a notification the moment a page is created, updated, or removed, instead of waiting for the next scheduled crawl. Bing's webmaster team now frames faster discovery via IndexNow as directly relevant to how quickly new or updated content can surface in Copilot and Bing's AI-generated answers — useful for anything time-sensitive, though it's a Bing\u002FYandex-specific mechanism, not a universal one Google or OpenAI consume.",[19,731,733],{"id":732},"writing-clear-factual-citation-friendly-content","Writing Clear, Factual, Citation-Friendly Content",[12,735,736],{},"Generative engines don't rank your page — they extract a fact, a number, or a sentence from it and attribute it. That changes what \"good content\" looks like at the paragraph level, on top of everything traditional SEO already asks for:",[24,738,739,745,751,757,763,769],{},[27,740,741,744],{},[30,742,743],{},"Answer the question directly, early."," A generative engine assembling a response favors a page where the relevant fact is stated plainly near the top of a section, not buried three paragraphs into scene-setting.",[27,746,747,750],{},[30,748,749],{},"Back claims with specifics."," The GEO research consistently found that adding concrete statistics and direct quotations from credible sources increased how often a passage got selected for citation — vague, generic prose performs worse than a page with the same information stated precisely.",[27,752,753,756],{},[30,754,755],{},"Cite your own sources."," Linking out to primary data or authoritative references — the same signal that's long mattered for E-E-A-T in traditional SEO — also correlated with higher citation rates for generative engines in the same research.",[27,758,759,762],{},[30,760,761],{},"Use structure a machine can parse without ambiguity",": headings that describe their section accurately, tables for comparisons, ordered lists for sequential steps.",[27,764,765,768],{},[30,766,767],{},"Don't rewrite for AI at the expense of readability."," Google explicitly flags \"rewriting content to be more AI-friendly\" as a debunked tactic — content optimized to be quotable by a machine should still read naturally to a person; if it doesn't, you've over-optimized.",[27,770,771,774],{},[30,772,773],{},"Skip keyword stuffing entirely."," It was already a weak SEO tactic; the GEO research found it produced close to zero benefit for generative engine visibility either.",[19,776,778],{"id":777},"authority-original-research-statistics-and-freshness","Authority, Original Research, Statistics, and Freshness",[12,780,781],{},"Both Google and the GEO research converge on the same underlying signal, even though they describe it differently: content that demonstrates real expertise and original insight — not a repackaged summary of what's already ranking — performs better in both traditional rankings and AI citation rates. Google's guidance is direct about this: create \"distinctive, non-commodity content\" with a genuine point of view, and avoid publishing near-duplicate pages targeting minor query variations, which its scaled-content-abuse policies treat as spam regardless of AI involvement.",[12,783,784],{},"Practical ways to build that signal:",[24,786,787,790,799],{},[27,788,789],{},"Publish original data, benchmarks, or findings from your own work where you have them, instead of only synthesizing third-party sources.",[27,791,792,793,420,795,798],{},"Attribute content to a named author with real, verifiable expertise (bio, credentials, other published work) rather than a generic \"Team\" byline — this also strengthens ",[41,794,702],{},[41,796,797],{},"Person"," structured data.",[27,800,801],{},"Keep genuinely time-sensitive content (pricing, version numbers, statistics, tool comparisons) up to date — both Google's AI features and Bing's AI Performance guidance call out freshness as a factor in whether content continues to surface in AI-generated answers.",[19,803,805],{"id":804},"measuring-ai-referrals-and-citations","Measuring AI Referrals and Citations",[12,807,808],{},"This is the least mature part of the stack today — there is no single dashboard that shows \"here's every time an AI system cited your page,\" and providers report data in intentionally different ways.",[24,810,811,821,831],{},[27,812,813,816,817,820],{},[30,814,815],{},"Google Search Console"," has a dedicated ",[315,818,819],{},"Generative AI performance"," report, separate from the standard Performance report, covering impressions and clicks that originated from AI Overviews and AI Mode.",[27,822,823,826,827,830],{},[30,824,825],{},"Bing Webmaster Tools"," recently introduced an ",[315,828,829],{},"AI Performance"," report (public preview) that tracks total citations, unique pages cited per day, the queries that triggered a citation (\"grounding queries\"), and page-level citation activity across Copilot and Bing's AI-generated summaries.",[27,832,833,836,837,225,840,225,843,846],{},[30,834,835],{},"Referral traffic in your analytics tool."," Segment referral sources for known AI-assistant domains (e.g. ",[41,838,839],{},"chatgpt.com",[41,841,842],{},"perplexity.ai",[41,844,845],{},"claude.ai",") to see actual click-through sessions, as distinct from citation-without-click impressions reported by the two tools above.",[12,848,849],{},"Treat all three as partial and directional rather than a complete picture — none of them currently expose the same granularity that traditional search analytics do, and that's expected to keep evolving.",[19,851,853],{"id":852},"llmstxt-an-experimental-approach","llms.txt: An Experimental Approach",[12,855,856,858,859,862,863,865],{},[41,857,95],{}," is a community-proposed convention — a plain-text or Markdown file at the site root summarizing a site's content for consumption by LLM-based tools. It is ",[315,860,861],{},"not"," a proven or officially adopted standard: Google's own AI optimization guidance explicitly lists \"creating ",[41,864,95],{}," or other AI-specific files\" among the tactics it says don't affect AI search visibility, and no major AI provider has published documentation confirming they read or prioritize it.",[12,867,868],{},"That said, it's cheap to produce, and some sites — including this one — publish one anyway as a lightweight, structured summary for whichever tools might choose to read it, generated automatically from existing content collections rather than maintained by hand. The honest framing: it's a low-cost bet with no confirmed payoff, not a substitute for crawlable HTML, clean structured data, and genuinely well-written content. Don't let it displace time spent on the things with actual evidence behind them.",[19,870,872],{"id":871},"practical-vuenuxt-implementation-checklist","Practical Vue\u002FNuxt Implementation Checklist",[24,874,877,893,903,912,923,929,953,966,972,978,984,990],{"className":875},[876],"contains-task-list",[27,878,881,886,887,889,890,892],{"className":879},[880],"task-list-item",[882,883],"input",{"disabled":884,"type":885},true,"checkbox"," Public, indexable pages render as full HTML on the first response — SSR, SSG (",[41,888,461],{},"), or ISR via ",[41,891,474],{},", never CSR-only.",[27,894,896,898,899,902],{"className":895},[880],[882,897],{"disabled":884,"type":885}," Verify with view-source or ",[41,900,901],{},"curl \u003Curl>"," that content is present without executing JavaScript.",[27,904,906,908,909,911],{"className":905},[880],[882,907],{"disabled":884,"type":885}," ",[41,910,683],{}," set on every page — title, description, Open Graph, canonical.",[27,913,915,917,918,920,921,44],{"className":914},[880],[882,916],{"disabled":884,"type":885}," JSON-LD structured data matches visible content exactly, uses the most specific applicable schema.org type, and isn't blocked by ",[41,919,43],{}," or ",[41,922,228],{},[27,924,926,928],{"className":925},[880],[882,927],{"disabled":884,"type":885}," Sitemap auto-generated and accurate; private\u002Fnoindex routes explicitly excluded.",[27,930,932,908,934,936,937,225,939,225,941,225,943,945,946,225,948,225,950,952],{"className":931},[880],[882,933],{"disabled":884,"type":885},[41,935,43],{}," reviewed crawler-by-crawler: search-focused bots (",[41,938,163],{},[41,940,215],{},[41,942,255],{},[41,944,287],{},") vs. training-focused bots (",[41,947,145],{},[41,949,198],{},[41,951,238],{},") controlled independently based on actual intent, not a blanket allow\u002Fdeny.",[27,954,956,958,959,420,961,420,963,965],{"className":955},[880],[882,957],{"disabled":884,"type":885}," Semantic HTML: correct heading hierarchy, ",[41,960,406],{},[41,962,409],{},[41,964,412],{}," used for their actual purpose.",[27,967,969,971],{"className":968},[880],[882,970],{"disabled":884,"type":885}," Content leads with a direct answer, backs claims with specific data or citations, and avoids AI-specific rewriting that hurts human readability.",[27,973,975,977],{"className":974},[880],[882,976],{"disabled":884,"type":885}," Named author with real expertise on long-form content, not a generic byline.",[27,979,981,983],{"className":980},[880],[882,982],{"disabled":884,"type":885}," Time-sensitive content (versions, pricing, comparisons) has an owner and a review cadence.",[27,985,987,989],{"className":986},[880],[882,988],{"disabled":884,"type":885}," Search Console's Generative AI performance report and Bing's AI Performance report checked periodically alongside standard analytics.",[27,991,993,908,995,997],{"className":992},[880],[882,994],{"disabled":884,"type":885},[41,996,95],{}," treated as optional polish, not a strategy — implemented only after everything above is solid.",[19,999,1001],{"id":1000},"where-to-go-from-here","Where to Go From Here",[12,1003,1004],{},"Most of this checklist is work Vue and Nuxt teams already know how to do — it's rendering strategy, structured data, and content quality, not a new discipline. The gap is usually prioritization: knowing which of these actually move the needle for AI visibility versus which are folklore.",[12,1006,1007,1008,1015],{},"If your team wants a structured pass through this — rendering audit, robots.txt and crawler review, structured data, and a content framework your writers can reuse — that's exactly what our ",[30,1009,1010],{},[77,1011,1014],{"href":1012,"rel":1013},"https:\u002F\u002Fepicmax.co\u002Fservices\u002Fai-ready-frontend-setup",[81],"AI-Ready Frontend Setup"," engagement covers for Vue and Nuxt codebases.",[1017,1018],"blog-button",{"label":1019,"to":1020},"Talk to an engineer","https:\u002F\u002Fcalendar.app.google\u002FXwRzASZitZRSVLxq6",[1022,1023,1024],"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 .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 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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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);}",{"title":486,"searchDepth":522,"depth":522,"links":1026},[1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038],{"id":21,"depth":500,"text":22},{"id":71,"depth":500,"text":72},{"id":108,"depth":500,"text":109},{"id":369,"depth":500,"text":370},{"id":434,"depth":500,"text":435},{"id":670,"depth":500,"text":671},{"id":732,"depth":500,"text":733},{"id":777,"depth":500,"text":778},{"id":804,"depth":500,"text":805},{"id":852,"depth":500,"text":853},{"id":871,"depth":500,"text":872},{"id":1000,"depth":500,"text":1001},"2026-09-08","How to make Vue and Nuxt websites easier for ChatGPT, Google AI Overviews, Claude, and Perplexity to crawl, understand, and cite — with a practical checklist.","md",[1043,1046,1049,1052,1055],{"question":1044,"answer":1045},"What is GEO (Generative Engine Optimization) and how is it different from SEO?","GEO is an emerging set of practices for increasing how often content gets cited inside AI-generated answers (ChatGPT, Google AI Overviews, Perplexity) rather than ranked as a blue link. It's not a replacement for SEO — Google is explicit that its AI features are built on the same crawling, indexing, and quality systems as regular Search. GEO adds a second, more experimental layer on top: writing in a way that's easy for a language model to extract, quote, and attribute, since generative engines synthesize answers from multiple sources instead of ranking a list of pages.",{"question":1047,"answer":1048},"Do I need to block or allow AI crawlers like GPTBot and ClaudeBot in robots.txt?","It depends on your goal, not a universal default. If you want to appear in ChatGPT search results, allow OAI-SearchBot. If you want to opt out of having your content used to train OpenAI's models, disallow GPTBot specifically — the two are controlled independently. The same pattern holds for Google (Googlebot vs. Google-Extended), Anthropic (Claude-SearchBot vs. ClaudeBot), and Perplexity (PerplexityBot). Blocking everything by default can quietly remove you from AI-generated answers; allowing everything by default means your content may be used for model training without your explicit input either way.",{"question":1050,"answer":1051},"Does adding an llms.txt file actually help my site get cited by AI tools?","There's no proven benefit. Google explicitly lists creating an llms.txt file among the tactics that don't help with AI search visibility, and no major AI provider has confirmed it reads or prioritizes one. It's a low-cost, experimental convention — some sites publish it anyway as a structured summary for any tool that might read it, but it should never substitute for crawlable HTML, clean semantic markup, and genuinely well-written content.",{"question":1053,"answer":1054},"Can a client-side rendered (CSR) Vue app get cited by ChatGPT or Google AI Overviews?","Not reliably. Most AI crawlers — including OpenAI's and Anthropic's — fetch raw HTML and don't execute JavaScript, so a CSR app that ships an empty \u003Cdiv id=\"app\"> is invisible to them even if Googlebot eventually renders it in a second pass. Public, SEO-critical pages should be pre-rendered as HTML via SSR, SSG, or ISR so every crawler — human-facing search bot or AI agent — receives full content on the first request.",{"question":1056,"answer":1057},"How do I measure whether AI tools are sending traffic to my site?","Three sources, none complete on its own: Google Search Console's Generative AI performance report (impressions and clicks from AI Overviews and AI Mode), Bing Webmaster Tools' AI Performance report (citations across Copilot and Bing's AI answers), and referral traffic segments in your analytics tool for known AI referrers such as chatgpt.com, perplexity.ai, and claude.ai. Treat all three as directional, since AI answer surfaces don't expose the same clickstream detail as traditional search results.",false,"\u002Fimages\u002Fblog\u002Fseo-for-ai-agents-vue-nuxt\u002Fcard.png",{},"\u002Fblog\u002Fseo-for-ai-agents-vue-nuxt","13 min read",{"title":5,"description":1040},"blog\u002Fseo-for-ai-agents-vue-nuxt",[1066,1067,1068,1069],"SEO","Nuxt","Vue.js","AI Agents","VF5DyHL6x3lSe3o_rc52dJUaG0CDa2ChbpOLC8csjSk",1788877513379]