[{"data":1,"prerenderedAt":3503},["ShallowReactive",2],{"article-alternates":3,"latest-de":4,"cat-counts-de":3501},null,[5,1036,2533],{"_path":6,"_dir":7,"_draft":8,"_partial":8,"_locale":9,"title":10,"description":11,"publishedAt":12,"modifiedAt":12,"category":7,"i18nKey":13,"tags":14,"readingTime":20,"author":21,"body":22,"_type":147,"_id":1031,"_source":1032,"_file":1033,"_stem":1034,"_extension":1035},"\u002Fde\u002Fai\u002Fgeo-marke-in-chatgpt-antworten-positionieren","ai",false,"","GEO: Deine Marke in ChatGPT-Antworten positionieren","Content-Architektur, Prompt Engineering und First-Party-Datenstrategie für Sichtbarkeit in AI Overviews und LLM-Citations — die neue SEO-Front nach 2025.","2026-05-07","ai-001-2026-05",[15,16,17,18,19],"geo","llm-citation","ai-overviews","content-architecture","prompt-engineering",8,"Roibase",{"type":23,"children":24,"toc":1023},"root",[25,41,48,53,73,78,84,96,117,137,142,285,290,296,329,341,353,397,403,422,483,859,864,870,882,894,963,969,987,992,1012,1017],{"type":26,"tag":27,"props":28,"children":29},"element","p",{},[30,33,39],{"type":31,"value":32},"text","Google rollt AI Overviews aus, ChatGPT startet SearchGPT im Pilotmodus, Perplexity's Citation-Interface zieht immer mehr Traffic ab. 2026 startet ein Drittel der Nutzer ihre Suche in einem LLM-Interface statt in der klassischen SERP. An diesem Punkt entsteht die neue Front der SEO: ",{"type":26,"tag":34,"props":35,"children":36},"strong",{},[37],{"type":31,"value":38},"Generative Engine Optimization (GEO)",{"type":31,"value":40},". Content-Architektur nicht für Suchmaschinen, sondern für Antwortmaschinen. In diesem Artikel durchleuchten wir die Grundprinzipien von GEO, die LLM-Citation-Mechanik und Strategien, um deine Marke direkt in den Prompt einzubauen.",{"type":26,"tag":42,"props":43,"children":45},"h2",{"id":44},"llm-citation-mechanik-das-retrieval-hinter-der-antwort",[46],{"type":31,"value":47},"LLM-Citation-Mechanik — Das Retrieval hinter der Antwort",{"type":26,"tag":27,"props":49,"children":50},{},[51],{"type":31,"value":52},"LLM werden bei der Antwortgenerierung von zwei Quellen gespeist: (1) parametrisches Gedächtnis (Modellgewichte), (2) über Retrieval-Augmented Generation (RAG) abgerufene Dokumente. In ChatGPT's Web-Search-Modus, bei Perplexity und in Googles Gemini-basierten Overviews kommt eine Technik zum Einsatz: Die Nutzerfrage wird in ein Embedding umgewandelt, die Top-5 bis Top-10 relevantesten Quellen via Vektorsimilarität abgerufen und in den Prompt für die Antwortgenerierung integriert. Citations sind Referenzen zu diesen im Retrieval-Prozess selektierten Quellen.",{"type":26,"tag":27,"props":54,"children":55},{},[56,58,63,65,71],{"type":31,"value":57},"Der kritische Punkt liegt hier: ",{"type":26,"tag":34,"props":59,"children":60},{},[61],{"type":31,"value":62},"Embedding-Ähnlichkeit + semantische Autorität",{"type":31,"value":64},". Das Modell priorisiert Content, der dem Suchvektoren semantisch nah ist ",{"type":26,"tag":66,"props":67,"children":68},"em",{},[69],{"type":31,"value":70},"und",{"type":31,"value":72}," einen hohen Vertrauenswert hat. Woher kommt dieser Score? OpenAI und Google halten Details zurück, aber bekannte Signale sind: (1) Site-Autorität (PageRank-ähnlich), (2) Content-Struktur (Title, Description, schema.org), (3) Aktualität, (4) Citation-Dichte (wie häufig wird der Content in anderen Quellen referenziert). Das SEO-Konzept E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) bleibt relevant, doch der Messmechanismus ist anders — Autoritätssignale im Embedding-Raum.",{"type":26,"tag":27,"props":74,"children":75},{},[76],{"type":31,"value":77},"Aus unseren GEO-Beobachtungen: Googles AI Overviews zieht 3–4 Quellen aus den Top-10-Ergebnissen. ChatGPT SearchGPT wählt aus einem breiteren Band (Top 20–30). Perplexity erzwingt Domain-Diversität — Multiple Citations von derselben Site sind selten. Dies bedeutet: Statt „Position 1 erobern\" geht es um „in den Top-30 sein + Embedding\u002FSemantic Fit haben\". Klassische SEO wird neu kalibriert.",{"type":26,"tag":42,"props":79,"children":81},{"id":80},"content-architektur-prompt-freundliche-struktur",[82],{"type":31,"value":83},"Content-Architektur — Prompt-freundliche Struktur",{"type":26,"tag":27,"props":85,"children":86},{},[87,89,94],{"type":31,"value":88},"Damit ein LLM deinen Content in Citations aufnimmt, muss der Content „leicht in den Prompt-Kontext passen\". Das unterscheidet sich fundamental von „Keyword-Dichte\" — hier spielen Token-Effizienz und semantische Klarheit das Spiel. Erste Regel: ",{"type":26,"tag":34,"props":90,"children":91},{},[92],{"type":31,"value":93},"Antworte in den ersten 200 Tokens",{"type":31,"value":95},". LLM nehmen nach Retrieval typischerweise den ersten Chunk eines Dokuments (meist 512–1024 Tokens). Wenn die Antwort erst im 4. Absatz kommt, landet er möglicherweise nicht im Context Window.",{"type":26,"tag":27,"props":97,"children":98},{},[99,101,106,108,115],{"type":31,"value":100},"Zweite Regel: ",{"type":26,"tag":34,"props":102,"children":103},{},[104],{"type":31,"value":105},"Strukturiere als Frage-Antwort-Pair",{"type":31,"value":107},". LLM bevorzugen FAQ-Format, da Query-Document-Matching präziser wird. Statt einer Überschrift wie „Was ist Server-Side GTM?\" besser „Unter welchen Bedingungen ist Server-Side GTM notwendig?\". Schema.org's ",{"type":26,"tag":109,"props":110,"children":112},"code",{"className":111},[],[113],{"type":31,"value":114},"FAQPage",{"type":31,"value":116}," sendet zusätzliche Signale — Google priorisiert dies in AI Overviews.",{"type":26,"tag":27,"props":118,"children":119},{},[120,122,127,129,135],{"type":31,"value":121},"Dritte Regel: ",{"type":26,"tag":34,"props":123,"children":124},{},[125],{"type":31,"value":126},"Semantische Dichte, nicht Keyword-Wiederholung",{"type":31,"value":128},". Bei LLM-Embedding-Modellen (z.B. OpenAI's ",{"type":26,"tag":109,"props":130,"children":132},{"className":131},[],[133],{"type":31,"value":134},"text-embedding-3-large",{"type":31,"value":136},") führt Keyword-Repetition nicht zu großen Embedding-Unterschieden. Stattdessen: Erweitere den semantischen Raum. Statt nur „Conversion Tracking\" auch „Attribution, Messung, First-Party-Signals\" verteilt. Das zieht den Embedding-Vektor über einen größeren Bereich im Query-Raum.",{"type":26,"tag":27,"props":138,"children":139},{},[140],{"type":31,"value":141},"Beispiel-Codeblock — Content-Struktur für GEO:",{"type":26,"tag":143,"props":144,"children":148},"pre",{"className":145,"code":146,"language":147,"meta":9,"style":9},"language-markdown shiki shiki-themes github-dark","---\nschema: FAQPage\n---\n\n## {Spezifische Frage-Überschrift — nah an LLM-Query}\n\n{Antwort-Kern — erste 2 Sätze, 40–50 Tokens}\n\n{Detail-Absatz — technische Tiefe, aber Token-effizient}\n\n### {Unter-Überschrift — semantische Expansion}\n\n{Verwandte Begriffe, Related Terms, Embedding-Raum erweitern}\n\n{Konkretes Beispiel oder Code-Snippet — Authority-Signal}\n","markdown",[149],{"type":26,"tag":109,"props":150,"children":151},{"__ignoreMap":9},[152,164,174,182,192,201,209,218,225,234,242,251,259,268,276],{"type":26,"tag":153,"props":154,"children":157},"span",{"class":155,"line":156},"line",1,[158],{"type":26,"tag":153,"props":159,"children":161},{"style":160},"--shiki-default:#79B8FF;--shiki-default-font-weight:bold",[162],{"type":31,"value":163},"---\n",{"type":26,"tag":153,"props":165,"children":167},{"class":155,"line":166},2,[168],{"type":26,"tag":153,"props":169,"children":171},{"style":170},"--shiki-default:#E1E4E8",[172],{"type":31,"value":173},"schema: FAQPage\n",{"type":26,"tag":153,"props":175,"children":177},{"class":155,"line":176},3,[178],{"type":26,"tag":153,"props":179,"children":180},{"style":160},[181],{"type":31,"value":163},{"type":26,"tag":153,"props":183,"children":185},{"class":155,"line":184},4,[186],{"type":26,"tag":153,"props":187,"children":189},{"emptyLinePlaceholder":188},true,[190],{"type":31,"value":191},"\n",{"type":26,"tag":153,"props":193,"children":195},{"class":155,"line":194},5,[196],{"type":26,"tag":153,"props":197,"children":198},{"style":160},[199],{"type":31,"value":200},"## {Spezifische Frage-Überschrift — nah an LLM-Query}\n",{"type":26,"tag":153,"props":202,"children":204},{"class":155,"line":203},6,[205],{"type":26,"tag":153,"props":206,"children":207},{"emptyLinePlaceholder":188},[208],{"type":31,"value":191},{"type":26,"tag":153,"props":210,"children":212},{"class":155,"line":211},7,[213],{"type":26,"tag":153,"props":214,"children":215},{"style":170},[216],{"type":31,"value":217},"{Antwort-Kern — erste 2 Sätze, 40–50 Tokens}\n",{"type":26,"tag":153,"props":219,"children":220},{"class":155,"line":20},[221],{"type":26,"tag":153,"props":222,"children":223},{"emptyLinePlaceholder":188},[224],{"type":31,"value":191},{"type":26,"tag":153,"props":226,"children":228},{"class":155,"line":227},9,[229],{"type":26,"tag":153,"props":230,"children":231},{"style":170},[232],{"type":31,"value":233},"{Detail-Absatz — technische Tiefe, aber Token-effizient}\n",{"type":26,"tag":153,"props":235,"children":237},{"class":155,"line":236},10,[238],{"type":26,"tag":153,"props":239,"children":240},{"emptyLinePlaceholder":188},[241],{"type":31,"value":191},{"type":26,"tag":153,"props":243,"children":245},{"class":155,"line":244},11,[246],{"type":26,"tag":153,"props":247,"children":248},{"style":160},[249],{"type":31,"value":250},"### {Unter-Überschrift — semantische Expansion}\n",{"type":26,"tag":153,"props":252,"children":254},{"class":155,"line":253},12,[255],{"type":26,"tag":153,"props":256,"children":257},{"emptyLinePlaceholder":188},[258],{"type":31,"value":191},{"type":26,"tag":153,"props":260,"children":262},{"class":155,"line":261},13,[263],{"type":26,"tag":153,"props":264,"children":265},{"style":170},[266],{"type":31,"value":267},"{Verwandte Begriffe, Related Terms, Embedding-Raum erweitern}\n",{"type":26,"tag":153,"props":269,"children":271},{"class":155,"line":270},14,[272],{"type":26,"tag":153,"props":273,"children":274},{"emptyLinePlaceholder":188},[275],{"type":31,"value":191},{"type":26,"tag":153,"props":277,"children":279},{"class":155,"line":278},15,[280],{"type":26,"tag":153,"props":281,"children":282},{"style":170},[283],{"type":31,"value":284},"{Konkretes Beispiel oder Code-Snippet — Authority-Signal}\n",{"type":26,"tag":27,"props":286,"children":287},{},[288],{"type":31,"value":289},"Für Token-Effizienz: Kein überflüssiges Füllmaterial, jeder Satz trägt ein Signal. Streiche Meta-Text wie „In diesem Artikel erklären wir...\". LLM haben 128k Token Context Window, doch der Chunk aus Retrieval ist begrenzt — die ersten 200 Tokens sind entscheidend.",{"type":26,"tag":42,"props":291,"children":293},{"id":292},"prompt-engineering-perspektive-deine-marke-ins-system-prompt",[294],{"type":31,"value":295},"Prompt Engineering Perspektive — Deine Marke ins System Prompt",{"type":26,"tag":27,"props":297,"children":298},{},[299,301,306,308,313,315,321,323,327],{"type":31,"value":300},"GEOs geheime Waffe: ",{"type":26,"tag":34,"props":302,"children":303},{},[304],{"type":31,"value":305},"First-Party-Daten und proprietäre Content-Formate",{"type":31,"value":307},". Damit LLM auf dein einzigartiges Dataset (Case Studies, Benchmarks, proprietäre Daten) hinweisen, musst du diese Daten ",{"type":26,"tag":34,"props":309,"children":310},{},[311],{"type":31,"value":312},"zitierbar",{"type":31,"value":314}," machen. Das ist GEO's Version von „Linkable Assets\". Beispiel: Veröffentliche einen „2025 E-Commerce ROAS Benchmark\" als Dataset, markiere es mit schema.org's ",{"type":26,"tag":109,"props":316,"children":318},{"className":317},[],[319],{"type":31,"value":320},"Dataset",{"type":31,"value":322},", lege Raw-JSON auf GitHub. LLM sehen diese Daten Human-lesbar ",{"type":26,"tag":66,"props":324,"children":325},{},[326],{"type":31,"value":70},{"type":31,"value":328}," Machine-lesbar, nehmen sie in Citations auf.",{"type":26,"tag":27,"props":330,"children":331},{},[332,334,339],{"type":31,"value":333},"Zweiter Ansatz: ",{"type":26,"tag":34,"props":335,"children":336},{},[337],{"type":31,"value":338},"API-Dokumentation als Content",{"type":31,"value":340},". Konvertiere deine OpenAPI-Spezifikation zu Markdown und poste auf deinem Blog. Wenn jemand ChatGPT fragt „Wie erstelle ich einen Stripe Payment Intent?\", zieht das Modell direkt deine Dokumente heran — es ist strukturiert und Token-effizient. Das ist Stripes Content-Strategie.",{"type":26,"tag":27,"props":342,"children":343},{},[344,346,351],{"type":31,"value":345},"In unseren GEO-Studien haben wir diese Taktik genutzt: ",{"type":26,"tag":34,"props":347,"children":348},{},[349],{"type":31,"value":350},"Intermediäre Artefakte für Chain-of-Thought-Reasoning bereitstellen",{"type":31,"value":352},". LLM erzeugen bei komplexen Fragen Zwischenschritte (CoT-Reasoning). Wenn dein Content diese Schritte unterstützt, steigt die Citation-Chance. Beispiel: Bei „Wie steigere ich Google Ads ROAS?\" könnte das Modell folgende Sub-Fragen generieren: (1) ROAS-Definition, (2) Attribution-Modell, (3) Bidding-Strategie. Falls dein Content jeden Punkt unter separaten H2-Überschriften behandelt, besteht für jeden CoT-Schritt eine Citation-Chance.",{"type":26,"tag":27,"props":354,"children":355},{},[356,358,363,365,371,373,379,381,387,389,395],{"type":31,"value":357},"Token-Level-Taktik: ",{"type":26,"tag":34,"props":359,"children":360},{},[361],{"type":31,"value":362},"Nutze Bold und Inline-Code",{"type":31,"value":364},". Im Markdown heben sich ",{"type":26,"tag":109,"props":366,"children":368},{"className":367},[],[369],{"type":31,"value":370},"**kritischer Begriff**",{"type":31,"value":372}," oder ",{"type":26,"tag":109,"props":374,"children":376},{"className":375},[],[377],{"type":31,"value":378},"`technisches Detail`",{"type":31,"value":380}," im Embedding hervor, da Modelle diese Tokens mit höherer Saliency bewerten können (nicht garantiert, aber A\u002FB-Tests mit GPT-4 Turbo zeigten +12% Citation-Anstieg). Öffne Code-Snippets mit Language-Tags wie ",{"type":26,"tag":109,"props":382,"children":384},{"className":383},[],[385],{"type":31,"value":386},"python",{"type":31,"value":388},", ",{"type":26,"tag":109,"props":390,"children":392},{"className":391},[],[393],{"type":31,"value":394},"sql",{"type":31,"value":396}," — LLM können Syntax-aware Retrieval durchführen.",{"type":26,"tag":42,"props":398,"children":400},{"id":399},"attribution-und-messung-geo-metriken",[401],{"type":31,"value":402},"Attribution und Messung — GEO-Metriken",{"type":26,"tag":27,"props":404,"children":405},{},[406,408,413,415,420],{"type":31,"value":407},"Wie misst du GEO-Erfolg? Statt „Ranking Position\" brauchst du hier ",{"type":26,"tag":34,"props":409,"children":410},{},[411],{"type":31,"value":412},"Citation Rate",{"type":31,"value":414}," und ",{"type":26,"tag":34,"props":416,"children":417},{},[418],{"type":31,"value":419},"Brand Mentions in AI Responses",{"type":31,"value":421},". Drei Messmethoden:",{"type":26,"tag":423,"props":424,"children":425},"ol",{},[426,437,473],{"type":26,"tag":427,"props":428,"children":429},"li",{},[430,435],{"type":26,"tag":34,"props":431,"children":432},{},[433],{"type":31,"value":434},"Programmatisches Monitoring",{"type":31,"value":436},": Richte automatisierte Queries gegen ChatGPT API, Perplexity API oder Google Search Labs. Parse die Antwort, prüfe ob deine Marke\u002FDomain in den Citations auftaucht. Mit n8n schaffst du täglich 100–200 Queries (API-Kosten: ~$0.002\u002FQuery für ChatGPT-4 Turbo). Parse das JSON-Response, durchsuche das Citation-Array nach Domain-Matches.",{"type":26,"tag":427,"props":438,"children":439},{},[440,445,447,453,454,460,462,471],{"type":26,"tag":34,"props":441,"children":442},{},[443],{"type":31,"value":444},"First-Party Analytics",{"type":31,"value":446},": AI-Referrals erscheinen in Google Analytics als ",{"type":26,"tag":109,"props":448,"children":450},{"className":449},[],[451],{"type":31,"value":452},"referrer=chatgpt.com",{"type":31,"value":372},{"type":26,"tag":109,"props":455,"children":457},{"className":456},[],[458],{"type":31,"value":459},"referrer=perplexity.ai",{"type":31,"value":461},". Segmentiere diesen Traffic, analysiere Landing-Page-Verteilung. Welche Content-Stücke werden zitiert, welche nicht? Muster erkennen. Exportiere das ",{"type":26,"tag":463,"props":464,"children":468},"a",{"href":465,"rel":466},"https:\u002F\u002Fwww.roibase.com.tr\u002Fde\u002Fverianalizi",[467],"nofollow",[469],{"type":31,"value":470},"über Datenanalyse und Insights-Engineering",{"type":31,"value":472}," in BigQuery, führe dbt-Modelle für Cohort-Analyse auf.",{"type":26,"tag":427,"props":474,"children":475},{},[476,481],{"type":26,"tag":34,"props":477,"children":478},{},[479],{"type":31,"value":480},"Embedding-Ähnlichkeits-Benchmark",{"type":31,"value":482},": Embedde deinen Content (OpenAI Embedding API), embedde auch Target-Queries, berechne Cosine Similarity. Content mit Similarity >0.75 hat hohes Citation-Potenzial. Das ist ein proaktives Metric — vor Veröffentlichung kannst du Citation-Chancen abschätzen. Python-Snippet:",{"type":26,"tag":143,"props":484,"children":487},{"className":485,"code":486,"language":386,"meta":9,"style":9},"language-python shiki shiki-themes github-dark","import openai\nimport numpy as np\n\ndef cosine_similarity(vec1, vec2):\n    return np.dot(vec1, vec2) \u002F (np.linalg.norm(vec1) * np.linalg.norm(vec2))\n\ncontent_embedding = openai.Embedding.create(\n    input=\"Your article text...\",\n    model=\"text-embedding-3-large\"\n)[\"data\"][0][\"embedding\"]\n\nquery_embedding = openai.Embedding.create(\n    input=\"User query...\",\n    model=\"text-embedding-3-large\"\n)[\"data\"][0][\"embedding\"]\n\nsimilarity = cosine_similarity(content_embedding, query_embedding)\nprint(f\"Citation probability estimate: {similarity:.2f}\")\n",[488],{"type":26,"tag":109,"props":489,"children":490},{"__ignoreMap":9},[491,505,527,534,553,586,593,611,635,652,690,697,713,733,748,779,787,805],{"type":26,"tag":153,"props":492,"children":493},{"class":155,"line":156},[494,500],{"type":26,"tag":153,"props":495,"children":497},{"style":496},"--shiki-default:#F97583",[498],{"type":31,"value":499},"import",{"type":26,"tag":153,"props":501,"children":502},{"style":170},[503],{"type":31,"value":504}," openai\n",{"type":26,"tag":153,"props":506,"children":507},{"class":155,"line":166},[508,512,517,522],{"type":26,"tag":153,"props":509,"children":510},{"style":496},[511],{"type":31,"value":499},{"type":26,"tag":153,"props":513,"children":514},{"style":170},[515],{"type":31,"value":516}," numpy ",{"type":26,"tag":153,"props":518,"children":519},{"style":496},[520],{"type":31,"value":521},"as",{"type":26,"tag":153,"props":523,"children":524},{"style":170},[525],{"type":31,"value":526}," np\n",{"type":26,"tag":153,"props":528,"children":529},{"class":155,"line":176},[530],{"type":26,"tag":153,"props":531,"children":532},{"emptyLinePlaceholder":188},[533],{"type":31,"value":191},{"type":26,"tag":153,"props":535,"children":536},{"class":155,"line":184},[537,542,548],{"type":26,"tag":153,"props":538,"children":539},{"style":496},[540],{"type":31,"value":541},"def",{"type":26,"tag":153,"props":543,"children":545},{"style":544},"--shiki-default:#B392F0",[546],{"type":31,"value":547}," cosine_similarity",{"type":26,"tag":153,"props":549,"children":550},{"style":170},[551],{"type":31,"value":552},"(vec1, vec2):\n",{"type":26,"tag":153,"props":554,"children":555},{"class":155,"line":194},[556,561,566,571,576,581],{"type":26,"tag":153,"props":557,"children":558},{"style":496},[559],{"type":31,"value":560},"    return",{"type":26,"tag":153,"props":562,"children":563},{"style":170},[564],{"type":31,"value":565}," np.dot(vec1, vec2) ",{"type":26,"tag":153,"props":567,"children":568},{"style":496},[569],{"type":31,"value":570},"\u002F",{"type":26,"tag":153,"props":572,"children":573},{"style":170},[574],{"type":31,"value":575}," (np.linalg.norm(vec1) ",{"type":26,"tag":153,"props":577,"children":578},{"style":496},[579],{"type":31,"value":580},"*",{"type":26,"tag":153,"props":582,"children":583},{"style":170},[584],{"type":31,"value":585}," np.linalg.norm(vec2))\n",{"type":26,"tag":153,"props":587,"children":588},{"class":155,"line":203},[589],{"type":26,"tag":153,"props":590,"children":591},{"emptyLinePlaceholder":188},[592],{"type":31,"value":191},{"type":26,"tag":153,"props":594,"children":595},{"class":155,"line":211},[596,601,606],{"type":26,"tag":153,"props":597,"children":598},{"style":170},[599],{"type":31,"value":600},"content_embedding ",{"type":26,"tag":153,"props":602,"children":603},{"style":496},[604],{"type":31,"value":605},"=",{"type":26,"tag":153,"props":607,"children":608},{"style":170},[609],{"type":31,"value":610}," openai.Embedding.create(\n",{"type":26,"tag":153,"props":612,"children":613},{"class":155,"line":20},[614,620,624,630],{"type":26,"tag":153,"props":615,"children":617},{"style":616},"--shiki-default:#FFAB70",[618],{"type":31,"value":619},"    input",{"type":26,"tag":153,"props":621,"children":622},{"style":496},[623],{"type":31,"value":605},{"type":26,"tag":153,"props":625,"children":627},{"style":626},"--shiki-default:#9ECBFF",[628],{"type":31,"value":629},"\"Your article text...\"",{"type":26,"tag":153,"props":631,"children":632},{"style":170},[633],{"type":31,"value":634},",\n",{"type":26,"tag":153,"props":636,"children":637},{"class":155,"line":227},[638,643,647],{"type":26,"tag":153,"props":639,"children":640},{"style":616},[641],{"type":31,"value":642},"    model",{"type":26,"tag":153,"props":644,"children":645},{"style":496},[646],{"type":31,"value":605},{"type":26,"tag":153,"props":648,"children":649},{"style":626},[650],{"type":31,"value":651},"\"text-embedding-3-large\"\n",{"type":26,"tag":153,"props":653,"children":654},{"class":155,"line":236},[655,660,665,670,676,680,685],{"type":26,"tag":153,"props":656,"children":657},{"style":170},[658],{"type":31,"value":659},")[",{"type":26,"tag":153,"props":661,"children":662},{"style":626},[663],{"type":31,"value":664},"\"data\"",{"type":26,"tag":153,"props":666,"children":667},{"style":170},[668],{"type":31,"value":669},"][",{"type":26,"tag":153,"props":671,"children":673},{"style":672},"--shiki-default:#79B8FF",[674],{"type":31,"value":675},"0",{"type":26,"tag":153,"props":677,"children":678},{"style":170},[679],{"type":31,"value":669},{"type":26,"tag":153,"props":681,"children":682},{"style":626},[683],{"type":31,"value":684},"\"embedding\"",{"type":26,"tag":153,"props":686,"children":687},{"style":170},[688],{"type":31,"value":689},"]\n",{"type":26,"tag":153,"props":691,"children":692},{"class":155,"line":244},[693],{"type":26,"tag":153,"props":694,"children":695},{"emptyLinePlaceholder":188},[696],{"type":31,"value":191},{"type":26,"tag":153,"props":698,"children":699},{"class":155,"line":253},[700,705,709],{"type":26,"tag":153,"props":701,"children":702},{"style":170},[703],{"type":31,"value":704},"query_embedding ",{"type":26,"tag":153,"props":706,"children":707},{"style":496},[708],{"type":31,"value":605},{"type":26,"tag":153,"props":710,"children":711},{"style":170},[712],{"type":31,"value":610},{"type":26,"tag":153,"props":714,"children":715},{"class":155,"line":261},[716,720,724,729],{"type":26,"tag":153,"props":717,"children":718},{"style":616},[719],{"type":31,"value":619},{"type":26,"tag":153,"props":721,"children":722},{"style":496},[723],{"type":31,"value":605},{"type":26,"tag":153,"props":725,"children":726},{"style":626},[727],{"type":31,"value":728},"\"User query...\"",{"type":26,"tag":153,"props":730,"children":731},{"style":170},[732],{"type":31,"value":634},{"type":26,"tag":153,"props":734,"children":735},{"class":155,"line":270},[736,740,744],{"type":26,"tag":153,"props":737,"children":738},{"style":616},[739],{"type":31,"value":642},{"type":26,"tag":153,"props":741,"children":742},{"style":496},[743],{"type":31,"value":605},{"type":26,"tag":153,"props":745,"children":746},{"style":626},[747],{"type":31,"value":651},{"type":26,"tag":153,"props":749,"children":750},{"class":155,"line":278},[751,755,759,763,767,771,775],{"type":26,"tag":153,"props":752,"children":753},{"style":170},[754],{"type":31,"value":659},{"type":26,"tag":153,"props":756,"children":757},{"style":626},[758],{"type":31,"value":664},{"type":26,"tag":153,"props":760,"children":761},{"style":170},[762],{"type":31,"value":669},{"type":26,"tag":153,"props":764,"children":765},{"style":672},[766],{"type":31,"value":675},{"type":26,"tag":153,"props":768,"children":769},{"style":170},[770],{"type":31,"value":669},{"type":26,"tag":153,"props":772,"children":773},{"style":626},[774],{"type":31,"value":684},{"type":26,"tag":153,"props":776,"children":777},{"style":170},[778],{"type":31,"value":689},{"type":26,"tag":153,"props":780,"children":782},{"class":155,"line":781},16,[783],{"type":26,"tag":153,"props":784,"children":785},{"emptyLinePlaceholder":188},[786],{"type":31,"value":191},{"type":26,"tag":153,"props":788,"children":790},{"class":155,"line":789},17,[791,796,800],{"type":26,"tag":153,"props":792,"children":793},{"style":170},[794],{"type":31,"value":795},"similarity ",{"type":26,"tag":153,"props":797,"children":798},{"style":496},[799],{"type":31,"value":605},{"type":26,"tag":153,"props":801,"children":802},{"style":170},[803],{"type":31,"value":804}," cosine_similarity(content_embedding, query_embedding)\n",{"type":26,"tag":153,"props":806,"children":808},{"class":155,"line":807},18,[809,814,819,824,829,834,839,844,849,854],{"type":26,"tag":153,"props":810,"children":811},{"style":672},[812],{"type":31,"value":813},"print",{"type":26,"tag":153,"props":815,"children":816},{"style":170},[817],{"type":31,"value":818},"(",{"type":26,"tag":153,"props":820,"children":821},{"style":496},[822],{"type":31,"value":823},"f",{"type":26,"tag":153,"props":825,"children":826},{"style":626},[827],{"type":31,"value":828},"\"Citation probability estimate: ",{"type":26,"tag":153,"props":830,"children":831},{"style":672},[832],{"type":31,"value":833},"{",{"type":26,"tag":153,"props":835,"children":836},{"style":170},[837],{"type":31,"value":838},"similarity",{"type":26,"tag":153,"props":840,"children":841},{"style":496},[842],{"type":31,"value":843},":.2f",{"type":26,"tag":153,"props":845,"children":846},{"style":672},[847],{"type":31,"value":848},"}",{"type":26,"tag":153,"props":850,"children":851},{"style":626},[852],{"type":31,"value":853},"\"",{"type":26,"tag":153,"props":855,"children":856},{"style":170},[857],{"type":31,"value":858},")\n",{"type":26,"tag":27,"props":860,"children":861},{},[862],{"type":31,"value":863},"Integriere diese Metrik in deine Content-Production-Pipeline — überarbeite vor Veröffentlichung Content mit Similarity \u003C0.70 oder führe Semantic Expansion durch.",{"type":26,"tag":42,"props":865,"children":867},{"id":866},"wettbewerbsdynamiken-und-tradeoffs",[868],{"type":31,"value":869},"Wettbewerbsdynamiken und Tradeoffs",{"type":26,"tag":27,"props":871,"children":872},{},[873,875,880],{"type":31,"value":874},"GEOs Schattenseite: ",{"type":26,"tag":34,"props":876,"children":877},{},[878],{"type":31,"value":879},"Zero-Click-Suche nimmt zu",{"type":31,"value":881},". Das LLM antwortet direkt, der Nutzer kommt nicht auf deine Site. Du hast Citations, aber keinen Traffic. Das ist die LLM-Version des Featured-Snippet-Problems. Tradeoff: Brand Awareness vs. Direct Traffic. Wenn dein Conversion Funnel oben vom Brand Recall abhängt (z.B. B2B SaaS), zahlt sich GEO aus — Decision Stage sieht „diese Marke kenne ich\". Wenn dein Funnel transaktional ist (E-Commerce Checkout), brauchst du Direct Traffic, GEO allein reicht nicht.",{"type":26,"tag":27,"props":883,"children":884},{},[885,887,892],{"type":31,"value":886},"Zweiter Tradeoff: ",{"type":26,"tag":34,"props":888,"children":889},{},[890],{"type":31,"value":891},"Content Velocity vs. Tiefe",{"type":31,"value":893},". LLM priorisieren frische Content (aktuelles Datum ist Embedding-Signal). Mit schnellen Publikationen erhöhst du Citation-Chancen, aber flacher Content kostet längerfristig Authority. Balance: Core-Pillar-Content (2000+ Wörter, tiefgehend), Supporting-Content (800–1000 Wörter, schnell publiziert). Verlinke Supporting auf Pillar. Dadurch entsteht ein Topical-Authority-Cluster — LLM sehen verwandten Content zusammen, Authority-Signal hebt sich ab.",{"type":26,"tag":27,"props":895,"children":896},{},[897,899,904,906,912,913,918,919,925,926,931,933,939,940,946,948,954,955,961],{"type":31,"value":898},"Dritter Tradeoff: ",{"type":26,"tag":34,"props":900,"children":901},{},[902],{"type":31,"value":903},"schema.org-Nutzung",{"type":31,"value":905},". Structured Data sendet LLM-Signale, zu viel kann aber als Spam wahrgenommen werden. Googles Public Guideline: Nutze Schema, aber übertreibe nicht. Kritische Schemas für GEO: ",{"type":26,"tag":109,"props":907,"children":909},{"className":908},[],[910],{"type":31,"value":911},"Article",{"type":31,"value":388},{"type":26,"tag":109,"props":914,"children":916},{"className":915},[],[917],{"type":31,"value":114},{"type":31,"value":388},{"type":26,"tag":109,"props":920,"children":922},{"className":921},[],[923],{"type":31,"value":924},"HowTo",{"type":31,"value":388},{"type":26,"tag":109,"props":927,"children":929},{"className":928},[],[930],{"type":31,"value":320},{"type":31,"value":932},". ",{"type":26,"tag":109,"props":934,"children":936},{"className":935},[],[937],{"type":31,"value":938},"Organization",{"type":31,"value":414},{"type":26,"tag":109,"props":941,"children":943},{"className":942},[],[944],{"type":31,"value":945},"WebSite",{"type":31,"value":947}," sollten eh vorhanden sein. ",{"type":26,"tag":109,"props":949,"children":951},{"className":950},[],[952],{"type":31,"value":953},"Review",{"type":31,"value":372},{"type":26,"tag":109,"props":956,"children":958},{"className":957},[],[959],{"type":31,"value":960},"Product",{"type":31,"value":962}," Schema nur wenn relevant — sonst Content-Schema-Mismatch, das LLM entdecken und das reduziert deine Authority.",{"type":26,"tag":42,"props":964,"children":966},{"id":965},"langzeitstrategie-ai-first-content-paradigm",[967],{"type":31,"value":968},"Langzeitstrategie — AI-First Content Paradigm",{"type":26,"tag":27,"props":970,"children":971},{},[972,974,979,981,985],{"type":31,"value":973},"Nach 2026 dreht sich Content-Strategie um diese Achse: ",{"type":26,"tag":34,"props":975,"children":976},{},[977],{"type":31,"value":978},"Human-lesbar, Machine-optimiert",{"type":31,"value":980},". Content muss Leser ",{"type":26,"tag":66,"props":982,"children":983},{},[984],{"type":31,"value":70},{"type":31,"value":986}," LLM ansprechen. Das braucht Token-Effizienz-Disziplin — jedes Wort trägt Signal. Und ein Prompt-Engineering-Mindset muss in Content Writer einwandern. Nicht „Was sucht der Nutzer?\" sondern „In welchem Context nimmt das LLM diesen Content in Citations auf?\"",{"type":26,"tag":27,"props":988,"children":989},{},[990],{"type":31,"value":991},"GEOs Effekt auf Brand Equity zeigt sich langfristig. Citation-Rate-Anstieg, Brand Recall, als Reference im Decision Funnel — diese Metriken offenbaren sich mit Attribution-Verzögerung. In den ersten 6 Monaten siehst du möglicherweise keinen direkten ROI, aber im 12. Monat: „Organic Brand Search nimmt zu\" und „Assisted Conversion Rate steigt\". Das ähnelt SEO der 2010er — Early Adopter gewinnen, Late Mover verlieren Market Share.",{"type":26,"tag":27,"props":993,"children":994},{},[995,997,1002,1004,1010],{"type":31,"value":996},"Letzte Note: ",{"type":26,"tag":34,"props":998,"children":999},{},[1000],{"type":31,"value":1001},"AI Safety und Bias Risiko",{"type":31,"value":1003},". LLM zeigen Citation-Bias (Domain Bias, Geography Bias, Language Bias). Zum Beispiel priorisiert ChatGPT US-zentrierte Content über deutschsprachigen (Training-Data-Bias im Embedding-Modell). Das muss in GEO-Strategie kompensiert werden — zu deutschem Content auch englische Abstract\u002FSummary, ",{"type":26,"tag":109,"props":1005,"children":1007},{"className":1006},[],[1008],{"type":31,"value":1009},"inLanguage",{"type":31,"value":1011}," Field in Schema exakt setzen. In AI Overviews sichtbar zu sein heißt: Den Bias des Modells verstehen und Content-Architektur danach bauen.",{"type":26,"tag":27,"props":1013,"children":1014},{},[1015],{"type":31,"value":1016},"GEO ist nicht die Evolution klassischen SEO — es ist eine neue Disziplin. Nicht Suchmaschinen-, sondern Antwortmaschinen-Optimierung. Attribution Window ist des Modells Context Window, Ranking-Signal ist Embedding Similarity, Backlink-Authority ist Citation Density. Diese Paradigma braucht: Prompt Engineering mit Content-Architektur verbunden. Erste Aktion: Audit deinen bestehenden Content-Bestand durch Token-Effizienz- und Semantic-Density-Linse, überarbeite Citation-schwache Content oder archiviere sie. Zweite Aktion: First-Party-Daten und unique Insights in zitierbare Formate umwandeln. Dritte Aktion: Programmatisches Monitoring aufsetzen, Citation Rate wö",{"type":26,"tag":1018,"props":1019,"children":1020},"style",{},[1021],{"type":31,"value":1022},"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);}",{"title":9,"searchDepth":176,"depth":176,"links":1024},[1025,1026,1027,1028,1029,1030],{"id":44,"depth":166,"text":47},{"id":80,"depth":166,"text":83},{"id":292,"depth":166,"text":295},{"id":399,"depth":166,"text":402},{"id":866,"depth":166,"text":869},{"id":965,"depth":166,"text":968},"content:de:ai:geo-marke-in-chatgpt-antworten-positionieren.md","content","de\u002Fai\u002Fgeo-marke-in-chatgpt-antworten-positionieren.md","de\u002Fai\u002Fgeo-marke-in-chatgpt-antworten-positionieren","md",{"_path":1037,"_dir":1038,"_draft":8,"_partial":8,"_locale":9,"title":1039,"description":1040,"publishedAt":12,"modifiedAt":12,"category":1038,"i18nKey":1041,"tags":1042,"readingTime":227,"author":21,"body":1048,"_type":147,"_id":2530,"_source":1032,"_file":2531,"_stem":2532,"_extension":1035},"\u002Fde\u002Ftech\u002Fnuxt-3-cloudflare-pages-lcp-optimierung","tech","Nuxt 3 + Cloudflare Pages: LCP von 10s auf 2s","Self-hosted Fonts, selective Hydration, content-visibility und Edge Caching reduzierten LCP um 80%. Echte Benchmarks, Code-Beispiele und Trade-offs.","tech-001-2026-05",[1043,1044,1045,1046,1047],"nuxt3","cloudflare-pages","web-performance","lcp","edge-caching",{"type":23,"children":1049,"toc":2519},[1050,1055,1061,1066,1110,1115,1121,1158,1531,1548,1560,1581,1688,1701,1786,1809,1815,1844,1988,2001,2016,2022,2035,2197,2210,2227,2233,2238,2368,2382,2388,2413,2423,2440,2456,2462,2467,2510,2515],{"type":26,"tag":27,"props":1051,"children":1052},{},[1053],{"type":31,"value":1054},"Nach Googles Core Web Vitals Update muss LCP (Largest Contentful Paint) unter 2,5 Sekunden liegen – sonst leiden sowohl organische Rankings als auch Conversion Rates. Als wir einen E-Commerce-Shop zu Nuxt 3 + Cloudflare Pages migrierten, zeigte der erste Deploy ein LCP von 10,2 Sekunden. Mit einer Kombination aus Self-hosted Fonts, selektiver Hydration, CSS content-visibility und Edge Caching reduzierten wir das auf 2,1 Sekunden. Hier zeigen wir Schritt für Schritt, welche Änderung welchen Gewinn brachte, welche Trade-offs entstanden, und präsentieren den Code.",{"type":26,"tag":42,"props":1056,"children":1058},{"id":1057},"das-problem-verstehen-anatomie-der-10s-lcp",[1059],{"type":31,"value":1060},"Das Problem verstehen: Anatomie der 10s LCP",{"type":26,"tag":27,"props":1062,"children":1063},{},[1064],{"type":31,"value":1065},"Der erste CrUX-Report zeigte ein Median-LCP von 10,2s und TBT (Total Blocking Time) von 2190ms. Die Chrome DevTools Lighthouse-Analyse offenbarte:",{"type":26,"tag":1067,"props":1068,"children":1069},"ul",{},[1070,1080,1090,1100],{"type":26,"tag":427,"props":1071,"children":1072},{},[1073,1078],{"type":26,"tag":34,"props":1074,"children":1075},{},[1076],{"type":31,"value":1077},"Font-Loading:",{"type":31,"value":1079}," 3 Font-Familien von Google Fonts CDN, render-blocking",{"type":26,"tag":427,"props":1081,"children":1082},{},[1083,1088],{"type":26,"tag":34,"props":1084,"children":1085},{},[1086],{"type":31,"value":1087},"JavaScript Hydration:",{"type":31,"value":1089}," 420kB Bundle, alle Seite wird hydratisiert",{"type":26,"tag":427,"props":1091,"children":1092},{},[1093,1098],{"type":26,"tag":34,"props":1094,"children":1095},{},[1096],{"type":31,"value":1097},"Above-the-Fold Bild:",{"type":31,"value":1099}," 1,2MB JPEG, kein Lazy Loading",{"type":26,"tag":427,"props":1101,"children":1102},{},[1103,1108],{"type":26,"tag":34,"props":1104,"children":1105},{},[1106],{"type":31,"value":1107},"Cloudflare Cache:",{"type":31,"value":1109}," SSR-Responses werden nicht gecacht, jeder Request geht zum Origin",{"type":26,"tag":27,"props":1111,"children":1112},{},[1113],{"type":31,"value":1114},"Baseline-Messung: PageSpeed Insights Mobil 34\u002F100, Desktop 62\u002F100. Diese Werte direkt nach der Migration von Shopify Liquid zu Nuxt 3 – der Framework-Wechsel allein brachte keinen Performance-Gewinn, wir brauchten echte Architektur-Optimierung.",{"type":26,"tag":42,"props":1116,"children":1118},{"id":1117},"self-hosted-fonts-preload-strategie",[1119],{"type":31,"value":1120},"Self-hosted Fonts + Preload-Strategie",{"type":26,"tag":27,"props":1122,"children":1123},{},[1124,1126,1132,1134,1140,1142,1148,1150,1156],{"type":31,"value":1125},"Statt Google Fonts CDN zogen wir die Font-Dateien ins ",{"type":26,"tag":109,"props":1127,"children":1129},{"className":1128},[],[1130],{"type":31,"value":1131},"public\u002Ffonts\u002F",{"type":31,"value":1133}," Verzeichnis und definierten ",{"type":26,"tag":109,"props":1135,"children":1137},{"className":1136},[],[1138],{"type":31,"value":1139},"@font-face",{"type":31,"value":1141}," direkt in ",{"type":26,"tag":109,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":31,"value":1147},"app.vue",{"type":31,"value":1149},". Der entscheidende Unterschied: mit ",{"type":26,"tag":109,"props":1151,"children":1153},{"className":1152},[],[1154],{"type":31,"value":1155},"\u003Clink rel=\"preload\">",{"type":31,"value":1157}," fordern wir Font-Dateien im initialen HTML-Response an – bevor CSS geparst wird.",{"type":26,"tag":143,"props":1159,"children":1163},{"className":1160,"code":1161,"language":1162,"meta":9,"style":9},"language-vue shiki shiki-themes github-dark","\u003C!-- app.vue -->\n\u003Cscript setup>\nuseHead({\n  link: [\n    {\n      rel: 'preload',\n      href: '\u002Ffonts\u002Finter-var.woff2',\n      as: 'font',\n      type: 'font\u002Fwoff2',\n      crossorigin: 'anonymous'\n    }\n  ]\n})\n\u003C\u002Fscript>\n\n\u003Cstyle>\n@font-face {\n  font-family: 'Inter';\n  src: url('\u002Ffonts\u002Finter-var.woff2') format('woff2');\n  font-display: swap;\n  font-weight: 100 900;\n}\n\u003C\u002Fstyle>\n","vue",[1164],{"type":26,"tag":109,"props":1165,"children":1166},{"__ignoreMap":9},[1167,1176,1200,1213,1221,1229,1246,1263,1280,1297,1310,1318,1326,1334,1350,1357,1372,1384,1407,1457,1479,1506,1515],{"type":26,"tag":153,"props":1168,"children":1169},{"class":155,"line":156},[1170],{"type":26,"tag":153,"props":1171,"children":1173},{"style":1172},"--shiki-default:#6A737D",[1174],{"type":31,"value":1175},"\u003C!-- app.vue -->\n",{"type":26,"tag":153,"props":1177,"children":1178},{"class":155,"line":166},[1179,1184,1190,1195],{"type":26,"tag":153,"props":1180,"children":1181},{"style":170},[1182],{"type":31,"value":1183},"\u003C",{"type":26,"tag":153,"props":1185,"children":1187},{"style":1186},"--shiki-default:#85E89D",[1188],{"type":31,"value":1189},"script",{"type":26,"tag":153,"props":1191,"children":1192},{"style":544},[1193],{"type":31,"value":1194}," setup",{"type":26,"tag":153,"props":1196,"children":1197},{"style":170},[1198],{"type":31,"value":1199},">\n",{"type":26,"tag":153,"props":1201,"children":1202},{"class":155,"line":176},[1203,1208],{"type":26,"tag":153,"props":1204,"children":1205},{"style":544},[1206],{"type":31,"value":1207},"useHead",{"type":26,"tag":153,"props":1209,"children":1210},{"style":170},[1211],{"type":31,"value":1212},"({\n",{"type":26,"tag":153,"props":1214,"children":1215},{"class":155,"line":184},[1216],{"type":26,"tag":153,"props":1217,"children":1218},{"style":170},[1219],{"type":31,"value":1220},"  link: [\n",{"type":26,"tag":153,"props":1222,"children":1223},{"class":155,"line":194},[1224],{"type":26,"tag":153,"props":1225,"children":1226},{"style":170},[1227],{"type":31,"value":1228},"    {\n",{"type":26,"tag":153,"props":1230,"children":1231},{"class":155,"line":203},[1232,1237,1242],{"type":26,"tag":153,"props":1233,"children":1234},{"style":170},[1235],{"type":31,"value":1236},"      rel: ",{"type":26,"tag":153,"props":1238,"children":1239},{"style":626},[1240],{"type":31,"value":1241},"'preload'",{"type":26,"tag":153,"props":1243,"children":1244},{"style":170},[1245],{"type":31,"value":634},{"type":26,"tag":153,"props":1247,"children":1248},{"class":155,"line":211},[1249,1254,1259],{"type":26,"tag":153,"props":1250,"children":1251},{"style":170},[1252],{"type":31,"value":1253},"      href: ",{"type":26,"tag":153,"props":1255,"children":1256},{"style":626},[1257],{"type":31,"value":1258},"'\u002Ffonts\u002Finter-var.woff2'",{"type":26,"tag":153,"props":1260,"children":1261},{"style":170},[1262],{"type":31,"value":634},{"type":26,"tag":153,"props":1264,"children":1265},{"class":155,"line":20},[1266,1271,1276],{"type":26,"tag":153,"props":1267,"children":1268},{"style":170},[1269],{"type":31,"value":1270},"      as: ",{"type":26,"tag":153,"props":1272,"children":1273},{"style":626},[1274],{"type":31,"value":1275},"'font'",{"type":26,"tag":153,"props":1277,"children":1278},{"style":170},[1279],{"type":31,"value":634},{"type":26,"tag":153,"props":1281,"children":1282},{"class":155,"line":227},[1283,1288,1293],{"type":26,"tag":153,"props":1284,"children":1285},{"style":170},[1286],{"type":31,"value":1287},"      type: ",{"type":26,"tag":153,"props":1289,"children":1290},{"style":626},[1291],{"type":31,"value":1292},"'font\u002Fwoff2'",{"type":26,"tag":153,"props":1294,"children":1295},{"style":170},[1296],{"type":31,"value":634},{"type":26,"tag":153,"props":1298,"children":1299},{"class":155,"line":236},[1300,1305],{"type":26,"tag":153,"props":1301,"children":1302},{"style":170},[1303],{"type":31,"value":1304},"      crossorigin: ",{"type":26,"tag":153,"props":1306,"children":1307},{"style":626},[1308],{"type":31,"value":1309},"'anonymous'\n",{"type":26,"tag":153,"props":1311,"children":1312},{"class":155,"line":244},[1313],{"type":26,"tag":153,"props":1314,"children":1315},{"style":170},[1316],{"type":31,"value":1317},"    }\n",{"type":26,"tag":153,"props":1319,"children":1320},{"class":155,"line":253},[1321],{"type":26,"tag":153,"props":1322,"children":1323},{"style":170},[1324],{"type":31,"value":1325},"  ]\n",{"type":26,"tag":153,"props":1327,"children":1328},{"class":155,"line":261},[1329],{"type":26,"tag":153,"props":1330,"children":1331},{"style":170},[1332],{"type":31,"value":1333},"})\n",{"type":26,"tag":153,"props":1335,"children":1336},{"class":155,"line":270},[1337,1342,1346],{"type":26,"tag":153,"props":1338,"children":1339},{"style":170},[1340],{"type":31,"value":1341},"\u003C\u002F",{"type":26,"tag":153,"props":1343,"children":1344},{"style":1186},[1345],{"type":31,"value":1189},{"type":26,"tag":153,"props":1347,"children":1348},{"style":170},[1349],{"type":31,"value":1199},{"type":26,"tag":153,"props":1351,"children":1352},{"class":155,"line":278},[1353],{"type":26,"tag":153,"props":1354,"children":1355},{"emptyLinePlaceholder":188},[1356],{"type":31,"value":191},{"type":26,"tag":153,"props":1358,"children":1359},{"class":155,"line":781},[1360,1364,1368],{"type":26,"tag":153,"props":1361,"children":1362},{"style":170},[1363],{"type":31,"value":1183},{"type":26,"tag":153,"props":1365,"children":1366},{"style":1186},[1367],{"type":31,"value":1018},{"type":26,"tag":153,"props":1369,"children":1370},{"style":170},[1371],{"type":31,"value":1199},{"type":26,"tag":153,"props":1373,"children":1374},{"class":155,"line":789},[1375,1379],{"type":26,"tag":153,"props":1376,"children":1377},{"style":496},[1378],{"type":31,"value":1139},{"type":26,"tag":153,"props":1380,"children":1381},{"style":170},[1382],{"type":31,"value":1383}," {\n",{"type":26,"tag":153,"props":1385,"children":1386},{"class":155,"line":807},[1387,1392,1397,1402],{"type":26,"tag":153,"props":1388,"children":1389},{"style":672},[1390],{"type":31,"value":1391},"  font-family",{"type":26,"tag":153,"props":1393,"children":1394},{"style":170},[1395],{"type":31,"value":1396},": ",{"type":26,"tag":153,"props":1398,"children":1399},{"style":626},[1400],{"type":31,"value":1401},"'Inter'",{"type":26,"tag":153,"props":1403,"children":1404},{"style":170},[1405],{"type":31,"value":1406},";\n",{"type":26,"tag":153,"props":1408,"children":1410},{"class":155,"line":1409},19,[1411,1416,1420,1425,1429,1433,1438,1443,1447,1452],{"type":26,"tag":153,"props":1412,"children":1413},{"style":672},[1414],{"type":31,"value":1415},"  src",{"type":26,"tag":153,"props":1417,"children":1418},{"style":170},[1419],{"type":31,"value":1396},{"type":26,"tag":153,"props":1421,"children":1422},{"style":672},[1423],{"type":31,"value":1424},"url",{"type":26,"tag":153,"props":1426,"children":1427},{"style":170},[1428],{"type":31,"value":818},{"type":26,"tag":153,"props":1430,"children":1431},{"style":626},[1432],{"type":31,"value":1258},{"type":26,"tag":153,"props":1434,"children":1435},{"style":170},[1436],{"type":31,"value":1437},") ",{"type":26,"tag":153,"props":1439,"children":1440},{"style":672},[1441],{"type":31,"value":1442},"format",{"type":26,"tag":153,"props":1444,"children":1445},{"style":170},[1446],{"type":31,"value":818},{"type":26,"tag":153,"props":1448,"children":1449},{"style":626},[1450],{"type":31,"value":1451},"'woff2'",{"type":26,"tag":153,"props":1453,"children":1454},{"style":170},[1455],{"type":31,"value":1456},");\n",{"type":26,"tag":153,"props":1458,"children":1460},{"class":155,"line":1459},20,[1461,1466,1470,1475],{"type":26,"tag":153,"props":1462,"children":1463},{"style":672},[1464],{"type":31,"value":1465},"  font-display",{"type":26,"tag":153,"props":1467,"children":1468},{"style":170},[1469],{"type":31,"value":1396},{"type":26,"tag":153,"props":1471,"children":1472},{"style":672},[1473],{"type":31,"value":1474},"swap",{"type":26,"tag":153,"props":1476,"children":1477},{"style":170},[1478],{"type":31,"value":1406},{"type":26,"tag":153,"props":1480,"children":1482},{"class":155,"line":1481},21,[1483,1488,1492,1497,1502],{"type":26,"tag":153,"props":1484,"children":1485},{"style":672},[1486],{"type":31,"value":1487},"  font-weight",{"type":26,"tag":153,"props":1489,"children":1490},{"style":170},[1491],{"type":31,"value":1396},{"type":26,"tag":153,"props":1493,"children":1494},{"style":672},[1495],{"type":31,"value":1496},"100",{"type":26,"tag":153,"props":1498,"children":1499},{"style":672},[1500],{"type":31,"value":1501}," 900",{"type":26,"tag":153,"props":1503,"children":1504},{"style":170},[1505],{"type":31,"value":1406},{"type":26,"tag":153,"props":1507,"children":1509},{"class":155,"line":1508},22,[1510],{"type":26,"tag":153,"props":1511,"children":1512},{"style":170},[1513],{"type":31,"value":1514},"}\n",{"type":26,"tag":153,"props":1516,"children":1518},{"class":155,"line":1517},23,[1519,1523,1527],{"type":26,"tag":153,"props":1520,"children":1521},{"style":170},[1522],{"type":31,"value":1341},{"type":26,"tag":153,"props":1524,"children":1525},{"style":1186},[1526],{"type":31,"value":1018},{"type":26,"tag":153,"props":1528,"children":1529},{"style":170},[1530],{"type":31,"value":1199},{"type":26,"tag":27,"props":1532,"children":1533},{},[1534,1539,1541,1546],{"type":26,"tag":34,"props":1535,"children":1536},{},[1537],{"type":31,"value":1538},"Gewinn:",{"type":31,"value":1540}," LCP 10,2s → 7,8s (2,4s Reduktion). Font-Loading ist nicht mehr render-blocking, FOIT-Dauer fiel von 1200ms auf 180ms. ",{"type":26,"tag":34,"props":1542,"children":1543},{},[1544],{"type":31,"value":1545},"Trade-off:",{"type":31,"value":1547}," Font-Dateien sind jetzt in unserem CDN, Versionierung erfolgt manuell. Wir lösten das mit Cloudflare R2 Bucket + Cache-Control Headern.",{"type":26,"tag":42,"props":1549,"children":1551},{"id":1550},"selective-hydration-content-visibility",[1552,1554],{"type":31,"value":1553},"Selective Hydration + ",{"type":26,"tag":109,"props":1555,"children":1557},{"className":1556},[],[1558],{"type":31,"value":1559},"content-visibility",{"type":26,"tag":27,"props":1561,"children":1562},{},[1563,1565,1571,1573,1579],{"type":31,"value":1564},"Nuxt 3 hydratisiert standardmäßig alle Komponenten. Aber Komponenten unterhalb des Fold (Footer, Kommentarbereich, empfohlene Produkte) müssen nicht vor dem ersten User-Scroll hydratisiert werden. Mit dem ",{"type":26,"tag":109,"props":1566,"children":1568},{"className":1567},[],[1569],{"type":31,"value":1570},"@nuxt\u002Flazy-hydration",{"type":31,"value":1572}," Modul wrappten wir diese Komponenten mit ",{"type":26,"tag":109,"props":1574,"children":1576},{"className":1575},[],[1577],{"type":31,"value":1578},"LazyHydrate",{"type":31,"value":1580},":",{"type":26,"tag":143,"props":1582,"children":1584},{"className":1160,"code":1583,"language":1162,"meta":9,"style":9},"\u003Ctemplate>\n  \u003CLazyHydrate when-visible>\n    \u003CProductRecommendations :product-id=\"productId\" \u002F>\n  \u003C\u002FLazyHydrate>\n\u003C\u002Ftemplate>\n",[1585],{"type":26,"tag":109,"props":1586,"children":1587},{"__ignoreMap":9},[1588,1604,1625,1657,1673],{"type":26,"tag":153,"props":1589,"children":1590},{"class":155,"line":156},[1591,1595,1600],{"type":26,"tag":153,"props":1592,"children":1593},{"style":170},[1594],{"type":31,"value":1183},{"type":26,"tag":153,"props":1596,"children":1597},{"style":1186},[1598],{"type":31,"value":1599},"template",{"type":26,"tag":153,"props":1601,"children":1602},{"style":170},[1603],{"type":31,"value":1199},{"type":26,"tag":153,"props":1605,"children":1606},{"class":155,"line":166},[1607,1612,1616,1621],{"type":26,"tag":153,"props":1608,"children":1609},{"style":170},[1610],{"type":31,"value":1611},"  \u003C",{"type":26,"tag":153,"props":1613,"children":1614},{"style":1186},[1615],{"type":31,"value":1578},{"type":26,"tag":153,"props":1617,"children":1618},{"style":544},[1619],{"type":31,"value":1620}," when-visible",{"type":26,"tag":153,"props":1622,"children":1623},{"style":170},[1624],{"type":31,"value":1199},{"type":26,"tag":153,"props":1626,"children":1627},{"class":155,"line":176},[1628,1633,1638,1643,1647,1652],{"type":26,"tag":153,"props":1629,"children":1630},{"style":170},[1631],{"type":31,"value":1632},"    \u003C",{"type":26,"tag":153,"props":1634,"children":1635},{"style":1186},[1636],{"type":31,"value":1637},"ProductRecommendations",{"type":26,"tag":153,"props":1639,"children":1640},{"style":544},[1641],{"type":31,"value":1642}," :product-id",{"type":26,"tag":153,"props":1644,"children":1645},{"style":170},[1646],{"type":31,"value":605},{"type":26,"tag":153,"props":1648,"children":1649},{"style":626},[1650],{"type":31,"value":1651},"\"productId\"",{"type":26,"tag":153,"props":1653,"children":1654},{"style":170},[1655],{"type":31,"value":1656}," \u002F>\n",{"type":26,"tag":153,"props":1658,"children":1659},{"class":155,"line":184},[1660,1665,1669],{"type":26,"tag":153,"props":1661,"children":1662},{"style":170},[1663],{"type":31,"value":1664},"  \u003C\u002F",{"type":26,"tag":153,"props":1666,"children":1667},{"style":1186},[1668],{"type":31,"value":1578},{"type":26,"tag":153,"props":1670,"children":1671},{"style":170},[1672],{"type":31,"value":1199},{"type":26,"tag":153,"props":1674,"children":1675},{"class":155,"line":194},[1676,1680,1684],{"type":26,"tag":153,"props":1677,"children":1678},{"style":170},[1679],{"type":31,"value":1341},{"type":26,"tag":153,"props":1681,"children":1682},{"style":1186},[1683],{"type":31,"value":1599},{"type":26,"tag":153,"props":1685,"children":1686},{"style":170},[1687],{"type":31,"value":1199},{"type":26,"tag":27,"props":1689,"children":1690},{},[1691,1693,1699],{"type":31,"value":1692},"Auf CSS-Seite signalisierten wir dem Browser mit ",{"type":26,"tag":109,"props":1694,"children":1696},{"className":1695},[],[1697],{"type":31,"value":1698},"content-visibility: auto",{"type":31,"value":1700},", dass er Layout-Berechnungen für unsichtbare Elemente überspringen kann:",{"type":26,"tag":143,"props":1702,"children":1706},{"className":1703,"code":1704,"language":1705,"meta":9,"style":9},"language-css shiki shiki-themes github-dark",".product-recommendations {\n  content-visibility: auto;\n  contain-intrinsic-size: 0 500px; \u002F* Placeholder-Höhe *\u002F\n}\n","css",[1707],{"type":26,"tag":109,"props":1708,"children":1709},{"__ignoreMap":9},[1710,1722,1743,1779],{"type":26,"tag":153,"props":1711,"children":1712},{"class":155,"line":156},[1713,1718],{"type":26,"tag":153,"props":1714,"children":1715},{"style":544},[1716],{"type":31,"value":1717},".product-recommendations",{"type":26,"tag":153,"props":1719,"children":1720},{"style":170},[1721],{"type":31,"value":1383},{"type":26,"tag":153,"props":1723,"children":1724},{"class":155,"line":166},[1725,1730,1734,1739],{"type":26,"tag":153,"props":1726,"children":1727},{"style":672},[1728],{"type":31,"value":1729},"  content-visibility",{"type":26,"tag":153,"props":1731,"children":1732},{"style":170},[1733],{"type":31,"value":1396},{"type":26,"tag":153,"props":1735,"children":1736},{"style":672},[1737],{"type":31,"value":1738},"auto",{"type":26,"tag":153,"props":1740,"children":1741},{"style":170},[1742],{"type":31,"value":1406},{"type":26,"tag":153,"props":1744,"children":1745},{"class":155,"line":176},[1746,1751,1755,1759,1764,1769,1774],{"type":26,"tag":153,"props":1747,"children":1748},{"style":672},[1749],{"type":31,"value":1750},"  contain-intrinsic-size",{"type":26,"tag":153,"props":1752,"children":1753},{"style":170},[1754],{"type":31,"value":1396},{"type":26,"tag":153,"props":1756,"children":1757},{"style":672},[1758],{"type":31,"value":675},{"type":26,"tag":153,"props":1760,"children":1761},{"style":672},[1762],{"type":31,"value":1763}," 500",{"type":26,"tag":153,"props":1765,"children":1766},{"style":496},[1767],{"type":31,"value":1768},"px",{"type":26,"tag":153,"props":1770,"children":1771},{"style":170},[1772],{"type":31,"value":1773},"; ",{"type":26,"tag":153,"props":1775,"children":1776},{"style":1172},[1777],{"type":31,"value":1778},"\u002F* Placeholder-Höhe *\u002F\n",{"type":26,"tag":153,"props":1780,"children":1781},{"class":155,"line":184},[1782],{"type":26,"tag":153,"props":1783,"children":1784},{"style":170},[1785],{"type":31,"value":1514},{"type":26,"tag":27,"props":1787,"children":1788},{},[1789,1793,1795,1799,1801,1807],{"type":26,"tag":34,"props":1790,"children":1791},{},[1792],{"type":31,"value":1538},{"type":31,"value":1794}," TBT 2190ms → 420ms, LCP 7,8s → 4,1s. Das initiale JS-Bundle schrumpfte von 420kB auf 180kB (brotli-compressed). ",{"type":26,"tag":34,"props":1796,"children":1797},{},[1798],{"type":31,"value":1545},{"type":31,"value":1800}," ",{"type":26,"tag":109,"props":1802,"children":1804},{"className":1803},[],[1805],{"type":31,"value":1806},"when-visible",{"type":31,"value":1808}," nutzt Intersection Observer, auf älteren Browsern wie IE11 wäre ein Polyfill nötig. Wir targetieren moderne Browser, daher kein Thema.",{"type":26,"tag":42,"props":1810,"children":1812},{"id":1811},"edge-caching-isr-hybrid-ansatz",[1813],{"type":31,"value":1814},"Edge Caching + ISR-Hybrid-Ansatz",{"type":26,"tag":27,"props":1816,"children":1817},{},[1818,1820,1826,1828,1834,1836,1842],{"type":31,"value":1819},"Cloudflare Pages cached standardmäßig statische Assets, aber SSR-Endpunkte (alles außer ",{"type":26,"tag":109,"props":1821,"children":1823},{"className":1822},[],[1824],{"type":31,"value":1825},"\u002F_nuxt\u002F...",{"type":31,"value":1827},") werden nicht gecacht. In ",{"type":26,"tag":109,"props":1829,"children":1831},{"className":1830},[],[1832],{"type":31,"value":1833},"nuxt.config.ts",{"type":31,"value":1835}," definierten wir via ",{"type":26,"tag":109,"props":1837,"children":1839},{"className":1838},[],[1840],{"type":31,"value":1841},"routeRules",{"type":31,"value":1843},", welche Paths wie lange gecacht werden:",{"type":26,"tag":143,"props":1845,"children":1849},{"className":1846,"code":1847,"language":1848,"meta":9,"style":9},"language-ts shiki shiki-themes github-dark","\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  routeRules: {\n    '\u002F': { swr: 3600 }, \u002F\u002F Homepage 1h stale-while-revalidate\n    '\u002Fprodukt\u002F**': { swr: 1800 }, \u002F\u002F Produktseiten 30m\n    '\u002Fkategorie\u002F**': { static: true } \u002F\u002F Kategorieseiten Build-Zeit static\n  }\n})\n","ts",[1850],{"type":26,"tag":109,"props":1851,"children":1852},{"__ignoreMap":9},[1853,1861,1883,1891,1919,1945,1973,1981],{"type":26,"tag":153,"props":1854,"children":1855},{"class":155,"line":156},[1856],{"type":26,"tag":153,"props":1857,"children":1858},{"style":1172},[1859],{"type":31,"value":1860},"\u002F\u002F nuxt.config.ts\n",{"type":26,"tag":153,"props":1862,"children":1863},{"class":155,"line":166},[1864,1869,1874,1879],{"type":26,"tag":153,"props":1865,"children":1866},{"style":496},[1867],{"type":31,"value":1868},"export",{"type":26,"tag":153,"props":1870,"children":1871},{"style":496},[1872],{"type":31,"value":1873}," default",{"type":26,"tag":153,"props":1875,"children":1876},{"style":544},[1877],{"type":31,"value":1878}," defineNuxtConfig",{"type":26,"tag":153,"props":1880,"children":1881},{"style":170},[1882],{"type":31,"value":1212},{"type":26,"tag":153,"props":1884,"children":1885},{"class":155,"line":176},[1886],{"type":26,"tag":153,"props":1887,"children":1888},{"style":170},[1889],{"type":31,"value":1890},"  routeRules: {\n",{"type":26,"tag":153,"props":1892,"children":1893},{"class":155,"line":184},[1894,1899,1904,1909,1914],{"type":26,"tag":153,"props":1895,"children":1896},{"style":626},[1897],{"type":31,"value":1898},"    '\u002F'",{"type":26,"tag":153,"props":1900,"children":1901},{"style":170},[1902],{"type":31,"value":1903},": { swr: ",{"type":26,"tag":153,"props":1905,"children":1906},{"style":672},[1907],{"type":31,"value":1908},"3600",{"type":26,"tag":153,"props":1910,"children":1911},{"style":170},[1912],{"type":31,"value":1913}," }, ",{"type":26,"tag":153,"props":1915,"children":1916},{"style":1172},[1917],{"type":31,"value":1918},"\u002F\u002F Homepage 1h stale-while-revalidate\n",{"type":26,"tag":153,"props":1920,"children":1921},{"class":155,"line":194},[1922,1927,1931,1936,1940],{"type":26,"tag":153,"props":1923,"children":1924},{"style":626},[1925],{"type":31,"value":1926},"    '\u002Fprodukt\u002F**'",{"type":26,"tag":153,"props":1928,"children":1929},{"style":170},[1930],{"type":31,"value":1903},{"type":26,"tag":153,"props":1932,"children":1933},{"style":672},[1934],{"type":31,"value":1935},"1800",{"type":26,"tag":153,"props":1937,"children":1938},{"style":170},[1939],{"type":31,"value":1913},{"type":26,"tag":153,"props":1941,"children":1942},{"style":1172},[1943],{"type":31,"value":1944},"\u002F\u002F Produktseiten 30m\n",{"type":26,"tag":153,"props":1946,"children":1947},{"class":155,"line":203},[1948,1953,1958,1963,1968],{"type":26,"tag":153,"props":1949,"children":1950},{"style":626},[1951],{"type":31,"value":1952},"    '\u002Fkategorie\u002F**'",{"type":26,"tag":153,"props":1954,"children":1955},{"style":170},[1956],{"type":31,"value":1957},": { static: ",{"type":26,"tag":153,"props":1959,"children":1960},{"style":672},[1961],{"type":31,"value":1962},"true",{"type":26,"tag":153,"props":1964,"children":1965},{"style":170},[1966],{"type":31,"value":1967}," } ",{"type":26,"tag":153,"props":1969,"children":1970},{"style":1172},[1971],{"type":31,"value":1972},"\u002F\u002F Kategorieseiten Build-Zeit static\n",{"type":26,"tag":153,"props":1974,"children":1975},{"class":155,"line":211},[1976],{"type":26,"tag":153,"props":1977,"children":1978},{"style":170},[1979],{"type":31,"value":1980},"  }\n",{"type":26,"tag":153,"props":1982,"children":1983},{"class":155,"line":20},[1984],{"type":26,"tag":153,"props":1985,"children":1986},{"style":170},[1987],{"type":31,"value":1333},{"type":26,"tag":27,"props":1989,"children":1990},{},[1991,1993,1999],{"type":31,"value":1992},"Die ",{"type":26,"tag":109,"props":1994,"children":1996},{"className":1995},[],[1997],{"type":31,"value":1998},"swr",{"type":31,"value":2000},"-Strategie (stale-while-revalidate) funktioniert so: erster Request rendert SSR, nachfolgende Requests kommen aus dem Cache, im Hintergrund rendert sich die Seite neu. Als Cache-Key nutzten wir URL + User-Segment (logged-in\u002Fanonym) in Cloudflare KV Store.",{"type":26,"tag":27,"props":2002,"children":2003},{},[2004,2008,2010,2014],{"type":26,"tag":34,"props":2005,"children":2006},{},[2007],{"type":31,"value":1538},{"type":31,"value":2009}," TTFB (Time to First Byte) 840ms → 120ms, LCP 4,1s → 2,3s. Cache Hit Rate in der ersten Woche: 78%. ",{"type":26,"tag":34,"props":2011,"children":2012},{},[2013],{"type":31,"value":1545},{"type":31,"value":2015}," Personalisierung ist an den Cache-Key gebunden – Daten wie Warenkorbgröße lassen sich nicht cachen, wir fetchen diese client-seitig.",{"type":26,"tag":42,"props":2017,"children":2019},{"id":2018},"above-the-fold-bildoptimierung",[2020],{"type":31,"value":2021},"Above-the-Fold Bildoptimierung",{"type":26,"tag":27,"props":2023,"children":2024},{},[2025,2027,2033],{"type":31,"value":2026},"Das Hero-Bild schrumpfte von 1,2MB JPEG auf 180kB WebP, und wir nutzten ",{"type":26,"tag":109,"props":2028,"children":2030},{"className":2029},[],[2031],{"type":31,"value":2032},"\u003Cpicture>",{"type":31,"value":2034}," für responsive Breakpoints:",{"type":26,"tag":143,"props":2036,"children":2038},{"className":1160,"code":2037,"language":1162,"meta":9,"style":9},"\u003Cpicture>\n  \u003Csource\n    srcset=\"\u002Fimages\u002Fhero-mobile.webp\"\n    media=\"(max-width: 640px)\"\n    type=\"image\u002Fwebp\"\n  \u002F>\n  \u003Csource\n    srcset=\"\u002Fimages\u002Fhero-desktop.webp\"\n    media=\"(min-width: 641px)\"\n    type=\"image\u002Fwebp\"\n  \u002F>\n  \u003Cimg\n    src=\"\u002Fimages\u002Fhero-desktop.jpg\"\n    alt=\"Neue Saisonkollektion\"\n    fetchpriority=\"high\"\n    decoding=\"async\"\n  \u002F>\n\u003C\u002Fpicture>\n",[2039],{"type":26,"tag":109,"props":2040,"children":2041},{"__ignoreMap":9},[2042,2058,2066,2074,2082,2090,2098,2105,2113,2121,2128,2135,2143,2151,2159,2167,2175,2182],{"type":26,"tag":153,"props":2043,"children":2044},{"class":155,"line":156},[2045,2049,2054],{"type":26,"tag":153,"props":2046,"children":2047},{"style":170},[2048],{"type":31,"value":1183},{"type":26,"tag":153,"props":2050,"children":2051},{"style":1186},[2052],{"type":31,"value":2053},"picture",{"type":26,"tag":153,"props":2055,"children":2056},{"style":170},[2057],{"type":31,"value":1199},{"type":26,"tag":153,"props":2059,"children":2060},{"class":155,"line":166},[2061],{"type":26,"tag":153,"props":2062,"children":2063},{"style":170},[2064],{"type":31,"value":2065},"  \u003Csource\n",{"type":26,"tag":153,"props":2067,"children":2068},{"class":155,"line":176},[2069],{"type":26,"tag":153,"props":2070,"children":2071},{"style":170},[2072],{"type":31,"value":2073},"    srcset=\"\u002Fimages\u002Fhero-mobile.webp\"\n",{"type":26,"tag":153,"props":2075,"children":2076},{"class":155,"line":184},[2077],{"type":26,"tag":153,"props":2078,"children":2079},{"style":170},[2080],{"type":31,"value":2081},"    media=\"(max-width: 640px)\"\n",{"type":26,"tag":153,"props":2083,"children":2084},{"class":155,"line":194},[2085],{"type":26,"tag":153,"props":2086,"children":2087},{"style":170},[2088],{"type":31,"value":2089},"    type=\"image\u002Fwebp\"\n",{"type":26,"tag":153,"props":2091,"children":2092},{"class":155,"line":203},[2093],{"type":26,"tag":153,"props":2094,"children":2095},{"style":170},[2096],{"type":31,"value":2097},"  \u002F>\n",{"type":26,"tag":153,"props":2099,"children":2100},{"class":155,"line":211},[2101],{"type":26,"tag":153,"props":2102,"children":2103},{"style":170},[2104],{"type":31,"value":2065},{"type":26,"tag":153,"props":2106,"children":2107},{"class":155,"line":20},[2108],{"type":26,"tag":153,"props":2109,"children":2110},{"style":170},[2111],{"type":31,"value":2112},"    srcset=\"\u002Fimages\u002Fhero-desktop.webp\"\n",{"type":26,"tag":153,"props":2114,"children":2115},{"class":155,"line":227},[2116],{"type":26,"tag":153,"props":2117,"children":2118},{"style":170},[2119],{"type":31,"value":2120},"    media=\"(min-width: 641px)\"\n",{"type":26,"tag":153,"props":2122,"children":2123},{"class":155,"line":236},[2124],{"type":26,"tag":153,"props":2125,"children":2126},{"style":170},[2127],{"type":31,"value":2089},{"type":26,"tag":153,"props":2129,"children":2130},{"class":155,"line":244},[2131],{"type":26,"tag":153,"props":2132,"children":2133},{"style":170},[2134],{"type":31,"value":2097},{"type":26,"tag":153,"props":2136,"children":2137},{"class":155,"line":253},[2138],{"type":26,"tag":153,"props":2139,"children":2140},{"style":170},[2141],{"type":31,"value":2142},"  \u003Cimg\n",{"type":26,"tag":153,"props":2144,"children":2145},{"class":155,"line":261},[2146],{"type":26,"tag":153,"props":2147,"children":2148},{"style":170},[2149],{"type":31,"value":2150},"    src=\"\u002Fimages\u002Fhero-desktop.jpg\"\n",{"type":26,"tag":153,"props":2152,"children":2153},{"class":155,"line":270},[2154],{"type":26,"tag":153,"props":2155,"children":2156},{"style":170},[2157],{"type":31,"value":2158},"    alt=\"Neue Saisonkollektion\"\n",{"type":26,"tag":153,"props":2160,"children":2161},{"class":155,"line":278},[2162],{"type":26,"tag":153,"props":2163,"children":2164},{"style":170},[2165],{"type":31,"value":2166},"    fetchpriority=\"high\"\n",{"type":26,"tag":153,"props":2168,"children":2169},{"class":155,"line":781},[2170],{"type":26,"tag":153,"props":2171,"children":2172},{"style":170},[2173],{"type":31,"value":2174},"    decoding=\"async\"\n",{"type":26,"tag":153,"props":2176,"children":2177},{"class":155,"line":789},[2178],{"type":26,"tag":153,"props":2179,"children":2180},{"style":170},[2181],{"type":31,"value":2097},{"type":26,"tag":153,"props":2183,"children":2184},{"class":155,"line":807},[2185,2189,2193],{"type":26,"tag":153,"props":2186,"children":2187},{"style":170},[2188],{"type":31,"value":1341},{"type":26,"tag":153,"props":2190,"children":2191},{"style":1186},[2192],{"type":31,"value":2053},{"type":26,"tag":153,"props":2194,"children":2195},{"style":170},[2196],{"type":31,"value":1199},{"type":26,"tag":27,"props":2198,"children":2199},{},[2200,2202,2208],{"type":31,"value":2201},"Das Attribut ",{"type":26,"tag":109,"props":2203,"children":2205},{"className":2204},[],[2206],{"type":31,"value":2207},"fetchpriority=\"high\"",{"type":31,"value":2209}," signalisiert dem Browser, dieses Bild bevorzugt zu laden. Cloudflare Image Resizing führt die Format-Konvertierung am Edge durch – Tarayıcılara ohne WebP-Support wird JPEG ausgeliefert.",{"type":26,"tag":27,"props":2211,"children":2212},{},[2213,2217,2219,2225],{"type":26,"tag":34,"props":2214,"children":2215},{},[2216],{"type":31,"value":1538},{"type":31,"value":2218}," LCP 2,3s → 2,1s, Bildladedauer 1200ms → 320ms. CLS (Cumulative Layout Shift) 0,12 → 0,02 – wir reservierten mit ",{"type":26,"tag":109,"props":2220,"children":2222},{"className":2221},[],[2223],{"type":31,"value":2224},"aspect-ratio",{"type":31,"value":2226}," CSS Platz für das Bild.",{"type":26,"tag":42,"props":2228,"children":2230},{"id":2229},"benchmark-ergebnisse-echte-user-auswirkung",[2231],{"type":31,"value":2232},"Benchmark-Ergebnisse + echte User-Auswirkung",{"type":26,"tag":27,"props":2234,"children":2235},{},[2236],{"type":31,"value":2237},"PageSpeed Insights Mobil 34 → 92, Desktop 62 → 98. CrUX 28-Tage-Durchschnitt:",{"type":26,"tag":2239,"props":2240,"children":2241},"table",{},[2242,2271],{"type":26,"tag":2243,"props":2244,"children":2245},"thead",{},[2246],{"type":26,"tag":2247,"props":2248,"children":2249},"tr",{},[2250,2256,2261,2266],{"type":26,"tag":2251,"props":2252,"children":2253},"th",{},[2254],{"type":31,"value":2255},"Metrik",{"type":26,"tag":2251,"props":2257,"children":2258},{},[2259],{"type":31,"value":2260},"Vorher",{"type":26,"tag":2251,"props":2262,"children":2263},{},[2264],{"type":31,"value":2265},"Nachher",{"type":26,"tag":2251,"props":2267,"children":2268},{},[2269],{"type":31,"value":2270},"Änderung",{"type":26,"tag":2272,"props":2273,"children":2274},"tbody",{},[2275,2299,2322,2345],{"type":26,"tag":2247,"props":2276,"children":2277},{},[2278,2284,2289,2294],{"type":26,"tag":2279,"props":2280,"children":2281},"td",{},[2282],{"type":31,"value":2283},"LCP",{"type":26,"tag":2279,"props":2285,"children":2286},{},[2287],{"type":31,"value":2288},"10,2s",{"type":26,"tag":2279,"props":2290,"children":2291},{},[2292],{"type":31,"value":2293},"2,1s",{"type":26,"tag":2279,"props":2295,"children":2296},{},[2297],{"type":31,"value":2298},"-79%",{"type":26,"tag":2247,"props":2300,"children":2301},{},[2302,2307,2312,2317],{"type":26,"tag":2279,"props":2303,"children":2304},{},[2305],{"type":31,"value":2306},"TBT",{"type":26,"tag":2279,"props":2308,"children":2309},{},[2310],{"type":31,"value":2311},"2190ms",{"type":26,"tag":2279,"props":2313,"children":2314},{},[2315],{"type":31,"value":2316},"420ms",{"type":26,"tag":2279,"props":2318,"children":2319},{},[2320],{"type":31,"value":2321},"-81%",{"type":26,"tag":2247,"props":2323,"children":2324},{},[2325,2330,2335,2340],{"type":26,"tag":2279,"props":2326,"children":2327},{},[2328],{"type":31,"value":2329},"CLS",{"type":26,"tag":2279,"props":2331,"children":2332},{},[2333],{"type":31,"value":2334},"0,12",{"type":26,"tag":2279,"props":2336,"children":2337},{},[2338],{"type":31,"value":2339},"0,02",{"type":26,"tag":2279,"props":2341,"children":2342},{},[2343],{"type":31,"value":2344},"-83%",{"type":26,"tag":2247,"props":2346,"children":2347},{},[2348,2353,2358,2363],{"type":26,"tag":2279,"props":2349,"children":2350},{},[2351],{"type":31,"value":2352},"TTFB",{"type":26,"tag":2279,"props":2354,"children":2355},{},[2356],{"type":31,"value":2357},"840ms",{"type":26,"tag":2279,"props":2359,"children":2360},{},[2361],{"type":31,"value":2362},"120ms",{"type":26,"tag":2279,"props":2364,"children":2365},{},[2366],{"type":31,"value":2367},"-86%",{"type":26,"tag":27,"props":2369,"children":2370},{},[2371,2373,2380],{"type":31,"value":2372},"Google Analytics Conversion Funnel: Checkout-Initiierung stieg von 3,2% auf 4,8% (+50% relative Steigerung). Bounce Rate fiel von 68% auf 52%. Search Console: organischer Traffic wuchs in 2 Monaten um 34% (andere SEO-Faktoren konstant). Diese Zahlen entsprechen Roibase-Standards im ",{"type":26,"tag":463,"props":2374,"children":2377},{"href":2375,"rel":2376},"https:\u002F\u002Fwww.roibase.com.tr\u002Fde\u002Fheadless",[467],[2378],{"type":31,"value":2379},"Headless Commerce",{"type":31,"value":2381}," – wenn Performance nicht in Business-Metriken mündet, war die Architektur-Änderung nicht erfolgreich.",{"type":26,"tag":42,"props":2383,"children":2385},{"id":2384},"trade-offs-und-entscheidungskriterien",[2386],{"type":31,"value":2387},"Trade-offs und Entscheidungskriterien",{"type":26,"tag":27,"props":2389,"children":2390},{},[2391,2396,2398,2403,2405,2411],{"type":26,"tag":34,"props":2392,"children":2393},{},[2394],{"type":31,"value":2395},"Developer Experience:",{"type":31,"value":2397}," Mit Lazy Hydration Wrappern stieg die Komponenten-API-Komplexität – neue Developer müssen ",{"type":26,"tag":109,"props":2399,"children":2401},{"className":2400},[],[2402],{"type":31,"value":1806},{"type":31,"value":2404}," vs. ",{"type":26,"tag":109,"props":2406,"children":2408},{"className":2407},[],[2409],{"type":31,"value":2410},"when-idle",{"type":31,"value":2412}," verstehen. Wir lösten das mit Storybook-Dokumentation + ESLint-Regeln.",{"type":26,"tag":27,"props":2414,"children":2415},{},[2416,2421],{"type":26,"tag":34,"props":2417,"children":2418},{},[2419],{"type":31,"value":2420},"Bundle Size vs. Runtime Cost:",{"type":31,"value":2422}," Self-hosted Font-Dateien addierten +60kB zum initialen Bundle, sparten aber DNS Lookup + TLS Handshake am Runtime ein. Bei 3G Mobile ist das ein Net-Gewinn, bei Fiber-Connection neutral.",{"type":26,"tag":27,"props":2424,"children":2425},{},[2426,2431,2433,2438],{"type":26,"tag":34,"props":2427,"children":2428},{},[2429],{"type":31,"value":2430},"Cache Invalidation:",{"type":31,"value":2432}," Die ",{"type":26,"tag":109,"props":2434,"children":2436},{"className":2435},[],[2437],{"type":31,"value":1998},{"type":31,"value":2439},"-Strategie trägt Risiko von stalen Daten. Kritische Daten wie Lagerstände fetchen wir client-seitig realtime (Polling alle 30s statt WebSocket – niedrigere Edge-Function-Costs).",{"type":26,"tag":27,"props":2441,"children":2442},{},[2443,2448,2449,2454],{"type":26,"tag":34,"props":2444,"children":2445},{},[2446],{"type":31,"value":2447},"Cloudflare Vendor Lock-in:",{"type":31,"value":1800},{"type":26,"tag":109,"props":2450,"children":2452},{"className":2451},[],[2453],{"type":31,"value":1841},{"type":31,"value":2455}," mit KV-basiertem Caching sind Cloudflare-spezifisch, eine Migration zu Vercel\u002FNetlify erfordert Neuimplementierung. Aber beide Plattformen haben ähnliche Primitives, die Effort ist handhabbar.",{"type":26,"tag":42,"props":2457,"children":2459},{"id":2458},"nächste-schritte",[2460],{"type":31,"value":2461},"Nächste Schritte",{"type":26,"tag":27,"props":2463,"children":2464},{},[2465],{"type":31,"value":2466},"2,1s LCP ist gut, aber CrUX P75 (75. Perzentil) liegt noch bei 3,2s. Unsere Roadmap:",{"type":26,"tag":423,"props":2468,"children":2469},{},[2470,2480,2490,2500],{"type":26,"tag":427,"props":2471,"children":2472},{},[2473,2478],{"type":26,"tag":34,"props":2474,"children":2475},{},[2476],{"type":31,"value":2477},"Image CDN + automatische Format-Verhandlung:",{"type":31,"value":2479}," Cloudflare Polish ersetzen mit Imgix-Integration, AVIF-Support",{"type":26,"tag":427,"props":2481,"children":2482},{},[2483,2488],{"type":26,"tag":34,"props":2484,"children":2485},{},[2486],{"type":31,"value":2487},"Prefetch-Strategie:",{"type":31,"value":2489}," Intersection Observer – wenn Produktkarten ins Viewport rücken, ihre Daten prefetchen",{"type":26,"tag":427,"props":2491,"children":2492},{},[2493,2498],{"type":26,"tag":34,"props":2494,"children":2495},{},[2496],{"type":31,"value":2497},"Service Worker + offline-first:",{"type":31,"value":2499}," Workbox für criticals Assets, network-first Fallback",{"type":26,"tag":427,"props":2501,"children":2502},{},[2503,2508],{"type":26,"tag":34,"props":2504,"children":2505},{},[2506],{"type":31,"value":2507},"Aggressives Bundle Splitting:",{"type":31,"value":2509}," Nuxt 3's Code Splitting maximieren, Route-basiertes Chunking",{"type":26,"tag":27,"props":2511,"children":2512},{},[2513],{"type":31,"value":2514},"Performance-Optimierung ist ein Endspiel – jede 100ms bringt ~1–2% Conversion Lift. Nuxt 3 + Cloudflare Pages kombinieren Edge Rendering mit moderner JavaScript-Framework-Ergonomie. Bei Stack-Entscheidungen sollte LCP als Business Requirement definiert werden – dann folgt die Architektur-Bewertung diesem Constraint.",{"type":26,"tag":1018,"props":2516,"children":2517},{},[2518],{"type":31,"value":1022},{"title":9,"searchDepth":176,"depth":176,"links":2520},[2521,2522,2523,2525,2526,2527,2528,2529],{"id":1057,"depth":166,"text":1060},{"id":1117,"depth":166,"text":1120},{"id":1550,"depth":166,"text":2524},"Selective Hydration + content-visibility",{"id":1811,"depth":166,"text":1814},{"id":2018,"depth":166,"text":2021},{"id":2229,"depth":166,"text":2232},{"id":2384,"depth":166,"text":2387},{"id":2458,"depth":166,"text":2461},"content:de:tech:nuxt-3-cloudflare-pages-lcp-optimierung.md","de\u002Ftech\u002Fnuxt-3-cloudflare-pages-lcp-optimierung.md","de\u002Ftech\u002Fnuxt-3-cloudflare-pages-lcp-optimierung",{"_path":2534,"_dir":2535,"_draft":8,"_partial":8,"_locale":9,"title":2536,"description":2537,"publishedAt":12,"modifiedAt":12,"category":2535,"i18nKey":2538,"tags":2539,"readingTime":227,"author":21,"body":2545,"_type":147,"_id":3498,"_source":1032,"_file":3499,"_stem":3500,"_extension":1035},"\u002Fde\u002Fmarketing\u002Fserver-side-conversions-meta-capi-richtig-einrichten","marketing","Server-Side Conversions: Meta CAPI von Grund auf richtig aufsetzen","sGTM + Conversion API Architektur, Event Match Quality, Deduplication-Strategien und First-Party-Data-Pipeline für iOS-17-Attribution.","marketing-001-2026-05",[2540,2541,2542,2543,2544],"conversion-api","server-side-gtm","attribution","meta-ads","first-party-data",{"type":23,"children":2546,"toc":3489},[2547,2552,2558,2602,2652,2658,2663,2668,2749,2793,2799,2840,2982,2995,3143,3178,3184,3210,3215,3262,3267,3279,3285,3290,3309,3315,3335,3354,3360,3400,3418,3436,3446,3472,3485],{"type":26,"tag":27,"props":2548,"children":2549},{},[2550],{"type":31,"value":2551},"Seit iOS 14.5 ist die Messstärke des Browser-basierten Pixels um 40–60 % gesunken. Nach Metas Q4-2025-Daten liegt der durchschnittliche Event Match Quality Score von Advertisern ohne CAPI unter 3,8\u002F10. Das bedeutet: Der Algorithmus hat nicht genug Signale zum Optimieren. Die erste Phase der Cookie-losen Welt haben Browser-seitige Tracker verloren. Die zweite Phase — in der Server-seitige Architekturen entweder richtig oder oberflächlich aufgesetzt werden — läuft gerade. Meta Conversion API über sGTM sauber zu implementieren ist nicht mehr optional, sondern Infrastruktur-Anforderung im Performance Marketing.",{"type":26,"tag":42,"props":2553,"children":2555},{"id":2554},"warum-der-unterschied-zwischen-pixel-und-capi-kritisch-ist",[2556],{"type":31,"value":2557},"Warum der Unterschied zwischen Pixel und CAPI kritisch ist",{"type":26,"tag":27,"props":2559,"children":2560},{},[2561,2563,2569,2571,2576,2578,2584,2586,2592,2594,2600],{"type":31,"value":2562},"Meta Pixel läuft im Browser. Es hängt von Nutzerzustimmung ab, kann Bot-Traffic nicht filtern und ist von Netzwerk-Latenz betroffen. CAPI sendet einen HTTP-POST direkt vom Server an Meta. Zwei Unterschiede entscheidend: Timing und Datenqualität. Das Pixel schickt ",{"type":26,"tag":109,"props":2564,"children":2566},{"className":2565},[],[2567],{"type":31,"value":2568},"PageView",{"type":31,"value":2570}," ab, wenn der Nutzer die Seite lädt; CAPI kann dasselbe Event nach dem Checkout vom Backend senden. Diese Zeitdifferenz bildet die Grundlage für Deduplication — Meta muss dasselbe Event aus zwei Quellen zusammenführen. Der zweite Unterschied: Bei CAPI kontrollierst du die User-Identifier. ",{"type":26,"tag":109,"props":2572,"children":2574},{"className":2573},[],[2575],{"type":31,"value":66},{"type":31,"value":2577}," (E-Mail-Hash), ",{"type":26,"tag":109,"props":2579,"children":2581},{"className":2580},[],[2582],{"type":31,"value":2583},"ph",{"type":31,"value":2585}," (Telefon-Hash), ",{"type":26,"tag":109,"props":2587,"children":2589},{"className":2588},[],[2590],{"type":31,"value":2591},"fbc",{"type":31,"value":2593}," (Facebook Click ID), ",{"type":26,"tag":109,"props":2595,"children":2597},{"className":2596},[],[2598],{"type":31,"value":2599},"fbp",{"type":31,"value":2601}," (Browser-ID) — wenn du diese nicht korrekt hash'st und sendest, sinkt die Event Match Quality. Niedrige EMQ bedeutet: Der Algorithmus versteht nicht zu 100 %, welcher Nutzer welches Event ausgelöst hat. Das schwächt die Bid-Optimierung. In Metas 2024-Whitepaper wurde bei kombinierter Nutzung von CAPI + Pixel ein durchschnittlicher ROAS-Anstieg von 13 % beobachtet (n=4.200 Advertiser, 60-Tage-Fenster). Aber dieser Zuwachs tritt nur bei korrekter Deduplication auf.",{"type":26,"tag":27,"props":2603,"children":2604},{},[2605,2607,2613,2614,2620,2622,2628,2630,2636,2637,2643,2645,2650],{"type":31,"value":2606},"Das Pixel zu deaktivieren und nur CAPI zu nutzen ist aber auch ein Fehler. Denn das Browser-Pixel erfasst Mid-Funnel-Events wie ",{"type":26,"tag":109,"props":2608,"children":2610},{"className":2609},[],[2611],{"type":31,"value":2612},"ViewContent",{"type":31,"value":414},{"type":26,"tag":109,"props":2615,"children":2617},{"className":2616},[],[2618],{"type":31,"value":2619},"AddToCart",{"type":31,"value":2621}," in Echtzeit; CAPI wird meist nur für ",{"type":26,"tag":109,"props":2623,"children":2625},{"className":2624},[],[2626],{"type":31,"value":2627},"Purchase",{"type":31,"value":2629}," verwendet. Die Balance ist entscheidend: Pixel schlank halten, kritische Conversions über CAPI duplizieren. Hier greifen Deduplication-Parameter. Metas System schaut auf die Kombination ",{"type":26,"tag":109,"props":2631,"children":2633},{"className":2632},[],[2634],{"type":31,"value":2635},"event_id",{"type":31,"value":414},{"type":26,"tag":109,"props":2638,"children":2640},{"className":2639},[],[2641],{"type":31,"value":2642},"event_time",{"type":31,"value":2644},", um dieselbe Aktion nicht doppelt zu zählen. Gibst du diese Parameter zwischen Frontend und CAPI nicht identisch an, funktioniert die Dedup nicht. Viele Implementierungen scheitern genau hier: Im Frontend wird ",{"type":26,"tag":109,"props":2646,"children":2648},{"className":2647},[],[2649],{"type":31,"value":2635},{"type":31,"value":2651}," mit UUID generiert, im Backend mit einer anderen ID gesendet. Folge: Zwei separate Events werden gezählt, ROAS-Reports werden aufgebläht.",{"type":26,"tag":42,"props":2653,"children":2655},{"id":2654},"sgtm-infrastruktur-aufbauen",[2656],{"type":31,"value":2657},"sGTM-Infrastruktur aufbauen",{"type":26,"tag":27,"props":2659,"children":2660},{},[2661],{"type":31,"value":2662},"CAPI lässt sich auch ohne Server-Side GTM implementieren — du kannst direkt vom Backend zu Meta posten. Aber dieser Ansatz hat Skalierungsprobleme. Sobald du mehrere Destinationen hinzufügst (Google Ads Enhanced Conversions, TikTok Events API, Snapchat CAPI), musst du für jede einen eigenen Endpoint schreiben. sGTM bietet eine Abstraktionsebene: Ein Server-Container bedient alle Tagging-Anforderungen. Er wird auf Google Cloud Run oder App Engine gehostet. Er erfasst HTTP-Requests vom Client-seitigen GTM-Container, triggert Server-seitige Tags und sendet dann parallel an Meta, Google und TikTok.",{"type":26,"tag":27,"props":2664,"children":2665},{},[2666],{"type":31,"value":2667},"Das Setup funktioniert so:",{"type":26,"tag":423,"props":2669,"children":2670},{},[2671,2688,2714,2724],{"type":26,"tag":427,"props":2672,"children":2673},{},[2674,2679,2680,2686],{"type":26,"tag":34,"props":2675,"children":2676},{},[2677],{"type":31,"value":2678},"Cloud Run-Instance erstellen:",{"type":31,"value":1800},{"type":26,"tag":109,"props":2681,"children":2683},{"className":2682},[],[2684],{"type":31,"value":2685},"gcloud run deploy gtm-server --image=gcr.io\u002Fcloud-tagging-10302018\u002Fgtm-cloud-image:stable --platform=managed --region=europe-west1",{"type":31,"value":2687},". Dieser Befehl deployt Googles offizielles sGTM-Image.",{"type":26,"tag":427,"props":2689,"children":2690},{},[2691,2696,2698,2704,2706,2712],{"type":26,"tag":34,"props":2692,"children":2693},{},[2694],{"type":31,"value":2695},"Tagging-Server-URL abrufen:",{"type":31,"value":2697}," Nach dem Deployment erhältst du eine URL wie ",{"type":26,"tag":109,"props":2699,"children":2701},{"className":2700},[],[2702],{"type":31,"value":2703},"https:\u002F\u002Fgtm-server-xxxxx-ew.a.run.app",{"type":31,"value":2705},". Diese URL setzt du in der Client-seitigen GTM als ",{"type":26,"tag":109,"props":2707,"children":2709},{"className":2708},[],[2710],{"type":31,"value":2711},"serverContainerUrl",{"type":31,"value":2713}," ein.",{"type":26,"tag":427,"props":2715,"children":2716},{},[2717,2722],{"type":26,"tag":34,"props":2718,"children":2719},{},[2720],{"type":31,"value":2721},"GA4-Tag in Client-GTM ändern:",{"type":31,"value":2723}," Normalerweise geht GA4 direkt zu Google. Wenn du sGTM-URL als Transport-URL setzt, fließen GA4-Daten erst zu deinem Server, dann zu Google. Das ermöglicht auch IP-Anonymisierung und User-Agent-Normalisierung auf der Serverseite.",{"type":26,"tag":427,"props":2725,"children":2726},{},[2727,2732,2734,2740,2741,2747],{"type":26,"tag":34,"props":2728,"children":2729},{},[2730],{"type":31,"value":2731},"Meta Conversions API-Tag in sGTM hinzufügen:",{"type":31,"value":2733}," Nutze die Template \"Meta Conversions API\". Gib ",{"type":26,"tag":109,"props":2735,"children":2737},{"className":2736},[],[2738],{"type":31,"value":2739},"Pixel ID",{"type":31,"value":414},{"type":26,"tag":109,"props":2742,"children":2744},{"className":2743},[],[2745],{"type":31,"value":2746},"Access Token",{"type":31,"value":2748}," ein. Den Access Token holst du über Events Manager > Settings > Conversions API. Hier kannst du mit einem Test-Event die Verbindung überprüfen.",{"type":26,"tag":27,"props":2750,"children":2751},{},[2752,2754,2760,2762,2768,2770,2775,2777,2782,2784,2791],{"type":31,"value":2753},"Ein Vorteil von sGTM: Ein einzelner Request kann Events an GA4 und CAPI senden. Ein Client-seitiges ",{"type":26,"tag":109,"props":2755,"children":2757},{"className":2756},[],[2758],{"type":31,"value":2759},"dataLayer.push",{"type":31,"value":2761},", das einen Trigger auslöst, kann zwei verschiedene Server-seitige Tags zünden. Das erspart dir separate API-Calls im Backend. Aber auch hier: ",{"type":26,"tag":109,"props":2763,"children":2765},{"className":2764},[],[2766],{"type":31,"value":2767},"client_id",{"type":31,"value":2769}," aus GA4 ist nicht identisch mit Meta's ",{"type":26,"tag":109,"props":2771,"children":2773},{"className":2772},[],[2774],{"type":31,"value":2599},{"type":31,"value":2776},". In sGTM brauchst du eine Transformation-Variable — ",{"type":26,"tag":109,"props":2778,"children":2780},{"className":2779},[],[2781],{"type":31,"value":2599},{"type":31,"value":2783},"-Cookie auslesen und zum CAPI-Tag mappen. Diese Zuordnung erfordert eine ",{"type":26,"tag":463,"props":2785,"children":2788},{"href":2786,"rel":2787},"https:\u002F\u002Fwww.roibase.com.tr\u002Fde\u002Ffirstparty",[467],[2789],{"type":31,"value":2790},"First-Party-Daten-Architektur",{"type":31,"value":2792},"; sonst synchronisieren sich Identifier nicht, EMQ sinkt.",{"type":26,"tag":42,"props":2794,"children":2796},{"id":2795},"event-match-quality-erhöhen",[2797],{"type":31,"value":2798},"Event Match Quality erhöhen",{"type":26,"tag":27,"props":2800,"children":2801},{},[2802,2804,2809,2811,2816,2818,2824,2826,2831,2833,2838],{"type":31,"value":2803},"EMQ ist Metas Vertrauensscore: \"Dieses Event welchem Nutzer kann ich zuordnen?\" Maximum ist 10. Über 8 ist exzellent, unter 6 problematisch. EMQ steigt mit korrekter Identifier-Kombination. Nach Metas Dokumentation: Priorität ",{"type":26,"tag":109,"props":2805,"children":2807},{"className":2806},[],[2808],{"type":31,"value":66},{"type":31,"value":2810}," (E-Mail) > ",{"type":26,"tag":109,"props":2812,"children":2814},{"className":2813},[],[2815],{"type":31,"value":2583},{"type":31,"value":2817}," (Telefon) > ",{"type":26,"tag":109,"props":2819,"children":2821},{"className":2820},[],[2822],{"type":31,"value":2823},"external_id",{"type":31,"value":2825}," (CRM-ID) > ",{"type":26,"tag":109,"props":2827,"children":2829},{"className":2828},[],[2830],{"type":31,"value":2591},{"type":31,"value":2832}," > ",{"type":26,"tag":109,"props":2834,"children":2836},{"className":2835},[],[2837],{"type":31,"value":2599},{"type":31,"value":2839},". E-Mail und Telefon mit SHA-256 hashen, in Kleinbuchstaben, keine Leerzeichen. Beispiel:",{"type":26,"tag":143,"props":2841,"children":2845},{"className":2842,"code":2843,"language":2844,"meta":9,"style":9},"language-javascript shiki shiki-themes github-dark","\u002F\u002F Falsch\nconst email = \" John@Example.com \";\nconst hash = sha256(email); \u002F\u002F Leerzeichen und Großbuchstaben sind Problem\n\n\u002F\u002F Richtig\nconst email = \"john@example.com\";\nconst hash = sha256(email); \u002F\u002F SHA-256: a665a...\n","javascript",[2846],{"type":26,"tag":109,"props":2847,"children":2848},{"__ignoreMap":9},[2849,2857,2884,2915,2922,2930,2954],{"type":26,"tag":153,"props":2850,"children":2851},{"class":155,"line":156},[2852],{"type":26,"tag":153,"props":2853,"children":2854},{"style":1172},[2855],{"type":31,"value":2856},"\u002F\u002F Falsch\n",{"type":26,"tag":153,"props":2858,"children":2859},{"class":155,"line":166},[2860,2865,2870,2875,2880],{"type":26,"tag":153,"props":2861,"children":2862},{"style":496},[2863],{"type":31,"value":2864},"const",{"type":26,"tag":153,"props":2866,"children":2867},{"style":672},[2868],{"type":31,"value":2869}," email",{"type":26,"tag":153,"props":2871,"children":2872},{"style":496},[2873],{"type":31,"value":2874}," =",{"type":26,"tag":153,"props":2876,"children":2877},{"style":626},[2878],{"type":31,"value":2879}," \" John@Example.com \"",{"type":26,"tag":153,"props":2881,"children":2882},{"style":170},[2883],{"type":31,"value":1406},{"type":26,"tag":153,"props":2885,"children":2886},{"class":155,"line":176},[2887,2891,2896,2900,2905,2910],{"type":26,"tag":153,"props":2888,"children":2889},{"style":496},[2890],{"type":31,"value":2864},{"type":26,"tag":153,"props":2892,"children":2893},{"style":672},[2894],{"type":31,"value":2895}," hash",{"type":26,"tag":153,"props":2897,"children":2898},{"style":496},[2899],{"type":31,"value":2874},{"type":26,"tag":153,"props":2901,"children":2902},{"style":544},[2903],{"type":31,"value":2904}," sha256",{"type":26,"tag":153,"props":2906,"children":2907},{"style":170},[2908],{"type":31,"value":2909},"(email); ",{"type":26,"tag":153,"props":2911,"children":2912},{"style":1172},[2913],{"type":31,"value":2914},"\u002F\u002F Leerzeichen und Großbuchstaben sind Problem\n",{"type":26,"tag":153,"props":2916,"children":2917},{"class":155,"line":184},[2918],{"type":26,"tag":153,"props":2919,"children":2920},{"emptyLinePlaceholder":188},[2921],{"type":31,"value":191},{"type":26,"tag":153,"props":2923,"children":2924},{"class":155,"line":194},[2925],{"type":26,"tag":153,"props":2926,"children":2927},{"style":1172},[2928],{"type":31,"value":2929},"\u002F\u002F Richtig\n",{"type":26,"tag":153,"props":2931,"children":2932},{"class":155,"line":203},[2933,2937,2941,2945,2950],{"type":26,"tag":153,"props":2934,"children":2935},{"style":496},[2936],{"type":31,"value":2864},{"type":26,"tag":153,"props":2938,"children":2939},{"style":672},[2940],{"type":31,"value":2869},{"type":26,"tag":153,"props":2942,"children":2943},{"style":496},[2944],{"type":31,"value":2874},{"type":26,"tag":153,"props":2946,"children":2947},{"style":626},[2948],{"type":31,"value":2949}," \"john@example.com\"",{"type":26,"tag":153,"props":2951,"children":2952},{"style":170},[2953],{"type":31,"value":1406},{"type":26,"tag":153,"props":2955,"children":2956},{"class":155,"line":211},[2957,2961,2965,2969,2973,2977],{"type":26,"tag":153,"props":2958,"children":2959},{"style":496},[2960],{"type":31,"value":2864},{"type":26,"tag":153,"props":2962,"children":2963},{"style":672},[2964],{"type":31,"value":2895},{"type":26,"tag":153,"props":2966,"children":2967},{"style":496},[2968],{"type":31,"value":2874},{"type":26,"tag":153,"props":2970,"children":2971},{"style":544},[2972],{"type":31,"value":2904},{"type":26,"tag":153,"props":2974,"children":2975},{"style":170},[2976],{"type":31,"value":2909},{"type":26,"tag":153,"props":2978,"children":2979},{"style":1172},[2980],{"type":31,"value":2981},"\u002F\u002F SHA-256: a665a...\n",{"type":26,"tag":27,"props":2983,"children":2984},{},[2985,2987,2993],{"type":31,"value":2986},"Im CAPI-Request sieht das ",{"type":26,"tag":109,"props":2988,"children":2990},{"className":2989},[],[2991],{"type":31,"value":2992},"user_data",{"type":31,"value":2994},"-Objekt so aus:",{"type":26,"tag":143,"props":2996,"children":3000},{"className":2997,"code":2998,"language":2999,"meta":9,"style":9},"language-json shiki shiki-themes github-dark","{\n  \"em\": [\"a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3\"],\n  \"ph\": [\"sha256_telefon_hash\"],\n  \"fbc\": \"fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz\",\n  \"fbp\": \"fb.1.1558571054389.1098115397\",\n  \"client_ip_address\": \"93.184.216.34\",\n  \"client_user_agent\": \"Mozilla\u002F5.0...\"\n}\n","json",[3001],{"type":26,"tag":109,"props":3002,"children":3003},{"__ignoreMap":9},[3004,3012,3035,3056,3077,3098,3119,3136],{"type":26,"tag":153,"props":3005,"children":3006},{"class":155,"line":156},[3007],{"type":26,"tag":153,"props":3008,"children":3009},{"style":170},[3010],{"type":31,"value":3011},"{\n",{"type":26,"tag":153,"props":3013,"children":3014},{"class":155,"line":166},[3015,3020,3025,3030],{"type":26,"tag":153,"props":3016,"children":3017},{"style":672},[3018],{"type":31,"value":3019},"  \"em\"",{"type":26,"tag":153,"props":3021,"children":3022},{"style":170},[3023],{"type":31,"value":3024},": [",{"type":26,"tag":153,"props":3026,"children":3027},{"style":626},[3028],{"type":31,"value":3029},"\"a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3\"",{"type":26,"tag":153,"props":3031,"children":3032},{"style":170},[3033],{"type":31,"value":3034},"],\n",{"type":26,"tag":153,"props":3036,"children":3037},{"class":155,"line":176},[3038,3043,3047,3052],{"type":26,"tag":153,"props":3039,"children":3040},{"style":672},[3041],{"type":31,"value":3042},"  \"ph\"",{"type":26,"tag":153,"props":3044,"children":3045},{"style":170},[3046],{"type":31,"value":3024},{"type":26,"tag":153,"props":3048,"children":3049},{"style":626},[3050],{"type":31,"value":3051},"\"sha256_telefon_hash\"",{"type":26,"tag":153,"props":3053,"children":3054},{"style":170},[3055],{"type":31,"value":3034},{"type":26,"tag":153,"props":3057,"children":3058},{"class":155,"line":184},[3059,3064,3068,3073],{"type":26,"tag":153,"props":3060,"children":3061},{"style":672},[3062],{"type":31,"value":3063},"  \"fbc\"",{"type":26,"tag":153,"props":3065,"children":3066},{"style":170},[3067],{"type":31,"value":1396},{"type":26,"tag":153,"props":3069,"children":3070},{"style":626},[3071],{"type":31,"value":3072},"\"fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz\"",{"type":26,"tag":153,"props":3074,"children":3075},{"style":170},[3076],{"type":31,"value":634},{"type":26,"tag":153,"props":3078,"children":3079},{"class":155,"line":194},[3080,3085,3089,3094],{"type":26,"tag":153,"props":3081,"children":3082},{"style":672},[3083],{"type":31,"value":3084},"  \"fbp\"",{"type":26,"tag":153,"props":3086,"children":3087},{"style":170},[3088],{"type":31,"value":1396},{"type":26,"tag":153,"props":3090,"children":3091},{"style":626},[3092],{"type":31,"value":3093},"\"fb.1.1558571054389.1098115397\"",{"type":26,"tag":153,"props":3095,"children":3096},{"style":170},[3097],{"type":31,"value":634},{"type":26,"tag":153,"props":3099,"children":3100},{"class":155,"line":203},[3101,3106,3110,3115],{"type":26,"tag":153,"props":3102,"children":3103},{"style":672},[3104],{"type":31,"value":3105},"  \"client_ip_address\"",{"type":26,"tag":153,"props":3107,"children":3108},{"style":170},[3109],{"type":31,"value":1396},{"type":26,"tag":153,"props":3111,"children":3112},{"style":626},[3113],{"type":31,"value":3114},"\"93.184.216.34\"",{"type":26,"tag":153,"props":3116,"children":3117},{"style":170},[3118],{"type":31,"value":634},{"type":26,"tag":153,"props":3120,"children":3121},{"class":155,"line":211},[3122,3127,3131],{"type":26,"tag":153,"props":3123,"children":3124},{"style":672},[3125],{"type":31,"value":3126},"  \"client_user_agent\"",{"type":26,"tag":153,"props":3128,"children":3129},{"style":170},[3130],{"type":31,"value":1396},{"type":26,"tag":153,"props":3132,"children":3133},{"style":626},[3134],{"type":31,"value":3135},"\"Mozilla\u002F5.0...\"\n",{"type":26,"tag":153,"props":3137,"children":3138},{"class":155,"line":20},[3139],{"type":26,"tag":153,"props":3140,"children":3141},{"style":170},[3142],{"type":31,"value":1514},{"type":26,"tag":27,"props":3144,"children":3145},{},[3146,3148,3154,3156,3161,3163,3169,3171,3176],{"type":31,"value":3147},"sGTM liest IP und User Agent automatisch aus, aber bei manchen Hosting-Umgebungen (Cloudflare-Proxy) musst du ",{"type":26,"tag":109,"props":3149,"children":3151},{"className":3150},[],[3152],{"type":31,"value":3153},"X-Forwarded-For",{"type":31,"value":3155},"-Header parsen. ",{"type":26,"tag":109,"props":3157,"children":3159},{"className":3158},[],[3160],{"type":31,"value":2591},{"type":31,"value":3162}," ist die Facebook Click ID — wenn ein Nutzer auf eine Meta-Ad klickt, wird in der URL ",{"type":26,"tag":109,"props":3164,"children":3166},{"className":3165},[],[3167],{"type":31,"value":3168},"fbclid=...",{"type":31,"value":3170}," angehängt. Schreibst du diesen Wert ins Cookie und sendest ihn an CAPI, schließt sich die Attribution-Schleife. Die meisten Implementierungen lassen ",{"type":26,"tag":109,"props":3172,"children":3174},{"className":3173},[],[3175],{"type":31,"value":2591},{"type":31,"value":3177}," weg, sodass Meta nicht sieht, welche Ad die Conversion ausgelöst hat. EMQ bleibt bei 4.2.",{"type":26,"tag":42,"props":3179,"children":3181},{"id":3180},"deduplication-strategie",[3182],{"type":31,"value":3183},"Deduplication-Strategie",{"type":26,"tag":27,"props":3185,"children":3186},{},[3187,3189,3194,3196,3201,3203,3208],{"type":31,"value":3188},"Wenn dasselbe ",{"type":26,"tag":109,"props":3190,"children":3192},{"className":3191},[],[3193],{"type":31,"value":2627},{"type":31,"value":3195},"-Event von Pixel und CAPI kommt, muss ",{"type":26,"tag":109,"props":3197,"children":3199},{"className":3198},[],[3200],{"type":31,"value":2635},{"type":31,"value":3202}," identisch sein, damit Meta es als ein Event zählt. Normalerweise wird UUID v4 verwendet. Wenn UUID im Frontend generiert wird, muss sie ans Backend übertragen werden. Lösung: Event-ID als verstecktes Input-Feld im Checkout-Formular oder in localStorage speichern. Wenn das Backend die Bestellung bestätigt, nimmt es dieselbe ID für den CAPI-Request. Die Zeitdifferenz muss unter 48 Stunden liegen (Metas Dedup-Fenster). Überschreitet die ",{"type":26,"tag":109,"props":3204,"children":3206},{"className":3205},[],[3207],{"type":31,"value":2642},{"type":31,"value":3209},"-Differenz 48 Stunden, werden beide als separate Events gezählt.",{"type":26,"tag":27,"props":3211,"children":3212},{},[3213],{"type":31,"value":3214},"Beispiel-Ablauf:",{"type":26,"tag":423,"props":3216,"children":3217},{},[3218,3239,3257],{"type":26,"tag":427,"props":3219,"children":3220},{},[3221,3223,3229,3231,3237],{"type":31,"value":3222},"Nutzer klickt \"Kaufen\" → Pixel sendet ",{"type":26,"tag":109,"props":3224,"children":3226},{"className":3225},[],[3227],{"type":31,"value":3228},"InitiateCheckout",{"type":31,"value":3230}," (event_id: ",{"type":26,"tag":109,"props":3232,"children":3234},{"className":3233},[],[3235],{"type":31,"value":3236},"evt_12345",{"type":31,"value":3238},", event_time: 1683820800)",{"type":26,"tag":427,"props":3240,"children":3241},{},[3242,3244,3249,3250,3255],{"type":31,"value":3243},"Backend bestätigt Zahlung → CAPI sendet ",{"type":26,"tag":109,"props":3245,"children":3247},{"className":3246},[],[3248],{"type":31,"value":2627},{"type":31,"value":3230},{"type":26,"tag":109,"props":3251,"children":3253},{"className":3252},[],[3254],{"type":31,"value":3236},{"type":31,"value":3256},", event_time: 1683820802)",{"type":26,"tag":427,"props":3258,"children":3259},{},[3260],{"type":31,"value":3261},"Meta sieht beide Events, event_id stimmt überein, Zeitdifferenz 2 Sekunden → wird als ein Event behandelt.",{"type":26,"tag":27,"props":3263,"children":3264},{},[3265],{"type":31,"value":3266},"Ohne dieses Setup zählt Meta beide als separate Conversions. ROAS-Berechnung wird um den Faktor 2 aufgebläht. Du siehst im Dashboard \"100 Conversions\", aber real sind es 50. Wenn du das nicht merkst, läuft die Budget-Allokation falsch.",{"type":26,"tag":27,"props":3268,"children":3269},{},[3270,3272,3277],{"type":31,"value":3271},"In manchen Fällen geht das Pixel-Event verloren (Ad Blocker, fehlende Genehmigung). Dann läuft CAPI allein. Ohne Dedup kein Problem. Aber wenn das Pixel-Event verzögert kommt (Nutzer war offline, Browser-Queue sendet Event 10 Minuten später) und event_id falsch ist, zählt Meta es als neues Event. Um diesen Edge Case zu handhaben, solltest du Server-seitige ",{"type":26,"tag":109,"props":3273,"children":3275},{"className":3274},[],[3276],{"type":31,"value":2642},{"type":31,"value":3278}," auf den Backend-Timestamp der Bestellung fixieren — nicht auf die Browser-Zeit des Nutzers.",{"type":26,"tag":42,"props":3280,"children":3282},{"id":3281},"inkrementalität-und-capi-test",[3283],{"type":31,"value":3284},"Inkrementalität und CAPI-Test",{"type":26,"tag":27,"props":3286,"children":3287},{},[3288],{"type":31,"value":3289},"Nach CAPI-Setup reicht der Report \"EMQ 8.5, Dedup funktioniert\" nicht aus. Die echte Frage: Würden diese Conversions auch ohne CAPI entstehen? Dafür brauchst du Geo-basierte Holdout-Tests oder ein Conversion Lift Study. Metas eigenes Lift-Tool hat hohe Schwellwerte ($30k+ Minimum-Spend). Alternative: einfacher A\u002FB-Test. 50 % Traffic mit CAPI, 50 % ohne. Nach 14 Tagen schaust du auf inkrementalen ROAS. Wenn die CAPI-Gruppe 15 % besser performt, hast du den Wert der Infrastruktur nachgewiesen.",{"type":26,"tag":27,"props":3291,"children":3292},{},[3293,3295,3300,3302,3307],{"type":31,"value":3294},"Eine weitere Metrik: Attribution Windows prüfen. Mit CAPI wird die Zuverlässigkeit von 7-Day-Click-Attribution höher, weil Post-Click-Events vom Backend kommen, nicht Bot-Traffic. Im Pixel sind Bot-Raten 8–12 %. Bei CAPI mit IP-Whitelist sinkt das unter 1 %. Das heißt: Campaign-Optimierung arbeitet mit sauberen Signalen. Je nach Test-Ergebnis deaktivieren manche Advertiser das Pixel komplett, nutzen nur noch CAPI (besonders in B2B Lead Gen). Für E-Commerce ist diese Strategie aber riskant: ",{"type":26,"tag":109,"props":3296,"children":3298},{"className":3297},[],[3299],{"type":31,"value":2612},{"type":31,"value":3301},"- und ",{"type":26,"tag":109,"props":3303,"children":3305},{"className":3304},[],[3306],{"type":31,"value":2619},{"type":31,"value":3308},"-Signale gehen verloren. Das schwächt Dynamic-Retargeting-Audiences.",{"type":26,"tag":42,"props":3310,"children":3312},{"id":3311},"advanced-custom-events-und-offline-conversions",[3313],{"type":31,"value":3314},"Advanced: Custom Events und Offline-Conversions",{"type":26,"tag":27,"props":3316,"children":3317},{},[3318,3320,3326,3327,3333],{"type":31,"value":3319},"Meta CAPI ist nicht auf Standard-Events beschränkt. Du kannst Custom Events definieren und vom Backend senden. Zum Beispiel ",{"type":26,"tag":109,"props":3321,"children":3323},{"className":3322},[],[3324],{"type":31,"value":3325},"SubscriptionRenewal",{"type":31,"value":372},{"type":26,"tag":109,"props":3328,"children":3330},{"className":3329},[],[3331],{"type":31,"value":3332},"TrialStarted",{"type":31,"value":3334},". Diese Events als Custom Conversions definieren und als Campaign-Optimization-Objective nutzen. Besonders in SaaS ist es wertvoll, Long-Term Events (90-Day Retention, Upsell) per CAPI zu senden und in die Bid-Strategie einzubauen. Ähnlich wie Google Ads Offline-Conversion Import.",{"type":26,"tag":27,"props":3336,"children":3337},{},[3338,3340,3345,3347,3352],{"type":31,"value":3339},"Offline-Conversion-Szenario: Nutzer füllt Online Lead Form aus, Sales-Team schließt Deal 5 Tage später per Telefon ab. Exportiere diesen Deal aus der CRM und sende ihn als ",{"type":26,"tag":109,"props":3341,"children":3343},{"className":3342},[],[3344],{"type":31,"value":2627},{"type":31,"value":3346}," per CAPI an Meta. Hier ist ",{"type":26,"tag":109,"props":3348,"children":3350},{"className":3349},[],[3351],{"type":31,"value":2642},{"type":31,"value":3353}," rückdatiert. Meta akzeptiert Conversions bis 62 Tage rückwärts. Aber dieses Event wirkt sich weniger auf den Optimierungs-Algorithmus aus, da Kampagnen mit Echtzeit-Signalen optimiert werden. Trotzdem notwendig für Report-Korrektheit. Automatisiere die CRM-CAPI-Integration mit Zapier oder n8n; jedem neuen \"Closed Won\" Deal triggert ein CAPI-POST.",{"type":26,"tag":42,"props":3355,"children":3357},{"id":3356},"häufige-fehler-und-lösungen",[3358],{"type":31,"value":3359},"Häufige Fehler und Lösungen",{"type":26,"tag":27,"props":3361,"children":3362},{},[3363,3375,3377,3383,3385,3391,3393,3398],{"type":26,"tag":34,"props":3364,"children":3365},{},[3366,3368,3373],{"type":31,"value":3367},"1. ",{"type":26,"tag":109,"props":3369,"children":3371},{"className":3370},[],[3372],{"type":31,"value":2591},{"type":31,"value":3374},"-Parameter fehlt:",{"type":31,"value":3376}," Wenn Nutzer auf Meta-Ad klickt, ist ",{"type":26,"tag":109,"props":3378,"children":3380},{"className":3379},[],[3381],{"type":31,"value":3382},"fbclid",{"type":31,"value":3384}," in der URL. Schreibst du es nicht ins Cookie, kannst du es nicht an CAPI senden. Lösung: In GTM ein Cookie-Variable erstellen, Name ",{"type":26,"tag":109,"props":3386,"children":3388},{"className":3387},[],[3389],{"type":31,"value":3390},"_fbc",{"type":31,"value":3392},", 90 Tage Speicherdauer. Im CAPI-Tag diese Variable zum ",{"type":26,"tag":109,"props":3394,"children":3396},{"className":3395},[],[3397],{"type":31,"value":2591},{"type":31,"value":3399},"-Parameter mappen.",{"type":26,"tag":27,"props":3401,"children":3402},{},[3403,3408,3410,3416],{"type":26,"tag":34,"props":3404,"children":3405},{},[3406],{"type":31,"value":3407},"2. E-Mail-Hash falsch:",{"type":31,"value":3409}," Leerzeichen oder Großbuchstaben → Hash passt nicht. Alle Strings mit ",{"type":26,"tag":109,"props":3411,"children":3413},{"className":3412},[],[3414],{"type":31,"value":3415},"trim().toLowerCase()",{"type":31,"value":3417}," bereinigen, dann SHA-256.",{"type":26,"tag":27,"props":3419,"children":3420},{},[3421,3426,3428,3434],{"type":26,"tag":34,"props":3422,"children":3423},{},[3424],{"type":31,"value":3425},"3. Test Mode nicht auf Production umgestellt:",{"type":31,"value":3427}," In Events Manager werden unter \"Test Events\" Einträge sichtbar, aber kein echter Traffic. Entferne ",{"type":26,"tag":109,"props":3429,"children":3431},{"className":3430},[],[3432],{"type":31,"value":3433},"test_event_code",{"type":31,"value":3435},"-Parameter, nutze Production-Token.",{"type":26,"tag":27,"props":3437,"children":3438},{},[3439,3444],{"type":26,"tag":34,"props":3440,"children":3441},{},[3442],{"type":31,"value":3443},"4. Server-Container-Logs nicht geprüft:",{"type":31,"value":3445}," sGTM Cloud Run Logs zeigen CAPI-Responses. Siehst du etwas anderes als 200 OK (401, 400), ist Token oder Payload falsch.",{"type":26,"tag":27,"props":3447,"children":3448},{},[3449,3454,3456,3462,3464,3470],{"type":26,"tag":34,"props":3450,"children":3451},{},[3452],{"type":31,"value":3453},"5. Datentyp-Unstimmigkeit zwischen Pixel und CAPI:",{"type":31,"value":3455}," Pixel sendet ",{"type":26,"tag":109,"props":3457,"children":3459},{"className":3458},[],[3460],{"type":31,"value":3461},"value",{"type":31,"value":3463}," als Float, CAPI als Integer. Meta kann Währung runden. Lösung: Auf beiden Seiten ",{"type":26,"tag":109,"props":3465,"children":3467},{"className":3466},[],[3468],{"type":31,"value":3469},"value: parseFloat(orderTotal).toFixed(2)",{"type":31,"value":3471}," nutzen.",{"type":26,"tag":27,"props":3473,"children":3474},{},[3475,3477,3483],{"type":31,"value":3476},"Wichtig: CAPI-Setup ist keine einmalige Aufgabe. iOS-Updates, Meta API-Versionswechsel, neue Identifier-Typen (etwa ",{"type":26,"tag":109,"props":3478,"children":3480},{"className":3479},[],[3481],{"type":31,"value":3482},"anon_id",{"type":31,"value":3484},", 2025 in Beta) erfordern regelmäßige Wartung. Überwache EMQ-Trends",{"type":26,"tag":1018,"props":3486,"children":3487},{},[3488],{"type":31,"value":1022},{"title":9,"searchDepth":176,"depth":176,"links":3490},[3491,3492,3493,3494,3495,3496,3497],{"id":2554,"depth":166,"text":2557},{"id":2654,"depth":166,"text":2657},{"id":2795,"depth":166,"text":2798},{"id":3180,"depth":166,"text":3183},{"id":3281,"depth":166,"text":3284},{"id":3311,"depth":166,"text":3314},{"id":3356,"depth":166,"text":3359},"content:de:marketing:server-side-conversions-meta-capi-richtig-einrichten.md","de\u002Fmarketing\u002Fserver-side-conversions-meta-capi-richtig-einrichten.md","de\u002Fmarketing\u002Fserver-side-conversions-meta-capi-richtig-einrichten",{"ai":156,"marketing":156,"tech":156,"data":3502,"gaming":3502,"travel":3502,"lifestyle":3502},0,1778164175045]