[{"data":1,"prerenderedAt":680},["ShallowReactive",2],{"blog-tag-de-nuxt":3},[4,86,161,213,283,337,410,481,538,626],{"slug":5,"published":6,"minutes":7,"category":8,"tags":9,"tagPages":15,"keywords":18,"about":30,"sources":39,"cover":76,"og":77,"expertise":78,"locales":79,"lang":81,"title":83,"description":84,"coverAlt":85},"schema-org-structured-data-b2b-shop","2026-10-17",10,"web",[10,11,12,13,14],"Schema.org","Structured data","B2B e-commerce","Technical SEO","Nuxt",[16,17],"b2b-e-commerce","nuxt",[19,20,21,22,23,24,25,26,27,28,29],"schema.org b2b-shop","produkt strukturierte daten b2b","merchant listing strukturierte daten","product snippet vs merchant listing","unitpricespecification grundpreis","productgroup varianten strukturierte daten","organization schema umsatzsteuer-id","b2b-preise hinter login seo","json-ld nuxt schema.org","merchant return policy schema","mpn gtin schema",[31,33,36],{"name":10,"url":32},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSchema.org",{"name":34,"url":35},"JSON-LD","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON-LD",{"name":37,"url":38},"Business-to-business","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBusiness-to-business",[40,43,46,49,52,55,58,61,64,67,70,73],{"title":41,"url":42},"Google Search Central: Introduction to Product structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct",{"title":44,"url":45},"Google Search Central: Merchant listing (Product, Offer) structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fmerchant-listing",{"title":47,"url":48},"Google Search Central: Product snippet structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct-snippet",{"title":50,"url":51},"Google Search Central: Product variant structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fproduct-variants",{"title":53,"url":54},"Google Search Central: Organization structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Forganization",{"title":56,"url":57},"Google Search Central: Merchant return policy structured data","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Freturn-policy",{"title":59,"url":60},"Google Search Central: General structured data guidelines","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fsd-policies",{"title":62,"url":63},"Google Search Central: Generate structured data with JavaScript","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fappearance\u002Fstructured-data\u002Fgenerate-structured-data-with-javascript",{"title":65,"url":66},"Schema.org: Offer","https:\u002F\u002Fschema.org\u002FOffer",{"title":68,"url":69},"Schema.org: UnitPriceSpecification","https:\u002F\u002Fschema.org\u002FUnitPriceSpecification",{"title":71,"url":72},"Unhead: Product schema (defineProduct)","https:\u002F\u002Funhead.unjs.io\u002Fdocs\u002Fschema-org\u002Fapi\u002Fschema\u002Fproduct",{"title":74,"url":75},"Nuxt SEO: Schema.org identity setup","https:\u002F\u002Fnuxtseo.com\u002Fdocs\u002Fschema-org\u002Fguides\u002Fsetup-identity","\u002Fimages\u002Fblog\u002Fschema-org-structured-data-b2b-shop\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fschema-org-structured-data-b2b-shop\u002Fog.jpg","b2b-ecommerce-developer",[80,81,82],"en","de","hu","Schema.org-Strukturdaten für B2B-Shops: Preise hinter Logins, Einheiten und Varianten","Produkt-Markup für B2B-Shops: Snippet oder Händlereintrag, welcher Preis, Artikelnummern, Grundpreise, Varianten, Organization und SSR in Nuxt.","Schema.org für B2B-Shops: Ein Roboter liest ein Etikett im Ladenregal, eine Kiste hinter verschlossener Glastür.",{"slug":87,"published":6,"minutes":88,"category":8,"tags":89,"tagPages":94,"keywords":95,"about":107,"sources":117,"cover":154,"og":155,"expertise":156,"locales":157,"lang":81,"title":158,"description":159,"coverAlt":160},"vue-ai-chat-ui-streaming-accessibility",11,[90,14,91,92,93],"Vue","Accessibility","Streaming","AI chat",[17],[96,97,98,99,100,101,102,103,104,105,106],"vue ki-chat-ui","streaming-antworten nuxt","sse vs fetch streaming vergleich","aria-live streaming-text","barrierefreie chat-oberfläche","fetch-stream abbrechen vue","dompurify markdown-rendering","role=log chat","reduced motion chat-oberfläche","wcag 2.2 chat-ui","screenreader streaming",[108,111,114],{"name":109,"url":110},"Web accessibility","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWeb_accessibility",{"name":112,"url":113},"Server-sent events","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",{"name":115,"url":116},"Vue.js","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FVue.js",[118,121,124,127,130,133,136,139,142,145,148,151],{"title":119,"url":120},"MDN: Using server-sent events","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FServer-sent_events\u002FUsing_server-sent_events",{"title":122,"url":123},"MDN: AbortController","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FAbortController",{"title":125,"url":126},"MDN: ReadableStream","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FReadableStream",{"title":128,"url":129},"MDN: TextDecoderStream","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAPI\u002FTextDecoderStream",{"title":131,"url":132},"MDN: ARIA log role","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FAccessibility\u002FARIA\u002FReference\u002FRoles\u002Flog_role",{"title":134,"url":135},"W3C: Understanding SC 4.1.3 Status Messages","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Fstatus-messages.html",{"title":137,"url":138},"W3C WAI: What's new in WCAG 2.2","https:\u002F\u002Fwww.w3.org\u002FWAI\u002Fstandards-guidelines\u002Fwcag\u002Fnew-in-22\u002F",{"title":140,"url":141},"MDN: prefers-reduced-motion","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FCSS\u002F@media\u002Fprefers-reduced-motion",{"title":143,"url":144},"DOMPurify README","https:\u002F\u002Fgithub.com\u002Fcure53\u002FDOMPurify",{"title":146,"url":147},"markdown-it README","https:\u002F\u002Fgithub.com\u002Fmarkdown-it\u002Fmarkdown-it",{"title":149,"url":150},"AI SDK docs: useChat","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-ui\u002Fchatbot",{"title":152,"url":153},"Vue docs: nextTick","https:\u002F\u002Fvuejs.org\u002Fapi\u002Fgeneral.html#nexttick","\u002Fimages\u002Fblog\u002Fvue-ai-chat-ui-streaming-accessibility\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fvue-ai-chat-ui-streaming-accessibility\u002Fog.jpg","vue-nuxt-developer",[80,81,82],"Streaming-Chat mit KI in Vue und Nuxt: von Anfang an barrierefrei","KI-Chat in Vue oder Nuxt: Fetch-Streams, Abbruch und Retry, sicheres Markdown-Rendering, aria-live-Meldungen, Tastaturnavigation und Reduced Motion.","Streaming-Chat in Vue und Nuxt: Sprechblasen erscheinen nacheinander im Chatfenster, davor Kopfhörer und eine Taste.",{"slug":162,"published":163,"minutes":164,"category":8,"tags":165,"tagPages":170,"keywords":171,"about":182,"sources":191,"cover":207,"og":208,"expertise":156,"locales":209,"lang":81,"title":210,"description":211,"coverAlt":212},"nuxt-i18n-multilingual-seo-hreflang","2026-10-16",8,[14,166,167,168,169],"i18n","SEO","hreflang","Multilingual",[17],[172,173,174,175,176,177,178,179,180,181],"nuxt i18n seo einrichten","nuxt hreflang einrichten","uselocalehead anleitung","nuxt i18n canonicals","hreflang x-default regeln","prefix_except_default strategie","mehrsprachiges seo nuxt","nuxt i18n sitemap mit hreflang","hreflang selbstreferenzierend","nuxt i18n baseurl konfigurieren",[183,185,188],{"name":14,"url":184},"https:\u002F\u002Fnuxt.com\u002F",{"name":186,"url":187},"Hreflang","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHreflang",{"name":189,"url":190},"Internationalization and localization","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FInternationalization_and_localization",[192,195,198,201,204],{"title":193,"url":194},"Nuxt i18n docs: SEO (useLocaleHead)","https:\u002F\u002Fi18n.nuxtjs.org\u002Fdocs\u002Fguide\u002Fseo",{"title":196,"url":197},"Nuxt i18n docs: Routing strategies","https:\u002F\u002Fi18n.nuxtjs.org\u002Fdocs\u002Fguide",{"title":199,"url":200},"Google Search Central: Tell Google about localized versions of your page","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fspecialty\u002Finternational\u002Flocalized-versions",{"title":202,"url":203},"Google Search Central: Managing multi-regional and multilingual sites","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fspecialty\u002Finternational\u002Fmanaging-multi-regional-sites",{"title":205,"url":206},"Google Search Central: How to specify a canonical URL","https:\u002F\u002Fdevelopers.google.com\u002Fsearch\u002Fdocs\u002Fcrawling-indexing\u002Fconsolidate-duplicate-urls","\u002Fimages\u002Fblog\u002Fnuxt-i18n-multilingual-seo-hreflang\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-i18n-multilingual-seo-hreflang\u002Fog.jpg",[80,81,82],"Mehrsprachiges SEO mit Nuxt i18n: URL-Strategie, hreflang, Canonicals und Sitemaps","So richtet man Nuxt i18n ein, damit Suchmaschinen jede Sprache indexieren: Routing-Strategie, useLocaleHead, hreflang-Regeln, Teilübersetzungen, Sitemaps.","Mehrsprachiges SEO mit Nuxt i18n: Ein Wegweiser mit drei Pfeilen zeigt auf drei Häuser, unten ein Globus.",{"slug":214,"published":163,"minutes":215,"category":8,"tags":216,"tagPages":221,"keywords":223,"about":236,"sources":243,"cover":277,"og":278,"expertise":156,"locales":279,"lang":81,"title":280,"description":281,"coverAlt":282},"llm-endpoint-abuse-denial-of-wallet",14,[14,217,218,219,220],"LLM security","Rate limiting","OWASP","Cost control",[17,222],"llm-security",[224,225,226,227,228,229,230,231,232,233,234,235],"denial of wallet ki-endpunkte","owasp llm10 unbegrenzter verbrauch","rate-limiting ki-api nuxt","nuxt sicherheit rate limiter","openai api-key im frontend schützen","llm-token-budget pro nutzer","llm-kosten begrenzen pro nutzer","nitro api rate-limiting","cloudflare turnstile nuxt einbinden","anthropic ausgabenlimit","openai hartes ausgabenlimit","llm-prompt-größenlimit",[237,239,242],{"name":218,"url":238},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",{"name":240,"url":241},"Denial-of-service attack","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FDenial-of-service_attack",{"name":14,"url":184},[244,247,250,253,256,259,262,265,268,271,274],{"title":245,"url":246},"OWASP GenAI Security Project: LLM10:2025 Unbounded Consumption","https:\u002F\u002Fgenai.owasp.org\u002Fllmrisk\u002Fllm102025-unbounded-consumption\u002F",{"title":248,"url":249},"Nuxt Security: Rate Limiter middleware","https:\u002F\u002Fnuxt-security.vercel.app\u002Fmiddleware\u002Frate-limiter",{"title":251,"url":252},"Nuxt Security: Request Size Limiter middleware","https:\u002F\u002Fnuxt-security.vercel.app\u002Fmiddleware\u002Frequest-size-limiter",{"title":254,"url":255},"nuxt-auth-utils: README (GitHub)","https:\u002F\u002Fgithub.com\u002Fatinux\u002Fnuxt-auth-utils",{"title":257,"url":258},"h3: request utilities (getRequestIP, readValidatedBody)","https:\u002F\u002Fh3.dev\u002Futils\u002Frequest",{"title":260,"url":261},"Upstash: Ratelimiting algorithms","https:\u002F\u002Fupstash.com\u002Fdocs\u002Fredis\u002Fsdks\u002Fratelimit-ts\u002Falgorithms",{"title":263,"url":264},"Cloudflare Turnstile: Validate the token","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fturnstile\u002Fget-started\u002Fserver-side-validation\u002F",{"title":266,"url":267},"Claude Platform Docs: Rate limits and spend limits","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fapi\u002Frate-limits",{"title":269,"url":270},"Claude Platform Docs: Token counting","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Ftoken-counting",{"title":272,"url":273},"OpenAI API Docs: Spend limits","https:\u002F\u002Fdevelopers.openai.com\u002Fapi\u002Fdocs\u002Fguides\u002Fspend-limits",{"title":275,"url":276},"OpenAI API Docs: Rate limits","https:\u002F\u002Fplatform.openai.com\u002Fdocs\u002Fguides\u002Frate-limits","\u002Fimages\u002Fblog\u002Fllm-endpoint-abuse-denial-of-wallet\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllm-endpoint-abuse-denial-of-wallet\u002Fog.jpg",[80,81,82],"Denial of Wallet: öffentliche LLM-Endpunkte in einer Nuxt-App absichern","Denial of Wallet auf öffentlichen LLM-Routen in Nuxt stoppen: Auth, Rate Limits, Prompt-Limits, Token-Budgets, Turnstile und Spend Limits.","Denial of Wallet: Ein Drehkreuz bremst eine Schlange kleiner Roboter vor einer offenen Geldbörse.",{"slug":284,"published":285,"minutes":286,"category":8,"tags":287,"tagPages":291,"keywords":293,"about":301,"sources":308,"cover":330,"og":331,"expertise":332,"locales":333,"lang":81,"title":334,"description":335,"coverAlt":336},"llms-txt-vs-markdown-content-negotiation","2026-10-07",9,[288,289,290,14],"llms.txt","Content negotiation","AI agents",[292,17],"ai-agents",[288,294,295,296,297,298,299,300],"markdown für agenten","content negotiation markdown","ki-crawler","generative engine optimization","accept text\u002Fmarkdown header setzen","llms-full.txt","agentenfähige website",[302,305],{"name":303,"url":304},"Markdown","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMarkdown",{"name":306,"url":307},"Hypertext Transfer Protocol","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHypertext_Transfer_Protocol",[309,312,315,318,321,324,327],{"title":310,"url":311},"llmstxt.org: The \u002Fllms.txt file (proposal, version 2)","https:\u002F\u002Fllmstxt.org\u002F",{"title":313,"url":314},"llmstxt.org: Changes from v1 to v2","https:\u002F\u002Fllmstxt.org\u002Fchanges.html",{"title":316,"url":317},"Cloudflare changelog: Markdown for Agents (12 February 2026)","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fchangelog\u002Fpost\u002F2026-02-12-markdown-for-agents\u002F",{"title":319,"url":320},"Cloudflare docs: Markdown for Agents","https:\u002F\u002Fdevelopers.cloudflare.com\u002Ffundamentals\u002Freference\u002Fmarkdown-for-agents\u002F",{"title":322,"url":323},"Ahrefs: 137K sites analyzed, 97% of llms.txt files never get read (June 2026)","https:\u002F\u002Fahrefs.com\u002Fblog\u002Fllmstxt-study\u002F",{"title":325,"url":326},"Checkly: The current state of content negotiation for AI agents (February 2026)","https:\u002F\u002Fwww.checklyhq.com\u002Fblog\u002Fstate-of-ai-agent-content-negotation\u002F",{"title":328,"url":329},"Suganthan: tracking Cloudflare Markdown for Agents on one site","https:\u002F\u002Fsuganthan.com\u002Fblog\u002Fcloudflare-markdown-for-agents\u002F","\u002Fimages\u002Fblog\u002Fllms-txt-vs-markdown-content-negotiation\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fllms-txt-vs-markdown-content-negotiation\u002Fog.jpg","ai-engineer",[80,81,82],"llms.txt versus Markdown Content Negotiation: was Agenten wirklich abrufen","llms.txt ist ein Vorschlag, Markdown Content Negotiation ein Header. Was Agenten abrufen, was Logs zeigen und wie du beides aus Nuxt und nginx lieferst.","llms.txt vs. Content Negotiation: Ein Roboter an einer Theke greift an einer kurzen Karte vorbei nach einer vollen Seite.",{"slug":338,"published":339,"updated":163,"minutes":88,"category":8,"tags":340,"tagPages":345,"keywords":346,"about":357,"sources":367,"cover":404,"og":405,"expertise":156,"locales":406,"lang":81,"title":407,"description":408,"coverAlt":409},"nuxt-caching-isr-commerce","2026-10-05",[14,341,342,343,344],"Caching","ISR","Headless commerce","Cache invalidation",[17],[347,348,349,350,351,352,353,354,355,356],"nuxt route rules cachen","nuxt isr erklärt","nitro cache swr einrichten","cache-invalidierung per cache-tag","nuxt isr cloudflare einrichten","stale-while-revalidate shop","headless commerce cache","vercel isr preise","cdn cache-key vary","personalisierte preise im cache",[358,361,364],{"name":359,"url":360},"Content delivery network","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContent_delivery_network",{"name":362,"url":363},"Cache (computing)","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCache_(computing)",{"name":365,"url":366},"Static site generator","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FStatic_site_generator",[368,371,374,377,380,383,386,389,392,395,398,401],{"title":369,"url":370},"Nuxt docs: rendering modes and route rules (v4)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fconcepts\u002Frendering",{"title":372,"url":373},"Nuxt blog: Nuxt 4.3 release (ISR and SWR payload extraction)","https:\u002F\u002Fnuxt.com\u002Fblog\u002Fv4-3",{"title":375,"url":376},"Nitro docs: caching","https:\u002F\u002Fnitro.build\u002Fguide\u002Fcache",{"title":378,"url":379},"Cloudflare docs: default cache behavior","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcache\u002Fconcepts\u002Fdefault-cache-behavior\u002F",{"title":381,"url":382},"Cloudflare docs: purge by tags","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcache\u002Fhow-to\u002Fpurge-cache\u002Fpurge-by-tags\u002F",{"title":384,"url":385},"Cloudflare docs: Workers Cache","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fworkers\u002Fcache\u002F",{"title":387,"url":388},"Cloudflare docs: cache responses (CF-Cache-Status)","https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcache\u002Fconcepts\u002Fcache-responses\u002F",{"title":390,"url":391},"Vercel docs: incremental static regeneration","https:\u002F\u002Fvercel.com\u002Fdocs\u002Fincremental-static-regeneration",{"title":393,"url":394},"Vercel docs: response headers (x-vercel-cache)","https:\u002F\u002Fvercel.com\u002Fdocs\u002Fheaders\u002Fresponse-headers",{"title":396,"url":397},"Shopify docs: Hydrogen caching strategies","https:\u002F\u002Fshopify.dev\u002Fdocs\u002Fstorefronts\u002Fheadless\u002Fhydrogen\u002Fcaching",{"title":399,"url":400},"RFC 5861: HTTP Cache-Control extensions for stale content","https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc5861",{"title":402,"url":403},"Regulation (EU) 2016\u002F679 (GDPR), EUR-Lex","https:\u002F\u002Feur-lex.europa.eu\u002Feli\u002Freg\u002F2016\u002F679\u002Foj","\u002Fimages\u002Fblog\u002Fnuxt-caching-isr-commerce\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-caching-isr-commerce\u002Fog.jpg",[80,81,82],"Caching eines Headless-Commerce-Frontends in Nuxt: Route Rules, ISR und Purge","So cachen Sie ein Headless-Commerce-Frontend in Nuxt: Route Rules, Nitro- und CDN-Schlüssel, ISR-Grenzen, Tag-Purge und Kundenpreise ohne geteilten Cache.","Nuxt-Caching für Commerce: Eine Seite gleitet aus gestapelten Cache-Fächern, daneben eine Uhr.",{"slug":411,"published":412,"updated":163,"minutes":88,"category":8,"tags":413,"tagPages":417,"keywords":418,"about":429,"sources":438,"cover":475,"og":476,"expertise":156,"locales":477,"lang":81,"title":478,"description":479,"coverAlt":480},"nuxt-security-module","2026-10-02",[14,414,415,218,416],"Content Security Policy","HTTP security headers","Nitro",[17],[419,420,421,422,423,424,425,426,427,428],"nuxt security modul","nuxt csp nonce","nuxt security header setzen","nitro route rules sicherheit","nuxt rate-limiter einrichten","nuxt cors server-routen","csp report-uri nuxt einrichten","nuxt csrf schutz","sichere nuxt-app checkliste","nuxt csp strict-dynamic probleme",[430,432,435],{"name":414,"url":431},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FContent_Security_Policy",{"name":433,"url":434},"Cross-site scripting","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCross-site_scripting",{"name":436,"url":437},"Cross-origin resource sharing","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCross-origin_resource_sharing",[439,442,445,448,451,454,457,460,463,466,469,472],{"title":440,"url":441},"Nuxt Security README (main branch)","https:\u002F\u002Fgithub.com\u002FBaroshem\u002Fnuxt-security\u002Fblob\u002Fmain\u002FREADME.md",{"title":443,"url":444},"Nuxt Security default configuration (src\u002FdefaultConfig.ts)","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fsrc\u002FdefaultConfig.ts",{"title":446,"url":447},"Nuxt Security docs: Content Security Policy","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F2.headers\u002F1.csp.md",{"title":449,"url":450},"Nuxt Security docs: rate limiter","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F3.middleware\u002F1.rate-limiter.md",{"title":452,"url":453},"Nuxt Security docs: CORS handler","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F3.middleware\u002F4.cors-handler.md",{"title":455,"url":456},"Nuxt Security docs: CSRF","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F3.middleware\u002F7.csrf.md",{"title":458,"url":459},"Nuxt Security docs: hooks","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F5.advanced\u002F4.hooks.md",{"title":461,"url":462},"Nuxt Security docs: security headers","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F5.advanced\u002F5.security-headers.md",{"title":464,"url":465},"Nuxt Security docs: improving security","https:\u002F\u002Fraw.githubusercontent.com\u002FBaroshem\u002Fnuxt-security\u002Fmain\u002Fdocs\u002Fcontent\u002F5.advanced\u002F7.improve-security.md",{"title":467,"url":468},"Nuxt Security release v2.6.0 (12 May 2026)","https:\u002F\u002Fgithub.com\u002FBaroshem\u002Fnuxt-security\u002Freleases\u002Ftag\u002Fv2.6.0",{"title":470,"url":471},"MDN: HTTP Observatory","https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fobservatory",{"title":473,"url":474},"Playwright: Response class","https:\u002F\u002Fplaywright.dev\u002Fdocs\u002Fapi\u002Fclass-response","\u002Fimages\u002Fblog\u002Fnuxt-security-module\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-security-module\u002Fog.jpg",[80,81,82],"Eine Nuxt-App absichern: CSP, Header und Limits mit Nuxt Security","Wie das Modul Nuxt Security in der Praxis wirkt: sichere Standardwerte, Kompromisse des Strict-Modus, Nonce-CSP in SSR und SSG, Routenregeln und Limits.","Nuxt Security: Ein Schild mit drei Schlössern schützt ein Browserfenster.",{"slug":482,"published":483,"minutes":484,"category":8,"tags":485,"tagPages":487,"keywords":488,"about":499,"sources":506,"cover":532,"og":533,"expertise":78,"locales":534,"lang":81,"title":535,"description":536,"coverAlt":537},"headless-product-configurator-b2b","2026-09-14",12,[486,12,14,343],"Product configurator",[16,17],[489,490,491,492,493,494,495,496,497,498],"b2b produktkonfigurator","produktkonfigurator erstellen","produktkonfigurator typo3","b2b-konfigurator","headless produktkonfigurator","cpq angebotskonfigurator","regel-engine vs constraint solver","nuxt spryker glue-api","produktkonfigurator 100000 varianten","barrierefreier produktkonfigurator",[500,502,504],{"name":486,"url":501},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct_configurator",{"name":343,"url":503},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_commerce",{"name":14,"url":505},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FNuxt",[507,509,512,515,518,521,524,526,529],{"title":508,"url":501},"Wikipedia: Knowledge-based configuration (product configurator)",{"title":510,"url":511},"Google OR-Tools: The CP-SAT solver","https:\u002F\u002Fdevelopers.google.com\u002Foptimization\u002Fcp\u002Fcp_solver",{"title":513,"url":514},"Spryker documentation: Glue API, Product Configuration feature integration","https:\u002F\u002Fdocs.spryker.com\u002Fdocs\u002Fscos\u002Fdev\u002Ffeature-integration-guides\u002F202108.0\u002Fglue-api\u002Fglue-api-product-configuration-feature-integration.html",{"title":516,"url":517},"OWASP: Input Validation Cheat Sheet","https:\u002F\u002Fcheatsheetseries.owasp.org\u002Fcheatsheets\u002FInput_Validation_Cheat_Sheet.html",{"title":519,"url":520},"web.dev: Virtualize large lists","https:\u002F\u002Fweb.dev\u002Farticles\u002Fvirtualize-long-lists-react-window",{"title":522,"url":523},"W3C: Understanding SC 3.3.1 Error Identification (WCAG 2.2)","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Ferror-identification.html",{"title":525,"url":135},"W3C: Understanding SC 4.1.3 Status Messages (WCAG 2.2)",{"title":527,"url":528},"W3C: Understanding SC 2.5.8 Target Size (Minimum) (WCAG 2.2)","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FWCAG22\u002FUnderstanding\u002Ftarget-size-minimum.html",{"title":530,"url":531},"W3C WAI-ARIA Authoring Practices: Combobox pattern","https:\u002F\u002Fwww.w3.org\u002FWAI\u002FARIA\u002Fapg\u002Fpatterns\u002Fcombobox\u002F","\u002Fimages\u002Fblog\u002Fheadless-product-configurator-b2b\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fheadless-product-configurator-b2b\u002Fog.jpg",[80,81,82],"Headless B2B-Produktkonfigurator: Regeln, Preise und Nuxt auf einer Commerce-API","So baust du einen Headless-B2B-Produktkonfigurator: Regelwerk oder Solver, Preise auf dem Server, Nuxt auf einer Commerce-API, TYPO3 und 100k+ Varianten.","Headless B2B-Konfigurator: Eine Hand setzt einen Knauf auf eine Maschine, daneben Wechselteile und ein Preisschild.",{"slug":539,"published":540,"minutes":541,"category":8,"tags":542,"tagPages":546,"keywords":547,"about":558,"sources":563,"cover":620,"og":621,"expertise":156,"locales":622,"lang":81,"title":623,"description":624,"coverAlt":625},"nuxt-core-web-vitals-performance","2026-07-21",13,[543,14,544,545],"Core Web Vitals","Performance","E-commerce",[17],[548,549,550,551,552,553,554,555,556,557],"core web vitals nuxt-seiten","nuxt performance optimierung","lcp nuxt verbessern","inp nuxt hydration beheben","cls vue beheben","nuxt lazy hydration einrichten","nuxt image lcp optimieren","nuxt scripts drittanbieter","nuxt prerender vs ssr vs isr","core web vitals onlineshop",[559,561,562],{"name":543,"url":560},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCore_Web_Vitals",{"name":14,"url":505},{"name":115,"url":116},[564,567,570,573,576,579,582,585,588,591,593,596,599,602,605,608,611,614,617],{"title":565,"url":566},"web.dev: Web Vitals","https:\u002F\u002Fweb.dev\u002Farticles\u002Fvitals",{"title":568,"url":569},"web.dev: Largest Contentful Paint (LCP)","https:\u002F\u002Fweb.dev\u002Farticles\u002Flcp",{"title":571,"url":572},"web.dev: Optimize Largest Contentful Paint","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-lcp",{"title":574,"url":575},"web.dev: Interaction to Next Paint (INP)","https:\u002F\u002Fweb.dev\u002Farticles\u002Finp",{"title":577,"url":578},"web.dev: Optimize Cumulative Layout Shift","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-cls",{"title":580,"url":581},"web.dev: Optimize long tasks","https:\u002F\u002Fweb.dev\u002Farticles\u002Foptimize-long-tasks",{"title":583,"url":584},"Chrome for Developers: Chrome UX Report (CrUX)","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux",{"title":586,"url":587},"Chrome for Developers: CrUX methodology","https:\u002F\u002Fdeveloper.chrome.com\u002Fdocs\u002Fcrux\u002Fmethodology",{"title":589,"url":590},"GitHub: GoogleChrome\u002Fweb-vitals","https:\u002F\u002Fgithub.com\u002FGoogleChrome\u002Fweb-vitals",{"title":592,"url":370},"Nuxt docs: Rendering modes",{"title":594,"url":595},"Nuxt docs: Components (Lazy prefix, delayed hydration, client components)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fdirectory-structure\u002Fapp\u002Fcomponents",{"title":597,"url":598},"Nuxt docs: Experimental features (lazyHydration, payloadExtraction)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fgoing-further\u002Fexperimental-features",{"title":600,"url":601},"Nuxt docs: Data fetching (pick, transform, lazy)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fdata-fetching",{"title":603,"url":604},"Nuxt blog: Nuxt 4.5","https:\u002F\u002Fnuxt.com\u002Fblog\u002Fv4-5",{"title":606,"url":607},"GitHub: Nuxt releases","https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Freleases",{"title":609,"url":610},"Nuxt Image: NuxtImg","https:\u002F\u002Fimage.nuxt.com\u002Fusage\u002Fnuxt-img",{"title":612,"url":613},"Nuxt Fonts module","https:\u002F\u002Fnuxt.com\u002Fmodules\u002Ffonts",{"title":615,"url":616},"Nuxt Scripts: Getting started","https:\u002F\u002Fscripts.nuxt.com\u002Fdocs\u002Fgetting-started",{"title":618,"url":619},"Nuxt Scripts: Script triggers","https:\u002F\u002Fscripts.nuxt.com\u002Fdocs\u002Fguides\u002Fscript-triggers","\u002Fimages\u002Fblog\u002Fnuxt-core-web-vitals-performance\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-core-web-vitals-performance\u002Fog.jpg",[80,81,82],"Core Web Vitals für Nuxt-Sites und Shops: LCP, INP und CLS beheben","So behebst du LCP, INP und CLS in Nuxt-4-Shops: Bilder, Hydration, Fonts, Drittanbieter-Skripte, Prerender, SSR oder ISR und Messung mit echten Nutzern.","Core Web Vitals in Nuxt: Drei Armaturen-Anzeigen mit Nadeln im ruhigen Bereich hinter einem Lenkrad.",{"slug":627,"published":628,"updated":285,"minutes":286,"category":8,"tags":629,"tagPages":633,"keywords":634,"about":645,"sources":652,"cover":674,"og":675,"expertise":156,"locales":676,"lang":81,"title":677,"description":678,"coverAlt":679},"nuxt-llm-features-ai-sdk-streaming","2026-05-14",[14,630,92,631,632,416],"AI SDK","Structured output","Tool approval",[17],[635,636,637,638,639,640,641,642,643,644],"nuxt ki-features","ai sdk vue anleitung","nuxt server-route für llm","nuxt chat streaming","usechat @ai-sdk\u002Fvue beispiel","structured output json schema grenzen","tool-freigabe ki-agent","nitro api route modell-schlüssel","ki-verordnung artikel 50 chatbot nuxt","stopwhen stepcount",[646,647,649],{"name":14,"url":505},{"name":630,"url":648},"https:\u002F\u002Fai-sdk.dev",{"name":650,"url":651},"Zod","https:\u002F\u002Fzod.dev",[653,656,659,662,665,668,671],{"title":654,"url":655},"AI SDK docs: Vue.js (Nuxt) quickstart","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fgetting-started\u002Fnuxt",{"title":657,"url":658},"AI SDK docs: Generating structured data","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Fgenerating-structured-data",{"title":660,"url":661},"AI SDK docs: Tool approvals","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fagents\u002Ftool-approvals",{"title":663,"url":664},"Claude API docs: Structured outputs","https:\u002F\u002Fplatform.claude.com\u002Fdocs\u002Fen\u002Fbuild-with-claude\u002Fstructured-outputs",{"title":666,"url":667},"AI SDK docs: Telemetry","https:\u002F\u002Fai-sdk.dev\u002Fdocs\u002Fai-sdk-core\u002Ftelemetry",{"title":669,"url":670},"EU AI Act, Article 50: Transparency obligations","https:\u002F\u002Fartificialintelligenceact.eu\u002Farticle\u002F50\u002F",{"title":672,"url":673},"Faegre Drinker: Commission confirms the Transparency Code of Practice (Jul 2026)","https:\u002F\u002Fwww.faegredrinker.com\u002Fen\u002Finsights\u002Fpublications\u002F2026\u002F7\u002Feu-ai-act-commission-confirms-transparency-code-of-practice-as-adequate-and-publishes-final-version-of-its-guidelines-on-transparency-obligations","\u002Fimages\u002Fblog\u002Fnuxt-llm-features-ai-sdk-streaming\u002Fcover.webp","\u002Fimages\u002Fblog\u002Fnuxt-llm-features-ai-sdk-streaming\u002Fog.jpg",[80,81,82],"LLM-Features in Nuxt ausliefern: Streaming, strukturierte Ausgabe, Tool-Freigabe","Nuxt AI von vorn bis hinten: Server-Route, die den API-Key hält, Message-Parts, strikte strukturierte Ausgabe, Tools mit Freigabe, Fehler und Artikel 50.","LLM-Features in Nuxt: Ein Hahn füllt ein Glas in stetigem Strahl, daneben eine Hand über einem Bestätigungsknopf.",1793451238160]