Background Decoration
27.1.2026Dietrich Bojko4 Min. Lesezeit

Technische SEO Fehler bei modernen Web-Apps (SPAs)

Zurück zur Übersicht
Technische SEO Fehler bei modernen Web-Apps (SPAs)
Ein futuristisches Tablet zeigt eine defekte Web-App-Oberfläche mit einer roten Soft 404 Fehlermeldung.
2 Views

Häufig gestellte Fragen (FAQ)

Ja, Google ist da ziemlich direkt. Wenn unter "Seitenindexierung" die Meldung "Gesendet URL scheint ein Soft 404 zu sein" auftaucht, brennt die Hütte. Das heißt, Google hat gemerkt, dass ihr ihm leere Seiten als "Inhalt" verkaufen wolltet.
Es ist ein Pflaster. Tools wie Prerender.io führen eure JS-App in einem Headless-Browser aus und speichern das HTML als Snapshot. Das löst das Problem, dass der Bot nichts sieht. Aber es ist eine weitere Schicht Komplexität, die kaputtgehen kann. Echtes SSR (Server Side Rendering) ist sauberer.
React Helmet setzt brav den und die Meta-Description. Super. Aber wenn der Content erst nach 3 Sekunden Spinner-Animation lädt oder interne Links fehlen, rettet euch der Titel auch nicht mehr. SEO ist das Gesamtpaket.</div></div></div></div></div><div class="group bg-white/80 backdrop-blur-sm rounded-xl border border-white/20 shadow-sm hover:shadow-md transition-all duration-300 overflow-hidden"><button class="w-full flex justify-between items-center cursor-pointer p-6 text-left font-bold text-gray-900 hover:bg-white/50 transition-colors focus:outline-none"><span>Was ist mit "Lazy Loading" von Modulen?</span><span class="transform transition-transform duration-300 text-primary bg-primary/10 rounded-full p-1 "><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-down w-5 h-5" aria-hidden="true"><path d="M12 5v14"></path><path d="m19 12-7 7-7-7"></path></svg></span></button><div class="grid transition-[grid-template-rows] duration-300 ease-out grid-rows-[0fr]"><div class="overflow-hidden"><div class="px-6 pb-6 text-gray-600 leading-relaxed bg-white/30"><div class="prose prose-sm max-w-none">Code-Splitting ist super für die Performance (Core Web Vitals). Aber achten Sie darauf, dass Text-Inhalte nicht erst nach einer User-Interaktion (z.B. Scrollen) nachgeladen werden. Googlebot scrollt nicht! Alles Wichtige muss beim initialen Load (oder kurz danach) im DOM sein.</div></div></div></div></div></div></div><div class="mt-16 p-8 rounded-2xl bg-gradient-to-br from-secondary/5 to-primary/5 border border-secondary/10 relative overflow-hidden group"><div class="absolute -right-8 -bottom-8 opacity-[0.03] group-hover:scale-110 transition-transform duration-500 pointer-events-none"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rocket w-48 h-48" aria-hidden="true"><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"></path><path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"></path><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"></path><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"></path></svg></div><div class="relative z-10"><div class="flex items-center gap-3 mb-4"><div class="flex items-center justify-center w-10 h-10 rounded-full bg-secondary/10 text-secondary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rocket w-5 h-5" aria-hidden="true"><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"></path><path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"></path><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"></path><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"></path></svg></div><h2 class="text-xl font-heading font-extrabold text-gray-900 uppercase tracking-tight">Strukturierte Daten: Die Geheimsprache von Google</h2></div><div class="prose prose-sm md:prose-base max-w-none text-muted-foreground leading-relaxed"><p>Ihr wollt, dass Google nicht nur euren Text sieht, sondern ihn <em>versteht</em>? Dass Preise, Events und Bewertungen direkt im Suchergebnis auftauchen? Das Zauberwort heißt <a target="_blank" rel="noopener noreferrer nofollow" href="http://Schema.org">Schema.org</a>. Im nächsten Teil zeigen wir, wie man JSON-LD dynamisch generiert – ohne dabei wahnsinnig zu werden.</p><p><strong>Nächster Artikel: </strong><a href="/blog/strukturierte-daten-seo-schema-org-guide"><strong>Strukturierte Daten – Sinnvoller Code oder Overkill?</strong></a></p></div></div></div><div class="mt-16 p-8 rounded-2xl bg-gradient-to-br from-gray-50 to-white border border-gray-100 shadow-sm relative overflow-hidden group"><div class="absolute top-0 right-0 p-4 opacity-[0.03] group-hover:opacity-[0.05] transition-opacity"><svg xmlns="http://www.w3.org/2000/svg" width="120" height="120" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-user" aria-hidden="true"><path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg></div><div class="flex flex-col md:flex-row items-center md:items-start gap-8 relative z-10"><div class="flex-shrink-0"><div class="relative w-32 h-32 rounded-2xl overflow-hidden border-4 border-white shadow-lg rotate-3 group-hover:rotate-0 transition-transform duration-500"><img alt="Dietrich Bojko" loading="lazy" decoding="async" data-nimg="fill" class="object-cover" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcSet="/_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2FXc78aJmV7kj3TyWqFhQJ9OX5APEyNjSsaAcfbJEa.jpg&w=640&q=75 640w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2FXc78aJmV7kj3TyWqFhQJ9OX5APEyNjSsaAcfbJEa.jpg&w=768&q=75 768w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2FXc78aJmV7kj3TyWqFhQJ9OX5APEyNjSsaAcfbJEa.jpg&w=1024&q=75 1024w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2FXc78aJmV7kj3TyWqFhQJ9OX5APEyNjSsaAcfbJEa.jpg&w=1280&q=75 1280w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2FXc78aJmV7kj3TyWqFhQJ9OX5APEyNjSsaAcfbJEa.jpg&w=1536&q=75 1536w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2FXc78aJmV7kj3TyWqFhQJ9OX5APEyNjSsaAcfbJEa.jpg&w=1920&q=75 1920w" src="/_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2FXc78aJmV7kj3TyWqFhQJ9OX5APEyNjSsaAcfbJEa.jpg&w=1920&q=75"/></div></div><div class="flex-1 text-center md:text-left"><div class="mb-2"><span class="text-xs font-black uppercase tracking-widest text-primary/60">Über den Autor</span><h3 class="text-2xl font-heading font-black text-gray-900 group-hover:text-primary transition-colors">Dietrich Bojko</h3><p class="text-sm font-bold text-gray-500 uppercase tracking-wide mt-1">Senior Webentwickler</p></div><div class="text-gray-600 text-base leading-relaxed mb-6 max-w-2xl"><p><strong>Webinteger</strong> arbeitet seit vielen Jahren produktiv mit Linux-basierten Entwicklungsumgebungen unter Windows.<br>Der Fokus liegt auf performanten Setups mit <strong>WSL 2, Docker, PHP, Node.js und modernen Build-Tools</strong> in <a target="_blank" rel="noopener noreferrer nofollow" href="/portfolio">realen Projekten</a> – nicht auf theoretischen Beispielkonfigurationen.</p><p>Die Artikel dieser Serie entstehen direkt aus dem täglichen Einsatz in Kunden- und Eigenprojekten und dokumentieren bewusst auch typische Fehler, Engpässe und bewährte Workarounds.</p></div><a target="_blank" class="inline-flex items-center gap-2 text-sm font-black text-primary hover:text-primary/80 transition-colors group/link" href="https://webinteger.dev/about"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-globe w-4 h-4" aria-hidden="true"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg>Webseite besuchen<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link w-3 h-3 group-hover/link:translate-x-0.5 group-hover/link:-translate-y-0.5 transition-transform" aria-hidden="true"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></div></div></div><div class="mt-16 pt-16 border-t border-gray-100"><div class="flex items-center justify-between mb-8"><h3 class="text-xl sm:text-2xl font-heading font-bold text-gray-900 flex items-center gap-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-grid w-6 h-6 text-primary" aria-hidden="true"><rect width="7" height="7" x="3" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="3" rx="1"></rect><rect width="7" height="7" x="14" y="14" rx="1"></rect><rect width="7" height="7" x="3" y="14" rx="1"></rect></svg>Das könnte Sie auch interessieren</h3><div class="hidden sm:flex items-center gap-2"><button class="w-10 h-10 rounded-full border border-gray-200 flex items-center justify-center text-gray-500 hover:border-primary hover:text-primary hover:bg-primary/5 transition-all" aria-label="Previous"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left w-5 h-5" aria-hidden="true"><path d="m12 19-7-7 7-7"></path><path d="M19 12H5"></path></svg></button><button class="w-10 h-10 rounded-full border border-gray-200 flex items-center justify-center text-gray-500 hover:border-primary hover:text-primary hover:bg-primary/5 transition-all" aria-label="Next"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right w-5 h-5" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></button></div></div><div class="flex gap-6 overflow-x-auto pb-8 scrollbar-hide cursor-grab select-none" style="scrollbar-width:none;-ms-overflow-style:none;scroll-snap-type:x mandatory"><div class="flex-shrink-0 w-full sm:w-[calc(50%-12px)] snap-start group"><div class="relative h-full group"><div class="absolute inset-0 bg-gradient-to-br from-primary/5 to-primary/10 rounded-lg"></div><article class="relative bg-white/90 backdrop-blur-sm rounded-lg overflow-hidden rainbow-border h-full flex flex-col hover:shadow-md transition-all duration-300 pointer-events-none group-hover:pointer-events-auto"><div class="relative h-48 w-full overflow-hidden border-b border-gray-100"><img alt="SEO für Entwickler: Warum Code das neue Marketing ist (Der Guide)" loading="lazy" decoding="async" data-nimg="fill" class="object-cover group-hover:scale-105 transition-transform duration-700 pointer-events-none" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcSet="/_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fseo-fuer-entwickler-hub-code-suchmaschine-verbindung.png&w=640&q=75 640w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fseo-fuer-entwickler-hub-code-suchmaschine-verbindung.png&w=768&q=75 768w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fseo-fuer-entwickler-hub-code-suchmaschine-verbindung.png&w=1024&q=75 1024w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fseo-fuer-entwickler-hub-code-suchmaschine-verbindung.png&w=1280&q=75 1280w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fseo-fuer-entwickler-hub-code-suchmaschine-verbindung.png&w=1536&q=75 1536w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fseo-fuer-entwickler-hub-code-suchmaschine-verbindung.png&w=1920&q=75 1920w" src="/_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fseo-fuer-entwickler-hub-code-suchmaschine-verbindung.png&w=1920&q=75"/><div class="absolute inset-0 bg-gradient-to-t from-black/50 to-transparent opacity-60"></div><div class="absolute top-4 right-4"><span class="bg-white/90 backdrop-blur text-highlight text-xs font-bold px-3 py-1 rounded-full shadow-sm uppercase tracking-wide">SEO für Entwickler</span></div></div><div class="p-6 flex-1 flex flex-col"><div class="flex flex-wrap items-center gap-3 text-xs font-bold uppercase tracking-wider text-gray-400 mb-4"><span class="flex items-center text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar w-3 h-3 mr-1" aria-hidden="true"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path></svg>25.01.2026</span></div><h4 class="text-lg font-heading font-medium text-gray-900 mb-2 leading-tight uppercase tracking-wide group-hover:text-highlight transition-colors line-clamp-2"><a class="before:absolute before:inset-0 focus:outline-none" draggable="false" href="/blog/seo-fuer-entwickler-ultimativer-guide">SEO für Entwickler: Warum Code das neue Marketing ist (Der Guide)</a></h4><a class="mt-auto flex items-center text-highlight font-bold text-sm uppercase tracking-wide hover:text-highlight-dark transition-all hover:translate-x-1 cursor-pointer relative z-20 py-2" href="/blog/seo-fuer-entwickler-ultimativer-guide">Lesen <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right w-3 h-3 ml-1" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></article></div></div><div class="flex-shrink-0 w-full sm:w-[calc(50%-12px)] snap-start group"><div class="relative h-full group"><div class="absolute inset-0 bg-gradient-to-br from-primary/5 to-primary/10 rounded-lg"></div><article class="relative bg-white/90 backdrop-blur-sm rounded-lg overflow-hidden rainbow-border h-full flex flex-col hover:shadow-md transition-all duration-300 pointer-events-none group-hover:pointer-events-auto"><div class="relative h-48 w-full overflow-hidden border-b border-gray-100"><img alt="Core Web Vitals einfach erklärt: Was Entwickler und Kunden wissen müssen" loading="lazy" decoding="async" data-nimg="fill" class="object-cover group-hover:scale-105 transition-transform duration-700 pointer-events-none" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcSet="/_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fcore-web-vitals-erklaert-monitor.png&w=640&q=75 640w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fcore-web-vitals-erklaert-monitor.png&w=768&q=75 768w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fcore-web-vitals-erklaert-monitor.png&w=1024&q=75 1024w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fcore-web-vitals-erklaert-monitor.png&w=1280&q=75 1280w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fcore-web-vitals-erklaert-monitor.png&w=1536&q=75 1536w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fcore-web-vitals-erklaert-monitor.png&w=1920&q=75 1920w" src="/_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fcore-web-vitals-erklaert-monitor.png&w=1920&q=75"/><div class="absolute inset-0 bg-gradient-to-t from-black/50 to-transparent opacity-60"></div><div class="absolute top-4 right-4"><span class="bg-white/90 backdrop-blur text-highlight text-xs font-bold px-3 py-1 rounded-full shadow-sm uppercase tracking-wide">Web Performance & Optimierung</span></div></div><div class="p-6 flex-1 flex flex-col"><div class="flex flex-wrap items-center gap-3 text-xs font-bold uppercase tracking-wider text-gray-400 mb-4"><span class="flex items-center text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar w-3 h-3 mr-1" aria-hidden="true"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path></svg>17.01.2026</span></div><h4 class="text-lg font-heading font-medium text-gray-900 mb-2 leading-tight uppercase tracking-wide group-hover:text-highlight transition-colors line-clamp-2"><a class="before:absolute before:inset-0 focus:outline-none" draggable="false" href="/blog/core-web-vitals-einfach-erklaert">Core Web Vitals einfach erklärt: Was Entwickler und Kunden wissen müssen</a></h4><a class="mt-auto flex items-center text-highlight font-bold text-sm uppercase tracking-wide hover:text-highlight-dark transition-all hover:translate-x-1 cursor-pointer relative z-20 py-2" href="/blog/core-web-vitals-einfach-erklaert">Lesen <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right w-3 h-3 ml-1" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></article></div></div><div class="flex-shrink-0 w-full sm:w-[calc(50%-12px)] snap-start group"><div class="relative h-full group"><div class="absolute inset-0 bg-gradient-to-br from-primary/5 to-primary/10 rounded-lg"></div><article class="relative bg-white/90 backdrop-blur-sm rounded-lg overflow-hidden rainbow-border h-full flex flex-col hover:shadow-md transition-all duration-300 pointer-events-none group-hover:pointer-events-auto"><div class="relative h-48 w-full overflow-hidden border-b border-gray-100"><img alt="Website Performance Masterclass: Der ultimative Guide zur blitzschnellen Seite" loading="lazy" decoding="async" data-nimg="fill" class="object-cover group-hover:scale-105 transition-transform duration-700 pointer-events-none" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcSet="/_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fwebsite-performance-optimieren-masterclass-engine.png&w=640&q=75 640w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fwebsite-performance-optimieren-masterclass-engine.png&w=768&q=75 768w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fwebsite-performance-optimieren-masterclass-engine.png&w=1024&q=75 1024w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fwebsite-performance-optimieren-masterclass-engine.png&w=1280&q=75 1280w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fwebsite-performance-optimieren-masterclass-engine.png&w=1536&q=75 1536w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fwebsite-performance-optimieren-masterclass-engine.png&w=1920&q=75 1920w" src="/_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fwebsite-performance-optimieren-masterclass-engine.png&w=1920&q=75"/><div class="absolute inset-0 bg-gradient-to-t from-black/50 to-transparent opacity-60"></div><div class="absolute top-4 right-4"><span class="bg-white/90 backdrop-blur text-highlight text-xs font-bold px-3 py-1 rounded-full shadow-sm uppercase tracking-wide">Web Performance & Optimierung</span></div></div><div class="p-6 flex-1 flex flex-col"><div class="flex flex-wrap items-center gap-3 text-xs font-bold uppercase tracking-wider text-gray-400 mb-4"><span class="flex items-center text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar w-3 h-3 mr-1" aria-hidden="true"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path></svg>17.01.2026</span></div><h4 class="text-lg font-heading font-medium text-gray-900 mb-2 leading-tight uppercase tracking-wide group-hover:text-highlight transition-colors line-clamp-2"><a class="before:absolute before:inset-0 focus:outline-none" draggable="false" href="/blog/website-performance-optimieren-masterclass">Website Performance Masterclass: Der ultimative Guide zur blitzschnellen Seite</a></h4><a class="mt-auto flex items-center text-highlight font-bold text-sm uppercase tracking-wide hover:text-highlight-dark transition-all hover:translate-x-1 cursor-pointer relative z-20 py-2" href="/blog/website-performance-optimieren-masterclass">Lesen <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right w-3 h-3 ml-1" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></article></div></div><div class="flex-shrink-0 w-full sm:w-[calc(50%-12px)] snap-start group"><div class="relative h-full group"><div class="absolute inset-0 bg-gradient-to-br from-primary/5 to-primary/10 rounded-lg"></div><article class="relative bg-white/90 backdrop-blur-sm rounded-lg overflow-hidden rainbow-border h-full flex flex-col hover:shadow-md transition-all duration-300 pointer-events-none group-hover:pointer-events-auto"><div class="relative h-48 w-full overflow-hidden border-b border-gray-100"><img alt="SEO für Entwickler: Was im Code wirklich wichtig ist" loading="lazy" decoding="async" data-nimg="fill" class="object-cover group-hover:scale-105 transition-transform duration-700 pointer-events-none" style="position:absolute;height:100%;width:100%;left:0;top:0;right:0;bottom:0;color:transparent" sizes="100vw" srcSet="/_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Ftechnische-seo-basics-html-struktur-statuscodes.png&w=640&q=75 640w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Ftechnische-seo-basics-html-struktur-statuscodes.png&w=768&q=75 768w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Ftechnische-seo-basics-html-struktur-statuscodes.png&w=1024&q=75 1024w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Ftechnische-seo-basics-html-struktur-statuscodes.png&w=1280&q=75 1280w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Ftechnische-seo-basics-html-struktur-statuscodes.png&w=1536&q=75 1536w, /_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Ftechnische-seo-basics-html-struktur-statuscodes.png&w=1920&q=75 1920w" src="/_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Ftechnische-seo-basics-html-struktur-statuscodes.png&w=1920&q=75"/><div class="absolute inset-0 bg-gradient-to-t from-black/50 to-transparent opacity-60"></div><div class="absolute top-4 right-4"><span class="bg-white/90 backdrop-blur text-highlight text-xs font-bold px-3 py-1 rounded-full shadow-sm uppercase tracking-wide">SEO für Entwickler</span></div></div><div class="p-6 flex-1 flex flex-col"><div class="flex flex-wrap items-center gap-3 text-xs font-bold uppercase tracking-wider text-gray-400 mb-4"><span class="flex items-center text-primary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-calendar w-3 h-3 mr-1" aria-hidden="true"><path d="M8 2v4"></path><path d="M16 2v4"></path><rect width="18" height="18" x="3" y="4" rx="2"></rect><path d="M3 10h18"></path></svg>25.01.2026</span></div><h4 class="text-lg font-heading font-medium text-gray-900 mb-2 leading-tight uppercase tracking-wide group-hover:text-highlight transition-colors line-clamp-2"><a class="before:absolute before:inset-0 focus:outline-none" draggable="false" href="/blog/seo-fuer-entwickler-basics-code-struktur">SEO für Entwickler: Was im Code wirklich wichtig ist</a></h4><a class="mt-auto flex items-center text-highlight font-bold text-sm uppercase tracking-wide hover:text-highlight-dark transition-all hover:translate-x-1 cursor-pointer relative z-20 py-2" href="/blog/seo-fuer-entwickler-basics-code-struktur">Lesen <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right w-3 h-3 ml-1" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></article></div></div></div><div class="flex justify-center items-center gap-2 mt-6"><button class="transition-all duration-300 rounded-full w-8 h-2 bg-primary" aria-label="Gehe zu Slide 1"></button><button class="transition-all duration-300 rounded-full w-2 h-2 bg-gray-300 hover:bg-gray-400" aria-label="Gehe zu Slide 2"></button><button class="transition-all duration-300 rounded-full w-2 h-2 bg-gray-300 hover:bg-gray-400" aria-label="Gehe zu Slide 3"></button><button class="transition-all duration-300 rounded-full w-2 h-2 bg-gray-300 hover:bg-gray-400" aria-label="Gehe zu Slide 4"></button></div></div><div class="grid grid-cols-1 md:grid-cols-2 gap-6 mt-12 pt-8 border-t border-gray-100"><div class="flex flex-col items-start"><a class="group w-full bg-gray-50 hover:bg-white border border-transparent hover:border-gray-100 p-6 rounded-xl transition-all hover:shadow-lg" href="/blog/seo-fuer-entwickler-duplicate-content-pagination-filter"><span class="flex items-center text-xs font-bold uppercase text-gray-400 mb-2 group-hover:text-primary transition-colors"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-left w-3 h-3 mr-2" aria-hidden="true"><path d="m12 19-7-7 7-7"></path><path d="M19 12H5"></path></svg> <!-- -->Vorheriges Kapitel</span><h4 class="font-heading font-bold text-gray-900 text-lg line-clamp-2">Duplicate Content vermeiden: Pagination, Filter & URL-Parameter</h4></a></div><div class="flex flex-col items-end"><a class="group w-full bg-gray-50 hover:bg-white border border-transparent hover:border-gray-100 p-6 rounded-xl transition-all hover:shadow-lg text-right" href="/blog/strukturierte-daten-seo-schema-org-guide"><span class="flex items-center justify-end text-xs font-bold uppercase text-gray-400 mb-2 group-hover:text-primary transition-colors">Nächstes Kapitel<!-- --> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right w-3 h-3 ml-2" aria-hidden="true"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span><h4 class="font-heading font-bold text-gray-900 text-lg line-clamp-2">Strukturierte Daten SEO: Sinnvoller Code oder Overkill?</h4></a></div></div></div><div class="mt-12 bg-white px-4 py-8 sm:p-12 rounded-lg shadow-lg border border-gray-100/50"><div class="mt-8"><form class="mb-16 bg-gray-50 p-8 rounded-lg border border-gray-100 shadow-sm"><h4 class="text-xl font-heading font-bold text-gray-900 mb-8 uppercase tracking-wide">Schreiben Sie einen Kommentar</h4><div class="grid grid-cols-1 md:grid-cols-2 gap-8 mb-8"><div class="relative"><input type="text" id="authorName" required="" class="block px-5 pb-3 pt-6 w-full text-base text-gray-900 bg-white rounded-md border-0 border-b-2 border-gray-200 appearance-none focus:outline-none focus:ring-0 peer transition-all focus:border-primary" placeholder=" " value=""/><label for="authorName" class="absolute text-base text-gray-500 duration-300 transform -translate-y-4 scale-75 top-4 z-10 origin-[0] left-5 peer-focus:text-primary peer-placeholder-shown:scale-100 peer-placeholder-shown:translate-y-0 peer-focus:scale-75 peer-focus:-translate-y-4">Name<!-- --> <span class="text-highlight">*</span></label></div><div class="relative"><input type="email" id="authorEmail" required="" class="block px-5 pb-3 pt-6 w-full text-base text-gray-900 bg-white rounded-md border-0 border-b-2 border-gray-200 appearance-none focus:outline-none focus:ring-0 peer transition-all focus:border-primary" placeholder=" " value=""/><label for="authorEmail" class="absolute text-base text-gray-500 duration-300 transform -translate-y-4 scale-75 top-4 z-10 origin-[0] left-5 peer-focus:text-primary peer-placeholder-shown:scale-100 peer-placeholder-shown:translate-y-0 peer-focus:scale-75 peer-focus:-translate-y-4">E-Mail<!-- --> <span class="text-highlight">*</span></label></div></div><div class="mb-8"><div class="relative"><textarea id="content" required="" rows="4" class="block px-5 pb-3 pt-6 w-full text-base text-gray-900 bg-white rounded-md border-0 border-b-2 border-gray-200 appearance-none focus:outline-none focus:ring-0 peer transition-all focus:border-primary resize-y" placeholder=" "></textarea><label for="content" class="absolute text-base text-gray-500 duration-300 transform -translate-y-4 scale-75 top-4 z-10 origin-[0] left-5 peer-focus:text-primary peer-placeholder-shown:scale-100 peer-placeholder-shown:translate-y-0 peer-focus:scale-75 peer-focus:-translate-y-4">Kommentar<!-- --> <span class="text-highlight">*</span></label></div></div><button type="submit" class="inline-flex items-center px-8 py-4 bg-primary text-white font-bold rounded-lg hover:bg-primary/90 transition-all shadow-lg shadow-primary/20 hover:-translate-y-1 disabled:opacity-50 disabled:cursor-not-allowed uppercase tracking-wide text-sm">Kommentar senden<!-- --> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-send w-4 h-4 ml-2" aria-hidden="true"><path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"></path><path d="m21.854 2.147-10.94 10.939"></path></svg></button></form></div></div></div><aside class="hidden lg:block lg:col-span-4 relative h-full"><div class="sticky top-24 space-y-8"><div class="bg-white p-6 rounded-lg shadow-sm border border-gray-100"><nav class="hidden md:block pl-4"><h3 class="text-sm font-bold text-gray-400 uppercase tracking-widest mb-4">Inhalt</h3><ul class="space-y-2 text-sm border-l-2 border-gray-100"><li><a href="#1-der-soft-404-wenn-euer-server-lgt" class="block py-1 pl-4 -ml-[2px] border-l-2 transition-all duration-200 hover:text-primary border-transparent text-gray-500 hover:border-gray-300" style="margin-left:0">1. Der "Soft 404": Wenn euer Server lügt</a></li><li><a href="#2-hash-urls-bitte-nicht" class="block py-1 pl-4 -ml-[2px] border-l-2 transition-all duration-200 hover:text-primary border-transparent text-gray-500 hover:border-gray-300" style="margin-left:0">2. Hash-URLs? Bitte nicht.</a></li><li><a href="#3-der-onclick-tod-buttons-sind-keine-links" class="block py-1 pl-4 -ml-[2px] border-l-2 transition-all duration-200 hover:text-primary border-transparent text-gray-500 hover:border-gray-300" style="margin-left:0">3. Der onClick-Tod: Buttons sind keine Links</a></li><li><a href="#fazit-verlasst-euch-nicht-auf-magie" class="block py-1 pl-4 -ml-[2px] border-l-2 transition-all duration-200 hover:text-primary border-transparent text-gray-500 hover:border-gray-300" style="margin-left:0">Fazit: Verlasst euch nicht auf "Magie"</a></li></ul></nav></div></div></aside></div></div></section></div><!--$--><!--/$--></main><footer class="bg-[#0f172a] text-white pt-0 pb-12 overflow-hidden relative"><div class="h-px w-full bg-gradient-to-r from-transparent via-white/10 to-transparent"></div><div class="container mx-auto px-4 sm:px-6 lg:px-8 pt-16 relative z-10"><div class="flex flex-col items-center justify-center text-center"><a class="inline-block mb-8 group transition-transform duration-500 hover:scale-105" href="/"><div class="relative"><div class="absolute inset-0 bg-primary/20 blur-3xl opacity-0 group-hover:opacity-100 transition-opacity duration-700 rounded-full"></div><img alt="WebInteger" loading="lazy" width="240" height="60" decoding="async" data-nimg="1" class="h-auto w-auto max-w-[200px] sm:max-w-[260px] relative z-10 drop-shadow-2xl" style="color:transparent" src="/images/webinteger.svg"/></div></a><p class="max-w-md mx-auto text-lg text-gray-300 mb-10 font-light leading-relaxed">Digitale Exzellenz, handgefertigt auf Rügen.<br/>Wir entwickeln nicht nur Code, sondern <span class="text-white font-medium">Lösungen</span>.</p><div class="flex items-center gap-6 mb-12"><a href="https://github.com/webinteger-webdev" target="_blank" rel="noopener noreferrer nofollow" class="p-3 bg-white/5 rounded-full text-gray-400 hover:text-white hover:bg-white/10 hover:shadow-[0_0_15px_rgba(255,255,255,0.2)] transition-all duration-300"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-github" aria-hidden="true"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"></path><path d="M9 18c-4.51 2-5-2-7-2"></path></svg><span class="sr-only">GitHub</span></a><a href="https://www.linkedin.com/in/dietrich-bojko/" target="_blank" rel="noopener noreferrer nofollow" class="p-3 bg-white/5 rounded-full text-gray-400 hover:text-white hover:bg-white/10 hover:shadow-[0_0_15px_rgba(255,255,255,0.2)] transition-all duration-300"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-linkedin" aria-hidden="true"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect width="4" height="12" x="2" y="9"></rect><circle cx="4" cy="4" r="2"></circle></svg><span class="sr-only">LinkedIn</span></a><a href="/rss.xml" target="_blank" class="p-3 bg-white/5 rounded-full text-gray-400 hover:text-white hover:bg-white/10 hover:shadow-[0_0_15px_rgba(255,255,255,0.2)] transition-all duration-300"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-rss" aria-hidden="true"><path d="M4 11a9 9 0 0 1 9 9"></path><path d="M4 4a16 16 0 0 1 16 16"></path><circle cx="5" cy="19" r="1"></circle></svg><span class="sr-only">RSS Feed</span></a></div><div class="w-24 h-1 bg-gradient-to-r from-transparent via-primary/30 to-transparent mb-12 rounded-full"></div><div class="flex flex-col sm:flex-row items-center justify-center gap-6 sm:gap-12 text-sm text-gray-500 font-medium tracking-wide"><a class="hover:text-primary transition-colors hover:underline underline-offset-4 decoration-primary/30" href="/impressum">Impressum</a><a class="hover:text-primary transition-colors hover:underline underline-offset-4 decoration-primary/30" href="/privacy">Datenschutz</a><button class="hover:text-primary transition-colors hover:underline underline-offset-4 decoration-primary/30 flex items-center gap-2 cursor-pointer">Privatsphäre-Einstellungen</button><span>© <!-- -->2026<!-- --> WebInteger.</span></div></div></div></footer><script src="/_next/static/chunks/d4032aae1e278998.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[79520,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\"],\"\"]\n4:I[19562,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\"],\"default\"]\n5:I[2971,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\"],\"default\"]\n6:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"default\"]\n7:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"default\"]\n8:I[29306,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/58e525ddcfb055c9.js\"],\"default\"]\n9:I[13642,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\"],\"default\"]\na:I[60034,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\"],\"default\"]\nc:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"OutletBoundary\"]\nd:\"$Sreact.suspense\"\nf:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"ViewportBoundary\"]\n11:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"MetadataBoundary\"]\n13:I[68027,[],\"default\"]\n:HL[\"/_next/static/chunks/5722141eea7341fc.css\",\"style\"]\n:HL[\"/_next/static/chunks/d545f27c733948ac.css\",\"style\"]\n:HL[\"/_next/static/media/1b99372b3eaef0c8-s.p.758e15a8.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/83afe278b6a6bb3c-s.p.3a6ba036.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n2:[\"$\",\"iframe\",null,{\"src\":\"https://www.googletagmanager.com/ns.html?id=GTM-KLPKWNLZ\",\"height\":\"0\",\"width\":\"0\",\"style\":{\"display\":\"none\",\"visibility\":\"hidden\"}}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"4qp18ng3HCLj-OGDsRyJB\",\"c\":[\"\",\"blog\",\"technische-seo-fehler-spa-web-apps\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"blog\",{\"children\":[[\"slug\",\"technische-seo-fehler-spa-web-apps\",\"d\"],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/5722141eea7341fc.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/d545f27c733948ac.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/4cef3d42f171a101.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/625681995a16048f.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"de\",\"className\":\"inter_607401f4-module__qQMB9q__variable outfit_f0040406-module__oy7Y7a__variable\",\"children\":[\"$\",\"body\",null,{\"className\":\"antialiased bg-background text-foreground flex flex-col min-h-screen font-body\",\"children\":[[\"$\",\"noscript\",null,{\"children\":\"$2\"}],[\"$\",\"$L3\",null,{\"id\":\"consent-mode-init\",\"strategy\":\"beforeInteractive\",\"dangerouslySetInnerHTML\":{\"__html\":\"\\n console.log(\\\"WebInteger v2.0 - Performance Update Loaded (LCP+GTM Fixes)\\\");\\n window.dataLayer = window.dataLayer || [];\\n window.gtag = function(){window.dataLayer.push(arguments);}\\n \\n // 1. Set default consent to 'denied'\\n window.gtag('consent', 'default', {\\n 'ad_storage': 'denied',\\n 'ad_user_data': 'denied',\\n 'ad_personalization': 'denied',\\n 'analytics_storage': 'denied',\\n 'wait_for_update': 500\\n });\\n \"}}],[\"$\",\"$L3\",null,{\"id\":\"gtm-script\",\"strategy\":\"lazyOnload\",\"dangerouslySetInnerHTML\":{\"__html\":\"(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\nnew Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\nj=d.createElement(s),dl=l!='dataLayer'?'\u0026l='+l:'';j.async=true;j.src=\\n'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n})(window,document,'script','dataLayer','GTM-KLPKWNLZ');\"}}],[\"$\",\"$L4\",null,{\"children\":[[\"$\",\"$L5\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-grow\",\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"$L8\",null,{}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"$L9\",null,{}],[\"$\",\"$La\",null,{}]]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$Lb\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/3c28e38fc9a3acbb.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$d\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@e\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lf\",null,{\"children\":\"$@10\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L11\",null,{\"children\":[\"$\",\"$d\",null,{\"name\":\"Next.Metadata\",\"children\":\"$@12\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$13\",[]],\"S\":false}\n"])</script><script>self.__next_f.push([1,"10:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"19:I[27201,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/247eb132b7f7b574.js\"],\"IconMark\"]\n14:T65c,"])</script><script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@type\":\"BlogPosting\",\"@id\":\"https://webinteger.dev/blog/technische-seo-fehler-spa-web-apps\",\"headline\":\"Technische SEO Fehler bei modernen Web-Apps (SPAs)\",\"description\":\"Technische SEO Fehler ruinieren Rankings. Erfahren Sie, wie Sie Soft 404s, Hash-URLs und Routing-Probleme in SPAs (React/Vue) vermeiden.\",\"image\":[\"https://webinteger.dev/_next/image?url=https%3A%2F%2Fapi.webinteger.dev%2Fstorage%2Fmedia%2Fspa-seo-fehler-soft-404-glitch.png\u0026w=1200\u0026q=75\"],\"inLanguage\":\"de-DE\",\"author\":{\"@type\":\"Person\",\"name\":\"Dietrich Bojko\",\"url\":\"https://webinteger.dev/about\",\"jobTitle\":\"Full-Stack Entwickler\",\"description\":\"Webentwickler spezialisiert auf Contao CMS und Laravel\"},\"publisher\":{\"@type\":\"Organization\",\"name\":\"Webinteger\",\"url\":\"https://webinteger.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://webinteger.dev/images/webinteger.svg\",\"width\":600,\"height\":60}},\"datePublished\":\"2026-01-27T21:22:00.000000Z\",\"dateModified\":\"2026-01-30T13:30:19.000000Z\",\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https://webinteger.dev/blog/technische-seo-fehler-spa-web-apps\"},\"position\":4,\"about\":[\"SEO\",\"JavaScript\",\"webentwicklung\"],\"isPartOf\":{\"@type\":\"BlogPosting\",\"@id\":\"https://webinteger.dev/blog/seo-fuer-entwickler-ultimativer-guide\",\"url\":\"https://webinteger.dev/blog/seo-fuer-entwickler-ultimativer-guide\",\"headline\":\"SEO für Entwickler: Warum Code das neue Marketing ist (Der Guide)\",\"image\":[\"https://api.webinteger.dev/storage/media/seo-fuer-entwickler-hub-code-suchmaschine-verbindung.png\"],\"author\":{\"@type\":\"Person\",\"name\":\"Dietrich Bojko\",\"url\":\"https://webinteger.dev/about\"}}}"])</script><script>self.__next_f.push([1,"15:T64b,"])</script><script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"Kann ich Soft 404s in der Search Console sehen?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Ja, Google ist da ziemlich direkt. Wenn unter \\\"Seitenindexierung\\\" die Meldung \\\"Gesendet URL scheint ein Soft 404 zu sein\\\" auftaucht, brennt die Hütte. Das heißt, Google hat gemerkt, dass ihr ihm leere Seiten als \\\"Inhalt\\\" verkaufen wolltet.\"}},{\"@type\":\"Question\",\"name\":\"Ist Pre-Rendering (Prerender.io) eine Lösung?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Es ist ein Pflaster. Tools wie Prerender.io führen eure JS-App in einem Headless-Browser aus und speichern das HTML als Snapshot. Das löst das Problem, dass der Bot nichts sieht. Aber es ist eine weitere Schicht Komplexität, die kaputtgehen kann. Echtes SSR (Server Side Rendering) ist sauberer.\"}},{\"@type\":\"Question\",\"name\":\"Warum rankt meine React-App nicht, trotz React Helmet?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"React Helmet setzt brav den \u003ctitle\u003e und die Meta-Description. Super. Aber wenn der Content erst nach 3 Sekunden Spinner-Animation lädt oder interne Links fehlen, rettet euch der Titel auch nicht mehr. SEO ist das Gesamtpaket.\"}},{\"@type\":\"Question\",\"name\":\"Was ist mit \\\"Lazy Loading\\\" von Modulen?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Code-Splitting ist super für die Performance (Core Web Vitals). Aber achten Sie darauf, dass Text-Inhalte nicht erst nach einer User-Interaktion (z.B. Scrollen) nachgeladen werden. Googlebot scrollt nicht! Alles Wichtige muss beim initialen Load (oder kurz danach) im DOM sein.\"}}]}"])</script><script>self.__next_f.push([1,"b:[\"$\",\"div\",null,{\"className\":\"bg-white\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$14\"}}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"BreadcrumbList\\\",\\\"itemListElement\\\":[{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":1,\\\"name\\\":\\\"Home\\\",\\\"item\\\":\\\"https://webinteger.dev/\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":2,\\\"name\\\":\\\"Blog\\\",\\\"item\\\":\\\"https://webinteger.dev/blog/\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":3,\\\"name\\\":\\\"SEO für Entwickler: Warum Code das neue Marketing ist (Der Guide)\\\",\\\"item\\\":\\\"https://webinteger.dev/blog/seo-fuer-entwickler-ultimativer-guide\\\"},{\\\"@type\\\":\\\"ListItem\\\",\\\"position\\\":4,\\\"name\\\":\\\"Technische SEO Fehler bei modernen Web-Apps (SPAs)\\\",\\\"item\\\":\\\"https://webinteger.dev/blog/technische-seo-fehler-spa-web-apps\\\"}]}\"}}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$15\"}}],\"$L16\",\"$L17\",\"$L18\"]}]\n"])</script><script>self.__next_f.push([1,"12:[[\"$\",\"title\",\"0\",{\"children\":\"Technische SEO Fehler in SPAs: Soft 404 \u0026 Routing Guide\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Technische SEO Fehler ruinieren Rankings. Erfahren Sie, wie Sie Soft 404s, Hash-URLs und Routing-Probleme in SPAs (React/Vue) vermeiden.\"}],[\"$\",\"meta\",\"2\",{\"name\":\"author\",\"content\":\"Dietrich Bojko\"}],[\"$\",\"link\",\"3\",{\"rel\":\"manifest\",\"href\":\"/site.webmanifest\",\"crossOrigin\":\"$undefined\"}],[\"$\",\"meta\",\"4\",{\"name\":\"keywords\",\"content\":\"Technische SEO Fehler,SEO,JavaScript,webentwicklung\"}],[\"$\",\"meta\",\"5\",{\"name\":\"creator\",\"content\":\"Webinteger\"}],[\"$\",\"meta\",\"6\",{\"name\":\"publisher\",\"content\":\"Webinteger\"}],[\"$\",\"meta\",\"7\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"8\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-video-preview:-1, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"link\",\"9\",{\"rel\":\"canonical\",\"href\":\"https://webinteger.dev/blog/technische-seo-fehler-spa-web-apps\"}],[\"$\",\"meta\",\"10\",{\"name\":\"format-detection\",\"content\":\"telephone=no, address=no, email=no\"}],[\"$\",\"meta\",\"11\",{\"name\":\"mobile-web-app-capable\",\"content\":\"yes\"}],[\"$\",\"meta\",\"12\",{\"name\":\"apple-mobile-web-app-title\",\"content\":\"Webinteger\"}],[\"$\",\"meta\",\"13\",{\"name\":\"apple-mobile-web-app-status-bar-style\",\"content\":\"default\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:title\",\"content\":\"Technische SEO Fehler in SPAs: Soft 404 \u0026 Routing Guide\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:description\",\"content\":\"Technische SEO Fehler ruinieren Rankings. Erfahren Sie, wie Sie Soft 404s, Hash-URLs und Routing-Probleme in SPAs (React/Vue) vermeiden.\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:url\",\"content\":\"https://webinteger.dev/blog/technische-seo-fehler-spa-web-apps\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:site_name\",\"content\":\"Webinteger\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:locale\",\"content\":\"de_DE\"}],[\"$\",\"meta\",\"19\",{\"property\":\"og:image\",\"content\":\"https://api.webinteger.dev/storage/media/hPuaBjUWTbCjSJgr7WR0peYpQFmQgdyQq7x75OmW.webp\"}],[\"$\",\"meta\",\"20\",{\"property\":\"og:type\",\"content\":\"article\"}],[\"$\",\"meta\",\"21\",{\"property\":\"article:published_time\",\"content\":\"2026-01-27T21:22:00.000000Z\"}],[\"$\",\"meta\",\"22\",{\"property\":\"article:author\",\"content\":\"Dietrich Bojko\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:title\",\"content\":\"Technische SEO Fehler in SPAs: Soft 404 \u0026 Routing Guide\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:description\",\"content\":\"Technische SEO Fehler ruinieren Rankings. Erfahren Sie, wie Sie Soft 404s, Hash-URLs und Routing-Probleme in SPAs (React/Vue) vermeiden.\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:image\",\"content\":\"https://api.webinteger.dev/storage/media/hPuaBjUWTbCjSJgr7WR0peYpQFmQgdyQq7x75OmW.webp\"}],[\"$\",\"link\",\"27\",{\"rel\":\"shortcut icon\",\"href\":\"/favicon.ico\"}],[\"$\",\"link\",\"28\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0b3bf435.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"link\",\"29\",{\"rel\":\"icon\",\"href\":\"/favicon-96x96.png\",\"sizes\":\"96x96\",\"type\":\"image/png\"}],[\"$\",\"link\",\"30\",{\"rel\":\"icon\",\"href\":\"/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"31\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\",\"sizes\":\"180x180\"}],[\"$\",\"$L19\",\"32\",{}]]\n"])</script><script>self.__next_f.push([1,"e:null\n"])</script><script>self.__next_f.push([1,"1a:I[78520,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"default\"]\n1b:I[5500,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"Image\"]\n1c:I[7335,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"default\"]\n1d:I[22016,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"\"]\n21:I[73392,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"default\"]\n16:[\"$\",\"$L1a\",null,{\"slug\":\"technische-seo-fehler-spa-web-apps\"}]\n"])</script><script>self.__next_f.push([1,"17:[\"$\",\"section\",null,{\"className\":\"relative min-h-[60vh] flex items-center overflow-hidden animate-mesh text-white pt-20\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute inset-0 bg-black/20 backdrop-blur-[2px] z-0\"}],[\"$\",\"div\",null,{\"className\":\"absolute -right-[10%] top-1/2 -translate-y-1/2 w-[50vh] h-[50vh] opacity-10 pointer-events-none select-none z-0\",\"children\":[\"$\",\"$L1b\",null,{\"src\":\"/images/bg-logo.svg\",\"alt\":\"Background Decoration\",\"fill\":true,\"className\":\"object-contain\"}]}],[\"$\",\"div\",null,{\"className\":\"container mx-auto px-4 sm:px-6 lg:px-8 relative z-10\",\"children\":[\"$\",\"div\",null,{\"className\":\"text-center max-w-5xl mx-auto\",\"children\":[[\"$\",\"div\",null,{\"className\":\"hidden md:flex justify-center mb-6\",\"children\":[\"$\",\"$L1c\",null,{\"customLastItem\":{\"label\":\"Technische SEO Fehler bei mode...\"},\"injectedItems\":[{\"label\":\"SEO für Entwickler: ...\",\"href\":\"/blog/seo-fuer-entwickler-ultimativer-guide\"}]}]}],[\"$\",\"div\",null,{\"className\":\"mb-6 animate-in fade-in slide-in-from-bottom-2 duration-700 delay-200\",\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog/seo-fuer-entwickler-ultimativer-guide\",\"className\":\"inline-flex items-center gap-2 px-4 py-1.5 rounded-full bg-secondary/20 border border-secondary/30 text-secondary-foreground text-sm font-bold uppercase tracking-wide hover:bg-secondary/30 transition-colors\",\"children\":[[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-book-open w-4 h-4\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"1akyts\",{\"d\":\"M12 7v14\"}],[\"$\",\"path\",\"ruj8y\",{\"d\":\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"}],\"$undefined\"]}],\"Teil der Serie: \",\"SEO für Webentwickler: Die Masterclass\"]}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center justify-center gap-4 text-sm font-bold uppercase tracking-wider text-gray-300 mb-6\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center bg-white/10 px-4 py-1.5 rounded-full backdrop-blur-sm\",\"children\":[[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-calendar w-4 h-4 mr-2 text-highlight\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"1cmpym\",{\"d\":\"M8 2v4\"}],[\"$\",\"path\",\"4m81vk\",{\"d\":\"M16 2v4\"}],[\"$\",\"rect\",\"1hopcy\",{\"width\":\"18\",\"height\":\"18\",\"x\":\"3\",\"y\":\"4\",\"rx\":\"2\"}],[\"$\",\"path\",\"8toen8\",{\"d\":\"M3 10h18\"}],\"$undefined\"]}],\"27.1.2026\"]}],[\"$\",\"span\",null,{\"className\":\"flex items-center bg-white/10 px-4 py-1.5 rounded-full backdrop-blur-sm\",\"children\":[[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-user w-4 h-4 mr-2 text-highlight\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"975kel\",{\"d\":\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"}],[\"$\",\"circle\",\"17ys0d\",{\"cx\":\"12\",\"cy\":\"7\",\"r\":\"4\"}],\"$undefined\"]}],\"Dietrich Bojko\"]}],[\"$\",\"span\",null,{\"className\":\"flex items-center bg-white/10 px-4 py-1.5 rounded-full backdrop-blur-sm\",\"title\":\"Lesezeit\",\"children\":[[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-clock w-4 h-4 mr-2 text-highlight\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"mmk7yg\",{\"d\":\"M12 6v6l4 2\"}],[\"$\",\"circle\",\"1mglay\",{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],\"$undefined\"]}],4,\" Min. Lesezeit\"]}]]}],[\"$\",\"h1\",null,{\"className\":\"font-heading font-black text-white text-2xl sm:text-3xl md:text-4xl leading-tight mb-8 drop-shadow-lg max-w-4xl mx-auto\",\"children\":\"Technische SEO Fehler bei modernen Web-Apps (SPAs)\"}],false,[\"$\",\"div\",null,{\"className\":\"flex items-center justify-center gap-4 animate-in fade-in zoom-in duration-700 delay-500\",\"children\":[\"$L1e\",\"$L1f\",\"$L20\"]}]]}]}]]}]\n"])</script><script>self.__next_f.push([1,"22:T18a4,"])</script><script>self.__next_f.push([1,"\u003cp\u003eGravierende \u003cstrong\u003etechnische SEO Fehler\u003c/strong\u003e sind der Hauptgrund, warum moderne Single Page Applications (React, Vue, Svelte) oft schlecht ranken, obwohl sie sich für den Nutzer fantastisch anfühlen. Endlich keine Page-Reloads mehr, alles ist \"snappy\". Aber sobald das Marketing-Team fragt: \"Warum findet man unsere App eigentlich nicht bei Google?\", beginnt das große Kopfkratzen.\u003c/p\u003e\u003cp\u003eDie Wahrheit ist: Was für den User geil aussieht, ist für den Googlebot oft kaputt. Wir Frontend-Entwickler bauen uns oft versehentlich massive \u003cstrong\u003etechnische SEO Fehler\u003c/strong\u003e in die Architektur, weil wir zu sehr auf den Browser und zu wenig auf den Crawler achten.\u003c/p\u003e\u003cp\u003eIn diesem Teil zerlegen wir die drei Klassiker, die fast jedem JS-Dev schon mal passiert sind.\u003c/p\u003e\u003cfigure\u003e\u003cpicture\u003e\u003csource srcset=\"https://api.webinteger.dev/curator/media/spa-seo-fehler-single-page-application.png?fm=webp\u0026amp;w=1200\u0026amp;q=85\u0026amp;s=29aff7c3ab264f7f31c2021b4bb4cd32\" type=\"image/webp\"\u003e\u003c/source\u003e\u003cimg src=\"https://api.webinteger.dev/storage/media/spa-seo-fehler-single-page-application.png\" alt=\"Eine futuristische Single-Page-Application auf einem Tablet, die offensichtliche technische Fehler und Glitches anzeigt.\" title=\"Typische SPA-Fehler: Wenn moderne Apps bei Google durchfallen.\" loading=\"lazy\" decoding=\"async\"\u003e\u003c/picture\u003e\u003c/figure\u003e\u003chr\u003e\u003ch2\u003e1. Der \"Soft 404\": Wenn euer Server lügt\u003c/h2\u003e\u003cp\u003eDas ist der Endgegner unter den \u003cstrong\u003etechnischen SEO Fehlern\u003c/strong\u003e. Stellt euch vor, ein User tippt eine URL ein, die es gar nicht gibt: \u003ccode\u003e/shop/produkt-xyz-gibts-nicht\u003c/code\u003e. In der alten Welt (PHP, Rails) hat der Server kurz in der Datenbank geschaut, nichts gefunden und sofort gesagt: \"Fehler 404! Weg hier!\".\u003c/p\u003e\u003cp\u003eIn eurer SPA läuft das anders. Der Nginx-Server sieht die Anfrage und denkt sich: \"Keine Ahnung, was das für eine Route ist, aber ich liefere mal die \u003ccode\u003eindex.html\u003c/code\u003e aus. Das JavaScript regelt das schon.\" Der Server sendet also ein \u003cstrong\u003eHTTP 200 OK\u003c/strong\u003e. Für Googlebot heißt das: \"Alles super, Seite gefunden, Inhalt ist da.\"\u003c/p\u003e\u003cp\u003eErst Sekunden später wacht euer React-Router im Browser auf, merkt, dass das Produkt fehlt, und zeigt eine Error-Komponente an. Zu spät. Google hat das \"200 OK\" schon registriert. Das Resultat? Ihr habt tausende \"Fehlerseiten\" im Google-Index. Das nennt sich \"Soft 404\" und flutet euren Index mit Müll.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eDer Fix:\u003c/strong\u003e Ihr müsst serverseitig checken, ob Daten da sind, \u003cem\u003ebevor\u003c/em\u003e ihr rendert. Wenn die API \u003ccode\u003enull\u003c/code\u003e zurückgibt, muss der Server hart 404 antworten. Wenn ihr reines CSR nutzt, ist dieser \u003cstrong\u003etechnische SEO Fehler\u003c/strong\u003e schwer zu beheben. Der einzige Hack: Ein Meta-Tag \u003ccode\u003e\u0026lt;meta name=\"robots\" content=\"noindex\"\u0026gt;\u003c/code\u003e per JS in den Head injizieren, sobald die 404-Komponente lädt.\u003c/p\u003e\u003cfigure\u003e\u003cpicture\u003e\u003csource srcset=\"https://api.webinteger.dev/curator/media/soft-404-fehler-technisches-seo.png?fm=webp\u0026amp;w=1200\u0026amp;q=85\u0026amp;s=b2ae6222fc7913e00b7321197d30b73f\" type=\"image/webp\"\u003e\u003c/source\u003e\u003cimg src=\"https://api.webinteger.dev/storage/media/soft-404-fehler-technisches-seo.png\" alt='Visualisierung eines Soft 404 Fehlers: Der Server sendet technisch ein \"OK\", aber die Seite zeigt dem Nutzer eine Fehlermeldung.' title=\"Soft 404 erklärt: Wenn der Server lügt.\" loading=\"lazy\" decoding=\"async\"\u003e\u003c/picture\u003e\u003c/figure\u003e\u003chr\u003e\u003ch2\u003e2. Hash-URLs? Bitte nicht.\u003c/h2\u003e\u003cp\u003eEin weiterer Klassiker im Bereich \u003cstrong\u003etechnische SEO Fehler\u003c/strong\u003e sind URLs wie \u003ccode\u003eexample.com/#/about\u003c/code\u003e. Das war 2015 mal cool, weil man so das Server-Routing umgehen konnte. Alles nach der Raute \u003ccode\u003e#\u003c/code\u003e (Hash) bleibt im Browser und geht nie an den Server.\u003c/p\u003e\u003cp\u003eFür SEO ist das der Tod. Google ignoriert oft alles, was nach dem Hash kommt. Für den Bot existiert nur die Startseite. Eure ganze schöne Unterseiten-Struktur? Unsichtbar.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eDie Lösung:\u003c/strong\u003e Nutzt die \u003cstrong\u003eHistory API (\u003c/strong\u003e\u003ccode\u003epushState\u003c/code\u003e\u003cstrong\u003e)\u003c/strong\u003e. Frameworks wie React Router oder Vue Router können das out-of-the-box (\"BrowserRouter\" Mode). Eure URLs sehen dann sauber aus: \u003ccode\u003eexample.com/about\u003c/code\u003e. Ja, ihr müsst dafür euren Webserver (Apache/Nginx) so konfigurieren, dass er alle Requests auf die \u003ccode\u003eindex.html\u003c/code\u003e umschreibt (Rewrite Rules). Aber das ist ein kleiner Preis für sichtbare Unterseiten.\u003c/p\u003e\u003chr\u003e\u003ch2\u003e3. Der \u003ccode\u003eonClick\u003c/code\u003e-Tod: Buttons sind keine Links\u003c/h2\u003e\u003cp\u003eDas hier sehe ich in fast jedem Code-Review:\u003c/p\u003e\u003cpre\u003e\u003ccode\u003e// Bitte tut das nicht:\n\u0026lt;div onClick={() =\u0026gt; router.push('/shop')}\u0026gt;\n Zum Shop\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWarum machen wir das? Weil es bequem ist. Ein \u003ccode\u003ediv\u003c/code\u003e stylen, Click-Handler drauf, fertig. Aber Googlebot ist kein User. Er klickt nicht auf bunte Boxen. Er scrollt nicht wild herum. Er parst den HTML-Code und sucht nach einem einzigen Tag: \u003ccode\u003e\u0026lt;a\u0026gt;\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eWenn ihr Navigationselemente baut, die nur per JavaScript-Event funktionieren, sind das für den Crawler Sackgassen. Solche \u003cstrong\u003etechnischen SEO Fehler\u003c/strong\u003e sorgen dafür, dass eure Unterseiten verhungern, weil keine Link-Power (Link Juice) fließt.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMacht es richtig:\u003c/strong\u003e Nutzt die Link-Komponenten eures Frameworks.\u003c/p\u003e\u003cpre\u003e\u003ccode\u003e// So muss das aussehen:\n\u0026lt;Link to=\"/shop\"\u0026gt;Zum Shop\u0026lt;/Link\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eDas rendert am Ende ein echtes \u003ccode\u003e\u0026lt;a href=\"/shop\"\u0026gt;\u003c/code\u003e in den DOM. Und genau das braucht Google, um eure Seite zu verstehen. Das Vermeiden solcher simplen \u003cstrong\u003etechnischen SEO Fehler\u003c/strong\u003e bringt oft mehr als jedes Keyword-Tuning.\u003c/p\u003e\u003chr\u003e\u003ch2\u003eFazit: Verlasst euch nicht auf \"Magie\"\u003c/h2\u003e\u003cp\u003eFrameworks nehmen uns viel Arbeit ab, aber sie entbinden uns nicht davon, zu verstehen, wie das Web funktioniert. Ein \u003ccode\u003ediv\u003c/code\u003e ist kein Link. Ein 200er Statuscode ist kein 404. Wer diese \u003cstrong\u003etechnischen SEO Fehler\u003c/strong\u003e ignoriert, baut ein Haus auf Sand. Wenn das Fundament wackelt, stürzt das Ranking ein.\u003c/p\u003e\u003cp\u003eCheckt eure App mal mit deaktiviertem JavaScript (ja, wirklich). Seht ihr weiße Seiten? Funktionieren die Links nicht? Dann habt ihr Arbeit vor euch.\u003c/p\u003e\u003cp\u003eIm nächsten Teil kümmern wir uns um die Daten \u003cem\u003ein\u003c/em\u003e der Seite. Wir schauen uns an, wie wir Google mit JSON-LD füttern, damit ihr diese schicken Sterne-Bewertungen in der Suche bekommt.\u003c/p\u003e"])</script><script>self.__next_f.push([1,"18:[\"$\",\"section\",null,{\"className\":\"py-20 bg-gray-50 relative\",\"children\":[\"$\",\"div\",null,{\"className\":\"container mx-auto px-4 sm:px-6 lg:px-8 relative z-10\",\"children\":[[\"$\",\"div\",null,{\"className\":\"md:hidden mb-6 -mx-4 px-4 overflow-hidden\",\"children\":[\"$\",\"$L1c\",null,{\"className\":\"text-gray-500\",\"scrollable\":true,\"customLastItem\":{\"label\":\"Technische SEO Fehler bei modernen Web-Apps (SPAs)\"},\"injectedItems\":[{\"label\":\"SEO für Entwickler: Warum Code das neue Marketing ist (Der Guide)\",\"href\":\"/blog/seo-fuer-entwickler-ultimativer-guide\"}]}]}],[\"$\",\"$L1d\",null,{\"href\":\"/blog\",\"className\":\"inline-flex items-center text-gray-500 hover:text-primary mb-10 transition-colors group\",\"children\":[[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-arrow-left w-4 h-4 mr-2 group-hover:-translate-x-1 transition-transform\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"1l729n\",{\"d\":\"m12 19-7-7 7-7\"}],[\"$\",\"path\",\"x3x0zl\",{\"d\":\"M19 12H5\"}],\"$undefined\"]}],\" Zurück zur Übersicht\"]}],[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 lg:grid-cols-12 gap-12 items-start\",\"children\":[[\"$\",\"div\",null,{\"className\":\"lg:col-span-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-white px-4 py-8 sm:p-12 md:p-16 rounded-lg shadow-lg border border-gray-100/50\",\"children\":[[\"$\",\"$L21\",null,{\"post\":{\"id\":33,\"user_id\":1,\"use_custom_author\":false,\"custom_author_name\":null,\"custom_author_title\":null,\"custom_author_description\":null,\"custom_author_url\":null,\"custom_author_avatar_id\":null,\"category_id\":3,\"title\":\"Technische SEO Fehler bei modernen Web-Apps (SPAs)\",\"seo_title\":\"Technische SEO Fehler in SPAs: Soft 404 \u0026 Routing Guide\",\"slug\":\"technische-seo-fehler-spa-web-apps\",\"content\":\"$22\",\"show_toc\":true,\"table_of_contents\":[{\"id\":\"1-der-soft-404-wenn-euer-server-lgt\",\"text\":\"1. Der \\\"Soft 404\\\": Wenn euer Server lügt\",\"level\":2},{\"id\":\"2-hash-urls-bitte-nicht\",\"text\":\"2. Hash-URLs? Bitte nicht.\",\"level\":2},{\"id\":\"3-der-onclick-tod-buttons-sind-keine-links\",\"text\":\"3. Der onClick-Tod: Buttons sind keine Links\",\"level\":2},{\"id\":\"fazit-verlasst-euch-nicht-auf-magie\",\"text\":\"Fazit: Verlasst euch nicht auf \\\"Magie\\\"\",\"level\":2}],\"excerpt\":\"\u003cp\u003eSingle Page Applications (SPAs) fühlen sich für Nutzer fantastisch an, sind für Suchmaschinen aber oft ein Albtraum. In diesem Teil analysieren wir typische \u003cstrong\u003etechnische SEO Fehler\u003c/strong\u003e, die beim Client-Side-Routing passieren. Wir erklären, warum der \\\"Soft 404\\\"-Fehler Ihren Index zumüllt, warum Googlebot Hash-URLs (\u003ccode\u003e/#/\u003c/code\u003e) hasst und wieso ein \u003ccode\u003eonClick\u003c/code\u003e-Event niemals einen echten Link ersetzt.\u003c/p\u003e\",\"image\":\"https://api.webinteger.dev/storage/media/spa-seo-fehler-soft-404-glitch.png\",\"mobile_image\":null,\"is_published\":true,\"published_at\":\"2026-01-27T21:22:00.000000Z\",\"views_count\":2,\"unique_views_count\":2,\"likes_count\":0,\"shares_count\":0,\"comments_count\":0,\"reading_time\":4,\"is_featured\":false,\"is_pillar\":false,\"created_at\":\"2026-01-27T20:09:01.000000Z\",\"updated_at\":\"2026-01-30T13:30:19.000000Z\",\"series_id\":4,\"series_order\":4,\"meta_description\":\"Technische SEO Fehler ruinieren Rankings. Erfahren Sie, wie Sie Soft 404s, Hash-URLs und Routing-Probleme in SPAs (React/Vue) vermeiden.\",\"focus_keyword\":\"Technische SEO Fehler\",\"meta_keywords\":null,\"canonical_url\":null,\"seo_score\":94,\"outlook_title\":\"Strukturierte Daten: Die Geheimsprache von Google\",\"outlook_description\":\"\u003cp\u003eIhr wollt, dass Google nicht nur euren Text sieht, sondern ihn \u003cem\u003eversteht\u003c/em\u003e? Dass Preise, Events und Bewertungen direkt im Suchergebnis auftauchen? Das Zauberwort heißt \u003ca target=\\\"_blank\\\" rel=\\\"noopener noreferrer nofollow\\\" href=\\\"http://Schema.org\\\"\u003eSchema.org\u003c/a\u003e. Im nächsten Teil zeigen wir, wie man JSON-LD dynamisch generiert – ohne dabei wahnsinnig zu werden.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eNächster Artikel: \u003c/strong\u003e\u003ca href=\\\"/blog/strukturierte-daten-seo-schema-org-guide\\\"\u003e\u003cstrong\u003eStrukturierte Daten – Sinnvoller Code oder Overkill?\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\",\"seo_image_id\":130,\"image_srcset\":\"https://api.webinteger.dev/curator/media/spa-seo-fehler-soft-404-glitch.png?w=640\u0026fm=webp\u0026fit=cover\u0026s=3e06d3057f1c865e1e109c542f67c2ca 640w, https://api.webinteger.dev/curator/media/spa-seo-fehler-soft-404-glitch.png?w=768\u0026fm=webp\u0026fit=cover\u0026s=99d56917a0375401a6dd70d57d45fc65 768w, https://api.webinteger.dev/curator/media/spa-seo-fehler-soft-404-glitch.png?w=1024\u0026fm=webp\u0026fit=cover\u0026s=5d2ac948f09bcf603d9f95e15708c282 1024w, https://api.webinteger.dev/curator/media/spa-seo-fehler-soft-404-glitch.png?w=1200\u0026fm=webp\u0026fit=cover\u0026s=7aa3a3b4b727f563bc3fcc904ef2d9d5 1200w\",\"image_description\":\"Ein futuristisches Tablet zeigt eine defekte Web-App-Oberfläche mit einer roten Soft 404 Fehlermeldung.\",\"seo_image_url\":\"https://api.webinteger.dev/storage/media/hPuaBjUWTbCjSJgr7WR0peYpQFmQgdyQq7x75OmW.webp\",\"category\":{\"id\":3,\"name\":\"SEO für Entwickler\",\"slug\":\"seo-fuer-entwickler\",\"color\":null,\"description\":null,\"is_visible\":1,\"seo_title\":null,\"meta_description\":null,\"meta_keywords\":null,\"og_title\":null,\"og_description\":null,\"og_image_id\":null,\"twitter_title\":null,\"twitter_description\":null,\"twitter_image_id\":null,\"created_at\":\"2026-01-24T13:33:00.000000Z\",\"updated_at\":\"2026-01-24T13:33:00.000000Z\"},\"tags\":[{\"id\":36,\"name\":\"SEO\",\"slug\":\"seo\",\"description\":null,\"seo_title\":null,\"meta_description\":null,\"meta_keywords\":null,\"og_title\":null,\"og_description\":null,\"og_image_id\":null,\"twitter_title\":null,\"twitter_description\":null,\"twitter_image_id\":null,\"created_at\":\"2026-01-16T22:18:26.000000Z\",\"updated_at\":\"2026-01-16T22:18:26.000000Z\",\"pivot\":{\"post_id\":33,\"tag_id\":36}},{\"id\":41,\"name\":\"JavaScript\",\"slug\":\"javascript\",\"description\":null,\"seo_title\":null,\"meta_description\":null,\"meta_keywords\":null,\"og_title\":null,\"og_description\":null,\"og_image_id\":null,\"twitter_title\":null,\"twitter_description\":null,\"twitter_image_id\":null,\"created_at\":\"2026-01-25T18:46:26.000000Z\",\"updated_at\":\"2026-01-25T18:46:26.000000Z\",\"pivot\":{\"post_id\":33,\"tag_id\":41}},{\"id\":40,\"name\":\"webentwicklung\",\"slug\":\"webentwicklung\",\"description\":null,\"seo_title\":null,\"meta_description\":null,\"meta_keywords\":null,\"og_title\":null,\"og_description\":null,\"og_image_id\":null,\"twitter_title\":null,\"twitter_description\":null,\"twitter_image_id\":null,\"created_at\":\"2026-01-24T23:09:28.000000Z\",\"updated_at\":\"2026-01-24T23:09:28.000000Z\",\"pivot\":{\"post_id\":33,\"tag_id\":40}}],\"series\":{\"id\":4,\"name\":\"SEO für Webentwickler: Die Masterclass\",\"slug\":\"seo-fuer-webentwickler-die-masterclass\",\"description\":null,\"image\":null,\"meta_title\":null,\"meta_description\":null,\"og_title\":null,\"og_description\":null,\"og_image_id\":null,\"twitter_title\":null,\"twitter_description\":null,\"twitter_image_id\":null,\"created_at\":\"2026-01-24T23:16:22.000000Z\",\"updated_at\":\"2026-01-24T23:16:22.000000Z\"},\"user\":{\"id\":1,\"name\":\"Dietrich Bojko\",\"title\":\"Senior Webentwickler\",\"description\":\"\u003cp\u003e\u003cstrong\u003eWebinteger\u003c/strong\u003e arbeitet seit vielen Jahren produktiv mit Linux-basierten Entwicklungsumgebungen unter Windows.\u003cbr\u003eDer Fokus liegt auf performanten Setups mit \u003cstrong\u003eWSL 2, Docker, PHP, Node.js und modernen Build-Tools\u003c/strong\u003e in \u003ca target=\\\"_blank\\\" rel=\\\"noopener noreferrer nofollow\\\" href=\\\"/portfolio\\\"\u003erealen Projekten\u003c/a\u003e – nicht auf theoretischen Beispielkonfigurationen.\u003c/p\u003e\u003cp\u003eDie Artikel dieser Serie entstehen direkt aus dem täglichen Einsatz in Kunden- und Eigenprojekten und dokumentieren bewusst auch typische Fehler, Engpässe und bewährte Workarounds.\u003c/p\u003e\",\"author_url\":\"https://webinteger.dev/about\",\"avatar_id\":25,\"email\":\"info@webinteger.dev\",\"email_verified_at\":null,\"created_at\":\"2025-12-25T23:57:00.000000Z\",\"updated_at\":\"2026-01-08T19:00:33.000000Z\",\"avatar\":{\"id\":25,\"folder_id\":3,\"disk\":\"public\",\"directory\":\"media\",\"visibility\":\"public\",\"name\":\"webinteger\",\"path\":\"media/Xc78aJmV7kj3TyWqFhQJ9OX5APEyNjSsaAcfbJEa.jpg\",\"width\":660,\"height\":660,\"size\":41478,\"type\":\"image/jpeg\",\"ext\":\"jpg\",\"alt\":\"Webinteger Webentwickler\",\"title\":\"Senior Webentwickler\",\"description\":null,\"caption\":null,\"exif\":null,\"curations\":null,\"created_at\":\"2026-01-08T18:58:51.000000Z\",\"updated_at\":\"2026-01-08T18:59:34.000000Z\",\"tenant_id\":null,\"url\":\"https://api.webinteger.dev/storage/media/Xc78aJmV7kj3TyWqFhQJ9OX5APEyNjSsaAcfbJEa.jpg\"}},\"featured_image\":{\"id\":116,\"folder_id\":9,\"disk\":\"public\",\"directory\":\"media\",\"visibility\":\"public\",\"name\":\"spa-seo-fehler-soft-404-glitch\",\"path\":\"media/spa-seo-fehler-soft-404-glitch.png\",\"width\":1536,\"height\":1024,\"size\":2345471,\"type\":\"image/png\",\"ext\":\"png\",\"alt\":\"Ein futuristisches Tablet zeigt eine defekte Web-App-Oberfläche mit einer roten Soft 404 Fehlermeldung.\",\"title\":\"Typische SPA-Fehler: Wenn moderne Web-Apps bei Google scheitern.\",\"description\":null,\"caption\":null,\"exif\":null,\"curations\":null,\"created_at\":\"2026-01-24T18:45:52.000000Z\",\"updated_at\":\"2026-01-24T18:46:05.000000Z\",\"tenant_id\":null,\"url\":\"https://api.webinteger.dev/storage/media/spa-seo-fehler-soft-404-glitch.png\",\"thumbnail_url\":\"/curator/media/spa-seo-fehler-soft-404-glitch.png?w=200\u0026h=200\u0026fit=crop\u0026fm=webp\u0026s=46bafe375d03717b57492ddec305ba87\",\"medium_url\":\"/curator/media/spa-seo-fehler-soft-404-glitch.png?w=640\u0026h=640\u0026fit=crop\u0026fm=webp\u0026s=993308dfd29438c3f6858daaf45b5b1d\",\"large_url\":\"/curator/media/spa-seo-fehler-soft-404-glitch.png?w=1024\u0026h=1024\u0026fit=contain\u0026fm=webp\u0026s=efabb2ff8d8d65cfb1f90d06c217d3bb\",\"resizable\":true,\"size_for_humans\":\"2.2 MiB\",\"pretty_name\":\"Typische SPA-Fehler: Wenn moderne Web-Apps bei Google scheitern.\"},\"mobile_image_media\":null,\"faqs\":[{\"id\":1154,\"post_id\":33,\"question\":\"Kann ich Soft 404s in der Search Console sehen?\",\"answer\":\"Ja, Google ist da ziemlich direkt. Wenn unter \\\"Seitenindexierung\\\" die Meldung \\\"Gesendet URL scheint ein Soft 404 zu sein\\\" auftaucht, brennt die Hütte. Das heißt, Google hat gemerkt, dass ihr ihm leere Seiten als \\\"Inhalt\\\" verkaufen wolltet.\",\"order\":0,\"created_at\":\"2026-01-30T13:29:46.000000Z\",\"updated_at\":\"2026-01-30T13:29:46.000000Z\"},{\"id\":1155,\"post_id\":33,\"question\":\"Ist Pre-Rendering (Prerender.io) eine Lösung?\",\"answer\":\"Es ist ein Pflaster. Tools wie Prerender.io führen eure JS-App in einem Headless-Browser aus und speichern das HTML als Snapshot. Das löst das Problem, dass der Bot nichts sieht. Aber es ist eine weitere Schicht Komplexität, die kaputtgehen kann. Echtes SSR (Server Side Rendering) ist sauberer.\",\"order\":1,\"created_at\":\"2026-01-30T13:29:46.000000Z\",\"updated_at\":\"2026-01-30T13:29:46.000000Z\"},{\"id\":1156,\"post_id\":33,\"question\":\"Warum rankt meine React-App nicht, trotz React Helmet?\",\"answer\":\"React Helmet setzt brav den \u003ctitle\u003e und die Meta-Description. Super. Aber wenn der Content erst nach 3 Sekunden Spinner-Animation lädt oder interne Links fehlen, rettet euch der Titel auch nicht mehr. SEO ist das Gesamtpaket.\",\"order\":2,\"created_at\":\"2026-01-30T13:29:46.000000Z\",\"updated_at\":\"2026-01-30T13:29:46.000000Z\"},{\"id\":1157,\"post_id\":33,\"question\":\"Was ist mit \\\"Lazy Loading\\\" von Modulen?\",\"answer\":\"Code-Splitting ist super für die Performance (Core Web Vitals). Aber achten Sie darauf, dass Text-Inhalte nicht erst nach einer User-Interaktion (z.B. Scrollen) nachgeladen werden. Googlebot scrollt nicht! Alles Wichtige muss beim initialen Load (oder kurz danach) im DOM sein.\",\"order\":3,\"created_at\":\"2026-01-30T13:29:46.000000Z\",\"updated_at\":\"2026-01-30T13:29:46.000000Z\"}],\"custom_author_avatar\":null}}],\"$L23\",\"$L24\",\"$L25\",\"$L26\",\"$L27\",\"$L28\",\"$L29\",\"$L2a\",\"$L2b\"]}],\"$L2c\"]}],\"$L2d\"]}]]}]}]\n"])</script><script>self.__next_f.push([1,"2e:I[52575,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"default\"]\n2f:I[7968,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"default\"]\n30:I[63458,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"default\"]\n38:I[24350,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"default\"]\n39:I[72015,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"default\"]\n3a:I[69779,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"default\"]\n3b:I[97664,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"default\"]\n3c:I[86902,[\"/_next/static/chunks/4cef3d42f171a101.js\",\"/_next/static/chunks/625681995a16048f.js\",\"/_next/static/chunks/6ffbbcffd1c9c3f2.js\",\"/_next/static/chunks/3c28e38fc9a3acbb.js\"],\"default\"]\n1e:[\"$\",\"div\",null,{\"className\":\"h-[2px] w-12 sm:w-24 bg-gradient-to-r from-transparent via-highlight to-transparent\"}]\n1f:[\"$\",\"div\",null,{\"className\":\"flex gap-2\",\"children\":[[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-white animate-bounce\",\"style\":{\"animationDelay\":\"0s\"}}],[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-highlight animate-bounce\",\"style\":{\"animationDelay\":\"0.2s\"}}],[\"$\",\"div\",null,{\"className\":\"w-1.5 h-1.5 rounded-full bg-secondary animate-bounce\",\"style\":{\"animationDelay\":\"0.4s\"}}]]}]\n20:[\"$\",\"div\",null,{\"className\":\"h-[2px] w-12 sm:w-24 bg-gradient-to-r from-transparent via-highlight to-transparent\"}]\n23:[\"$\",\"div\",null,{\"className\":\"flex items-center justify-between border-b border-gray-100 pb-8 mb-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-6 text-gray-500 text-sm\",\"children\":[\"$\",\"span\",null,{\"className\":\"flex items-center\",\"title\":\"Views\",\"children\":[[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-eye w-5 h-5 mr-2 text-gray-400\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"1nclc0\",{\"d\":\"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0\"}],[\"$\",\"circle\",\"1v7zrd\",{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"3\"}],\"$undefined\"]}],\" \",2,\" Views\"]}]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-3\",\"children\":[[\"$\",\"$L2e\",null,{\"title\":\"Technische SEO Fehler bei modernen Web-Apps (SPAs)\"}],[\"$\",\"$L2f\",null,{\"slug\":\"technische-seo-fehler-spa-web-apps\",\"initialLikes\":0}]]}]]}]\n31:T1999,"])</script><script>self.__next_f.push([1,"\u003cp\u003eGravierende \u003cstrong\u003etechnische SEO Fehler\u003c/strong\u003e sind der Hauptgrund, warum moderne Single Page Applications (React, Vue, Svelte) oft schlecht ranken, obwohl sie sich für den Nutzer fantastisch anfühlen. Endlich keine Page-Reloads mehr, alles ist \"snappy\". Aber sobald das Marketing-Team fragt: \"Warum findet man unsere App eigentlich nicht bei Google?\", beginnt das große Kopfkratzen.\u003c/p\u003e\u003cp\u003eDie Wahrheit ist: Was für den User geil aussieht, ist für den Googlebot oft kaputt. Wir Frontend-Entwickler bauen uns oft versehentlich massive \u003cstrong\u003etechnische SEO Fehler\u003c/strong\u003e in die Architektur, weil wir zu sehr auf den Browser und zu wenig auf den Crawler achten.\u003c/p\u003e\u003cp\u003eIn diesem Teil zerlegen wir die drei Klassiker, die fast jedem JS-Dev schon mal passiert sind.\u003c/p\u003e\u003cfigure\u003e\u003cpicture\u003e\u003csource srcset=\"https://api.webinteger.dev/curator/media/spa-seo-fehler-single-page-application.png?fm=webp\u0026amp;w=1200\u0026amp;q=85\u0026amp;s=29aff7c3ab264f7f31c2021b4bb4cd32\" type=\"image/webp\"\u003e\u003c/source\u003e\u003cimg src=\"https://api.webinteger.dev/storage/media/spa-seo-fehler-single-page-application.png\" alt=\"Eine futuristische Single-Page-Application auf einem Tablet, die offensichtliche technische Fehler und Glitches anzeigt.\" title=\"Typische SPA-Fehler: Wenn moderne Apps bei Google durchfallen.\" loading=\"lazy\" decoding=\"async\"\u003e\u003c/picture\u003e\u003c/figure\u003e\u003chr\u003e\u003ch2 id=\"1-der-soft-404-wenn-euer-server-luegt\" class=\"scroll-mt-32\"\u003e1. Der \"Soft 404\": Wenn euer Server lügt\u003c/h2\u003e\u003cp\u003eDas ist der Endgegner unter den \u003cstrong\u003etechnischen SEO Fehlern\u003c/strong\u003e. Stellt euch vor, ein User tippt eine URL ein, die es gar nicht gibt: \u003ccode\u003e/shop/produkt-xyz-gibts-nicht\u003c/code\u003e. In der alten Welt (PHP, Rails) hat der Server kurz in der Datenbank geschaut, nichts gefunden und sofort gesagt: \"Fehler 404! Weg hier!\".\u003c/p\u003e\u003cp\u003eIn eurer SPA läuft das anders. Der Nginx-Server sieht die Anfrage und denkt sich: \"Keine Ahnung, was das für eine Route ist, aber ich liefere mal die \u003ccode\u003eindex.html\u003c/code\u003e aus. Das JavaScript regelt das schon.\" Der Server sendet also ein \u003cstrong\u003eHTTP 200 OK\u003c/strong\u003e. Für Googlebot heißt das: \"Alles super, Seite gefunden, Inhalt ist da.\"\u003c/p\u003e\u003cp\u003eErst Sekunden später wacht euer React-Router im Browser auf, merkt, dass das Produkt fehlt, und zeigt eine Error-Komponente an. Zu spät. Google hat das \"200 OK\" schon registriert. Das Resultat? Ihr habt tausende \"Fehlerseiten\" im Google-Index. Das nennt sich \"Soft 404\" und flutet euren Index mit Müll.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eDer Fix:\u003c/strong\u003e Ihr müsst serverseitig checken, ob Daten da sind, \u003cem\u003ebevor\u003c/em\u003e ihr rendert. Wenn die API \u003ccode\u003enull\u003c/code\u003e zurückgibt, muss der Server hart 404 antworten. Wenn ihr reines CSR nutzt, ist dieser \u003cstrong\u003etechnische SEO Fehler\u003c/strong\u003e schwer zu beheben. Der einzige Hack: Ein Meta-Tag \u003ccode\u003e\u0026lt;meta name=\"robots\" content=\"noindex\"\u0026gt;\u003c/code\u003e per JS in den Head injizieren, sobald die 404-Komponente lädt.\u003c/p\u003e\u003cfigure\u003e\u003cpicture\u003e\u003csource srcset=\"https://api.webinteger.dev/curator/media/soft-404-fehler-technisches-seo.png?fm=webp\u0026amp;w=1200\u0026amp;q=85\u0026amp;s=b2ae6222fc7913e00b7321197d30b73f\" type=\"image/webp\"\u003e\u003c/source\u003e\u003cimg src=\"https://api.webinteger.dev/storage/media/soft-404-fehler-technisches-seo.png\" alt='Visualisierung eines Soft 404 Fehlers: Der Server sendet technisch ein \"OK\", aber die Seite zeigt dem Nutzer eine Fehlermeldung.' title=\"Soft 404 erklärt: Wenn der Server lügt.\" loading=\"lazy\" decoding=\"async\"\u003e\u003c/picture\u003e\u003c/figure\u003e\u003chr\u003e\u003ch2 id=\"2-hash-urls-bitte-nicht\" class=\"scroll-mt-32\"\u003e2. Hash-URLs? Bitte nicht.\u003c/h2\u003e\u003cp\u003eEin weiterer Klassiker im Bereich \u003cstrong\u003etechnische SEO Fehler\u003c/strong\u003e sind URLs wie \u003ccode\u003eexample.com/#/about\u003c/code\u003e. Das war 2015 mal cool, weil man so das Server-Routing umgehen konnte. Alles nach der Raute \u003ccode\u003e#\u003c/code\u003e (Hash) bleibt im Browser und geht nie an den Server.\u003c/p\u003e\u003cp\u003eFür SEO ist das der Tod. Google ignoriert oft alles, was nach dem Hash kommt. Für den Bot existiert nur die Startseite. Eure ganze schöne Unterseiten-Struktur? Unsichtbar.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eDie Lösung:\u003c/strong\u003e Nutzt die \u003cstrong\u003eHistory API (\u003c/strong\u003e\u003ccode\u003epushState\u003c/code\u003e\u003cstrong\u003e)\u003c/strong\u003e. Frameworks wie React Router oder Vue Router können das out-of-the-box (\"BrowserRouter\" Mode). Eure URLs sehen dann sauber aus: \u003ccode\u003eexample.com/about\u003c/code\u003e. Ja, ihr müsst dafür euren Webserver (Apache/Nginx) so konfigurieren, dass er alle Requests auf die \u003ccode\u003eindex.html\u003c/code\u003e umschreibt (Rewrite Rules). Aber das ist ein kleiner Preis für sichtbare Unterseiten.\u003c/p\u003e\u003chr\u003e\u003ch2 id=\"3-der-onclick-tod-buttons-sind-keine-links\" class=\"scroll-mt-32\"\u003e3. Der \u003ccode\u003eonClick\u003c/code\u003e-Tod: Buttons sind keine Links\u003c/h2\u003e\u003cp\u003eDas hier sehe ich in fast jedem Code-Review:\u003c/p\u003e\u003cpre\u003e\u003ccode\u003e// Bitte tut das nicht:\n\u0026lt;div onClick={() =\u0026gt; router.push('/shop')}\u0026gt;\n Zum Shop\n\u0026lt;/div\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eWarum machen wir das? Weil es bequem ist. Ein \u003ccode\u003ediv\u003c/code\u003e stylen, Click-Handler drauf, fertig. Aber Googlebot ist kein User. Er klickt nicht auf bunte Boxen. Er scrollt nicht wild herum. Er parst den HTML-Code und sucht nach einem einzigen Tag: \u003ccode\u003e\u0026lt;a\u0026gt;\u003c/code\u003e.\u003c/p\u003e\u003cp\u003eWenn ihr Navigationselemente baut, die nur per JavaScript-Event funktionieren, sind das für den Crawler Sackgassen. Solche \u003cstrong\u003etechnischen SEO Fehler\u003c/strong\u003e sorgen dafür, dass eure Unterseiten verhungern, weil keine Link-Power (Link Juice) fließt.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eMacht es richtig:\u003c/strong\u003e Nutzt die Link-Komponenten eures Frameworks.\u003c/p\u003e\u003cpre\u003e\u003ccode\u003e// So muss das aussehen:\n\u0026lt;Link to=\"/shop\"\u0026gt;Zum Shop\u0026lt;/Link\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eDas rendert am Ende ein echtes \u003ccode\u003e\u0026lt;a href=\"/shop\"\u0026gt;\u003c/code\u003e in den DOM. Und genau das braucht Google, um eure Seite zu verstehen. Das Vermeiden solcher simplen \u003cstrong\u003etechnischen SEO Fehler\u003c/strong\u003e bringt oft mehr als jedes Keyword-Tuning.\u003c/p\u003e\u003chr\u003e\u003ch2 id=\"fazit-verlasst-euch-nicht-auf-magie\" class=\"scroll-mt-32\"\u003eFazit: Verlasst euch nicht auf \"Magie\"\u003c/h2\u003e\u003cp\u003eFrameworks nehmen uns viel Arbeit ab, aber sie entbinden uns nicht davon, zu verstehen, wie das Web funktioniert. Ein \u003ccode\u003ediv\u003c/code\u003e ist kein Link. Ein 200er Statuscode ist kein 404. Wer diese \u003cstrong\u003etechnischen SEO Fehler\u003c/strong\u003e ignoriert, baut ein Haus auf Sand. Wenn das Fundament wackelt, stürzt das Ranking ein.\u003c/p\u003e\u003cp\u003eCheckt eure App mal mit deaktiviertem JavaScript (ja, wirklich). Seht ihr weiße Seiten? Funktionieren die Links nicht? Dann habt ihr Arbeit vor euch.\u003c/p\u003e\u003cp\u003eIm nächsten Teil kümmern wir uns um die Daten \u003cem\u003ein\u003c/em\u003e der Seite. Wir schauen uns an, wie wir Google mit JSON-LD füttern, damit ihr diese schicken Sterne-Bewertungen in der Suche bekommt.\u003c/p\u003e"])</script><script>self.__next_f.push([1,"24:[\"$\",\"$L30\",null,{\"content\":\"$31\"}]\n"])</script><script>self.__next_f.push([1,"25:[\"$\",\"div\",null,{\"className\":\"my-12 rounded-xl border border-primary/10 bg-white shadow-lg overflow-hidden relative group\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute top-0 right-0 w-64 h-64 bg-primary/5 rounded-full blur-3xl -translate-y-1/2 translate-x-1/2 pointer-events-none\"}],[\"$\",\"div\",null,{\"className\":\"bg-gradient-to-r from-gray-50 to-white border-b border-gray-100 p-6 flex items-start gap-4\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-primary/10 p-3 rounded-lg text-primary\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-book-open w-6 h-6\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"1akyts\",{\"d\":\"M12 7v14\"}],[\"$\",\"path\",\"ruj8y\",{\"d\":\"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\"}],\"$undefined\"]}]}],[\"$\",\"div\",null,{\"children\":[[\"$\",\"p\",null,{\"className\":\"text-sm font-bold uppercase tracking-wider text-primary mb-1\",\"children\":\"Teil der Serie\"}],[\"$\",\"h3\",null,{\"className\":\"text-xl font-heading font-bold text-gray-900\",\"children\":\"SEO für Webentwickler: Die Masterclass\"}],null]}]]}],[\"$\",\"div\",null,{\"className\":\"p-2\",\"children\":[[\"$\",\"$L1d\",\"29\",{\"href\":\"/blog/seo-fuer-entwickler-ultimativer-guide\",\"className\":\"group/item flex items-center gap-4 p-4 rounded-lg transition-all hover:bg-gray-50 hover:border-gray-100 border border-transparent\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex-shrink-0\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-8 h-8 rounded-full bg-secondary text-white flex items-center justify-center font-bold text-sm shadow-md shadow-secondary/20\",\"title\":\"Pillar Page / Hauptseite\",\"children\":\"H\"}]}],[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"h4\",null,{\"className\":\"text-base font-bold transition-colors text-gray-700 group-hover/item:text-gray-900\",\"children\":[\"SEO für Entwickler: Warum Code das neue Marketing ist (Der Guide)\",\" \",[\"$\",\"span\",null,{\"className\":\"text-[10px] bg-secondary/10 text-secondary px-1.5 py-0.5 rounded ml-2 uppercase\",\"children\":\"Pillar\"}]]}]}],false]}],[\"$\",\"$L1d\",\"30\",{\"href\":\"/blog/seo-fuer-entwickler-basics-code-struktur\",\"className\":\"group/item flex items-center gap-4 p-4 rounded-lg transition-all hover:bg-gray-50 hover:border-gray-100 border border-transparent\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex-shrink-0\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-8 h-8 rounded-full bg-green-100 text-green-600 flex items-center justify-center\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-circle-check w-5 h-5\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"circle\",\"1mglay\",{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],[\"$\",\"path\",\"dzmm74\",{\"d\":\"m9 12 2 2 4-4\"}],\"$undefined\"]}]}]}],[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"h4\",null,{\"className\":\"text-base font-bold transition-colors text-gray-700 group-hover/item:text-gray-900\",\"children\":[\"SEO für Entwickler: Was im Code wirklich wichtig ist\",\" \",false]}]}],false]}],[\"$\",\"$L1d\",\"31\",{\"href\":\"/blog/seo-fuer-entwickler-javascript-seo-rendering\",\"className\":\"group/item flex items-center gap-4 p-4 rounded-lg transition-all hover:bg-gray-50 hover:border-gray-100 border border-transparent\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex-shrink-0\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-8 h-8 rounded-full bg-green-100 text-green-600 flex items-center justify-center\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-circle-check w-5 h-5\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"circle\",\"1mglay\",{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],[\"$\",\"path\",\"dzmm74\",{\"d\":\"m9 12 2 2 4-4\"}],\"$undefined\"]}]}]}],\"$L32\",false]}],\"$L33\",\"$L34\",\"$L35\",\"$L36\",\"$L37\"]}]]}]\n"])</script><script>self.__next_f.push([1,"26:[\"$\",\"div\",null,{\"className\":\"mt-12 pt-8 border-t border-gray-100\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-3\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center justify-center w-8 h-8 rounded-full bg-highlight/10 text-highlight\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-tag w-4 h-4\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"vktsd0\",{\"d\":\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\"}],[\"$\",\"circle\",\"kqv944\",{\"cx\":\"7.5\",\"cy\":\"7.5\",\"r\":\".5\",\"fill\":\"currentColor\"}],\"$undefined\"]}]}],[\"$\",\"span\",null,{\"className\":\"text-sm font-bold text-gray-900 uppercase tracking-wide mr-2\",\"children\":\"Themen:\"}],[[\"$\",\"$L1d\",\"36\",{\"href\":\"/blog/tag/seo\",\"className\":\"px-4 py-2 bg-gray-50 border border-gray-100 text-gray-600 text-xs font-bold uppercase rounded-lg hover:bg-highlight hover:text-white hover:border-highlight transition-all shadow-sm hover:shadow-md hover:-translate-y-0.5\",\"children\":[\"#\",\"SEO\"]}],[\"$\",\"$L1d\",\"41\",{\"href\":\"/blog/tag/javascript\",\"className\":\"px-4 py-2 bg-gray-50 border border-gray-100 text-gray-600 text-xs font-bold uppercase rounded-lg hover:bg-highlight hover:text-white hover:border-highlight transition-all shadow-sm hover:shadow-md hover:-translate-y-0.5\",\"children\":[\"#\",\"JavaScript\"]}],[\"$\",\"$L1d\",\"40\",{\"href\":\"/blog/tag/webentwicklung\",\"className\":\"px-4 py-2 bg-gray-50 border border-gray-100 text-gray-600 text-xs font-bold uppercase rounded-lg hover:bg-highlight hover:text-white hover:border-highlight transition-all shadow-sm hover:shadow-md hover:-translate-y-0.5\",\"children\":[\"#\",\"webentwicklung\"]}]]]}]}]\n"])</script><script>self.__next_f.push([1,"27:[\"$\",\"$L38\",null,{\"faqs\":\"$18:props:children:props:children:2:props:children:0:props:children:0:props:children:0:props:post:faqs\"}]\n28:[\"$\",\"$L39\",null,{\"title\":\"Strukturierte Daten: Die Geheimsprache von Google\",\"description\":\"\u003cp\u003eIhr wollt, dass Google nicht nur euren Text sieht, sondern ihn \u003cem\u003eversteht\u003c/em\u003e? Dass Preise, Events und Bewertungen direkt im Suchergebnis auftauchen? Das Zauberwort heißt \u003ca target=\\\"_blank\\\" rel=\\\"noopener noreferrer nofollow\\\" href=\\\"http://Schema.org\\\"\u003eSchema.org\u003c/a\u003e. Im nächsten Teil zeigen wir, wie man JSON-LD dynamisch generiert – ohne dabei wahnsinnig zu werden.\u003c/p\u003e\u003cp\u003e\u003cstrong\u003eNächster Artikel: \u003c/strong\u003e\u003ca href=\\\"/blog/strukturierte-daten-seo-schema-org-guide\\\"\u003e\u003cstrong\u003eStrukturierte Daten – Sinnvoller Code oder Overkill?\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\"}]\n"])</script><script>self.__next_f.push([1,"29:[\"$\",\"div\",null,{\"className\":\"mt-16 p-8 rounded-2xl bg-gradient-to-br from-gray-50 to-white border border-gray-100 shadow-sm relative overflow-hidden group\",\"children\":[[\"$\",\"div\",null,{\"className\":\"absolute top-0 right-0 p-4 opacity-[0.03] group-hover:opacity-[0.05] transition-opacity\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":120,\"height\":120,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-user\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"975kel\",{\"d\":\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\"}],[\"$\",\"circle\",\"17ys0d\",{\"cx\":\"12\",\"cy\":\"7\",\"r\":\"4\"}],\"$undefined\"]}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col md:flex-row items-center md:items-start gap-8 relative z-10\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex-shrink-0\",\"children\":[\"$\",\"div\",null,{\"className\":\"relative w-32 h-32 rounded-2xl overflow-hidden border-4 border-white shadow-lg rotate-3 group-hover:rotate-0 transition-transform duration-500\",\"children\":[\"$\",\"$L1b\",null,{\"src\":\"https://api.webinteger.dev/storage/media/Xc78aJmV7kj3TyWqFhQJ9OX5APEyNjSsaAcfbJEa.jpg\",\"alt\":\"Dietrich Bojko\",\"fill\":true,\"className\":\"object-cover\"}]}]}],[\"$\",\"div\",null,{\"className\":\"flex-1 text-center md:text-left\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xs font-black uppercase tracking-widest text-primary/60\",\"children\":\"Über den Autor\"}],[\"$\",\"h3\",null,{\"className\":\"text-2xl font-heading font-black text-gray-900 group-hover:text-primary transition-colors\",\"children\":\"Dietrich Bojko\"}],[\"$\",\"p\",null,{\"className\":\"text-sm font-bold text-gray-500 uppercase tracking-wide mt-1\",\"children\":\"Senior Webentwickler\"}]]}],[\"$\",\"div\",null,{\"className\":\"text-gray-600 text-base leading-relaxed mb-6 max-w-2xl\",\"dangerouslySetInnerHTML\":{\"__html\":\"\u003cp\u003e\u003cstrong\u003eWebinteger\u003c/strong\u003e arbeitet seit vielen Jahren produktiv mit Linux-basierten Entwicklungsumgebungen unter Windows.\u003cbr\u003eDer Fokus liegt auf performanten Setups mit \u003cstrong\u003eWSL 2, Docker, PHP, Node.js und modernen Build-Tools\u003c/strong\u003e in \u003ca target=\\\"_blank\\\" rel=\\\"noopener noreferrer nofollow\\\" href=\\\"/portfolio\\\"\u003erealen Projekten\u003c/a\u003e – nicht auf theoretischen Beispielkonfigurationen.\u003c/p\u003e\u003cp\u003eDie Artikel dieser Serie entstehen direkt aus dem täglichen Einsatz in Kunden- und Eigenprojekten und dokumentieren bewusst auch typische Fehler, Engpässe und bewährte Workarounds.\u003c/p\u003e\"}}],[\"$\",\"$L1d\",null,{\"href\":\"https://webinteger.dev/about\",\"target\":\"_blank\",\"className\":\"inline-flex items-center gap-2 text-sm font-black text-primary hover:text-primary/80 transition-colors group/link\",\"children\":[[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-globe w-4 h-4\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"circle\",\"1mglay\",{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],[\"$\",\"path\",\"13o1zl\",{\"d\":\"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20\"}],[\"$\",\"path\",\"9i4pu4\",{\"d\":\"M2 12h20\"}],\"$undefined\"]}],\"Webseite besuchen\",[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-external-link w-3 h-3 group-hover/link:translate-x-0.5 group-hover/link:-translate-y-0.5 transition-transform\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"1q9fwt\",{\"d\":\"M15 3h6v6\"}],[\"$\",\"path\",\"gplh6r\",{\"d\":\"M10 14 21 3\"}],[\"$\",\"path\",\"a6xqqp\",{\"d\":\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"}],\"$undefined\"]}]]}]]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"2a:[\"$\",\"$L3a\",null,{\"posts\":[{\"id\":29,\"title\":\"SEO für Entwickler: Warum Code das neue Marketing ist (Der Guide)\",\"slug\":\"seo-fuer-entwickler-ultimativer-guide\",\"image\":\"https://api.webinteger.dev/storage/media/seo-fuer-entwickler-hub-code-suchmaschine-verbindung.png\",\"published_at\":\"2026-01-25T00:21:00.000000Z\",\"category_id\":3,\"category\":{\"id\":3,\"name\":\"SEO für Entwickler\",\"slug\":\"seo-fuer-entwickler\",\"color\":null},\"featured_image\":{\"id\":112,\"folder_id\":9,\"disk\":\"public\",\"directory\":\"media\",\"visibility\":\"public\",\"name\":\"seo-fuer-entwickler-hub-code-suchmaschine-verbindung\",\"path\":\"media/seo-fuer-entwickler-hub-code-suchmaschine-verbindung.png\",\"width\":1536,\"height\":1024,\"size\":2198681,\"type\":\"image/png\",\"ext\":\"png\",\"alt\":\"Fotorealistische Darstellung einer Datenbrücke, die einen Code-Editor mit einer Suchmaschine verbindet.\",\"title\":\"SEO für Entwickler: Die Verbindung von Code und Suche.\",\"description\":null,\"caption\":null,\"exif\":null,\"curations\":null,\"created_at\":\"2026-01-24T13:34:04.000000Z\",\"updated_at\":\"2026-01-24T13:35:03.000000Z\",\"tenant_id\":null,\"url\":\"https://api.webinteger.dev/storage/media/seo-fuer-entwickler-hub-code-suchmaschine-verbindung.png\",\"thumbnail_url\":\"/curator/media/seo-fuer-entwickler-hub-code-suchmaschine-verbindung.png?w=200\u0026h=200\u0026fit=crop\u0026fm=webp\u0026s=a0238e9be1e99bd6389f44e57d9eba9f\",\"medium_url\":\"/curator/media/seo-fuer-entwickler-hub-code-suchmaschine-verbindung.png?w=640\u0026h=640\u0026fit=crop\u0026fm=webp\u0026s=88f5a994a6d2fa1b7a863e1880294471\",\"large_url\":\"/curator/media/seo-fuer-entwickler-hub-code-suchmaschine-verbindung.png?w=1024\u0026h=1024\u0026fit=contain\u0026fm=webp\u0026s=ee457ab7bbe727542870cc7aad3508e4\",\"resizable\":true,\"size_for_humans\":\"2.1 MiB\",\"pretty_name\":\"SEO für Entwickler: Die Verbindung von Code und Suche.\"}},{\"id\":21,\"title\":\"Core Web Vitals einfach erklärt: Was Entwickler und Kunden wissen müssen\",\"slug\":\"core-web-vitals-einfach-erklaert\",\"image\":\"https://api.webinteger.dev/storage/media/core-web-vitals-erklaert-monitor.png\",\"published_at\":\"2026-01-17T14:20:00.000000Z\",\"category_id\":2,\"category\":{\"id\":2,\"name\":\"Web Performance \u0026 Optimierung\",\"slug\":\"web-performance\",\"color\":null},\"featured_image\":{\"id\":42,\"folder_id\":7,\"disk\":\"public\",\"directory\":\"media\",\"visibility\":\"public\",\"name\":\"core-web-vitals-erklaert-monitor\",\"path\":\"media/core-web-vitals-erklaert-monitor.png\",\"width\":1536,\"height\":1024,\"size\":2515101,\"type\":\"image/png\",\"ext\":\"png\",\"alt\":\"Medizinischer High-Tech-Monitor in einem Serverraum zeigt die Kurven für LCP, INP und CLS an.\",\"title\":\"Core Web Vitals: Der Gesundheitscheck für Ihre Website.\",\"description\":null,\"caption\":null,\"exif\":null,\"curations\":null,\"created_at\":\"2026-01-17T08:35:39.000000Z\",\"updated_at\":\"2026-01-17T08:40:23.000000Z\",\"tenant_id\":null,\"url\":\"https://api.webinteger.dev/storage/media/core-web-vitals-erklaert-monitor.png\",\"thumbnail_url\":\"/curator/media/core-web-vitals-erklaert-monitor.png?w=200\u0026h=200\u0026fit=crop\u0026fm=webp\u0026s=810bd10228bdaadd5dc231535becb8fa\",\"medium_url\":\"/curator/media/core-web-vitals-erklaert-monitor.png?w=640\u0026h=640\u0026fit=crop\u0026fm=webp\u0026s=ef8fcf393ba52ba47aae7e1e9728d00b\",\"large_url\":\"/curator/media/core-web-vitals-erklaert-monitor.png?w=1024\u0026h=1024\u0026fit=contain\u0026fm=webp\u0026s=8842db03c9f1005e2da7e237027b5dc9\",\"resizable\":true,\"size_for_humans\":\"2.4 MiB\",\"pretty_name\":\"Core Web Vitals: Der Gesundheitscheck für Ihre Website.\"}},{\"id\":19,\"title\":\"Website Performance Masterclass: Der ultimative Guide zur blitzschnellen Seite\",\"slug\":\"website-performance-optimieren-masterclass\",\"image\":\"https://api.webinteger.dev/storage/media/website-performance-optimieren-masterclass-engine.png\",\"published_at\":\"2026-01-17T13:18:00.000000Z\",\"category_id\":2,\"category\":{\"id\":2,\"name\":\"Web Performance \u0026 Optimierung\",\"slug\":\"web-performance\",\"color\":null},\"featured_image\":{\"id\":44,\"folder_id\":7,\"disk\":\"public\",\"directory\":\"media\",\"visibility\":\"public\",\"name\":\"website-performance-optimieren-masterclass-engine\",\"path\":\"media/website-performance-optimieren-masterclass-engine.png\",\"width\":1536,\"height\":1024,\"size\":2733407,\"type\":\"image/png\",\"ext\":\"png\",\"alt\":\"Futuristische 3D-Illustration eines leuchtenden Hochleistungsmotors, in den Datenströme fließen.\",\"title\":\"Website Performance Masterclass: Der Motor Ihres digitalen Erfolgs\",\"description\":null,\"caption\":null,\"exif\":null,\"curations\":null,\"created_at\":\"2026-01-17T08:35:39.000000Z\",\"updated_at\":\"2026-01-17T08:39:39.000000Z\",\"tenant_id\":null,\"url\":\"https://api.webinteger.dev/storage/media/website-performance-optimieren-masterclass-engine.png\",\"thumbnail_url\":\"/curator/media/website-performance-optimieren-masterclass-engine.png?w=200\u0026h=200\u0026fit=crop\u0026fm=webp\u0026s=751b5214afef6adfca8ccef34b78fda3\",\"medium_url\":\"/curator/media/website-performance-optimieren-masterclass-engine.png?w=640\u0026h=640\u0026fit=crop\u0026fm=webp\u0026s=bf465bbb20366f84ec5f3f4ac1665a1a\",\"large_url\":\"/curator/media/website-performance-optimieren-masterclass-engine.png?w=1024\u0026h=1024\u0026fit=contain\u0026fm=webp\u0026s=ecf2b592b930a5fb3cb55f1d3d56ff11\",\"resizable\":true,\"size_for_humans\":\"2.6 MiB\",\"pretty_name\":\"Website Performance Masterclass: Der Motor Ihres digitalen Erfolgs\"}},{\"id\":30,\"title\":\"SEO für Entwickler: Was im Code wirklich wichtig ist\",\"slug\":\"seo-fuer-entwickler-basics-code-struktur\",\"image\":\"https://api.webinteger.dev/storage/media/technische-seo-basics-html-struktur-statuscodes.png\",\"published_at\":\"2026-01-25T00:33:00.000000Z\",\"category_id\":3,\"category\":{\"id\":3,\"name\":\"SEO für Entwickler\",\"slug\":\"seo-fuer-entwickler\",\"color\":null},\"featured_image\":{\"id\":113,\"folder_id\":9,\"disk\":\"public\",\"directory\":\"media\",\"visibility\":\"public\",\"name\":\"technische-seo-basics-html-struktur-statuscodes\",\"path\":\"media/technische-seo-basics-html-struktur-statuscodes.png\",\"width\":1536,\"height\":1024,\"size\":2342198,\"type\":\"image/png\",\"ext\":\"png\",\"alt\":\"Ein leuchtendes Fundament aus HTML5-Blöcken vor einem Server-Rack mit einem grünen 200 OK Statuslicht.\",\"title\":\"Technische SEO Basics: Sauberes HTML und korrekte Statuscodes.\",\"description\":null,\"caption\":null,\"exif\":null,\"curations\":null,\"created_at\":\"2026-01-24T18:39:19.000000Z\",\"updated_at\":\"2026-01-24T18:39:44.000000Z\",\"tenant_id\":null,\"url\":\"https://api.webinteger.dev/storage/media/technische-seo-basics-html-struktur-statuscodes.png\",\"thumbnail_url\":\"/curator/media/technische-seo-basics-html-struktur-statuscodes.png?w=200\u0026h=200\u0026fit=crop\u0026fm=webp\u0026s=e6f79b6be61b9e428b61b39bed4122fd\",\"medium_url\":\"/curator/media/technische-seo-basics-html-struktur-statuscodes.png?w=640\u0026h=640\u0026fit=crop\u0026fm=webp\u0026s=769408a026260140c896b103d798d075\",\"large_url\":\"/curator/media/technische-seo-basics-html-struktur-statuscodes.png?w=1024\u0026h=1024\u0026fit=contain\u0026fm=webp\u0026s=597078ed55849d087274fb753fb9fabb\",\"resizable\":true,\"size_for_humans\":\"2.2 MiB\",\"pretty_name\":\"Technische SEO Basics: Sauberes HTML und korrekte Statuscodes.\"}}]}]\n"])</script><script>self.__next_f.push([1,"2b:[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 md:grid-cols-2 gap-6 mt-12 pt-8 border-t border-gray-100\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-col items-start\",\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog/seo-fuer-entwickler-duplicate-content-pagination-filter\",\"className\":\"group w-full bg-gray-50 hover:bg-white border border-transparent hover:border-gray-100 p-6 rounded-xl transition-all hover:shadow-lg\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center text-xs font-bold uppercase text-gray-400 mb-2 group-hover:text-primary transition-colors\",\"children\":[[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-arrow-left w-3 h-3 mr-2\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"1l729n\",{\"d\":\"m12 19-7-7 7-7\"}],[\"$\",\"path\",\"x3x0zl\",{\"d\":\"M19 12H5\"}],\"$undefined\"]}],\" \",\"Vorheriges Kapitel\"]}],[\"$\",\"h4\",null,{\"className\":\"font-heading font-bold text-gray-900 text-lg line-clamp-2\",\"children\":\"Duplicate Content vermeiden: Pagination, Filter \u0026 URL-Parameter\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col items-end\",\"children\":[\"$\",\"$L1d\",null,{\"href\":\"/blog/strukturierte-daten-seo-schema-org-guide\",\"className\":\"group w-full bg-gray-50 hover:bg-white border border-transparent hover:border-gray-100 p-6 rounded-xl transition-all hover:shadow-lg text-right\",\"children\":[[\"$\",\"span\",null,{\"className\":\"flex items-center justify-end text-xs font-bold uppercase text-gray-400 mb-2 group-hover:text-primary transition-colors\",\"children\":[\"Nächstes Kapitel\",\" \",[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-arrow-right w-3 h-3 ml-2\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"path\",\"1ays0h\",{\"d\":\"M5 12h14\"}],[\"$\",\"path\",\"xquz4c\",{\"d\":\"m12 5 7 7-7 7\"}],\"$undefined\"]}]]}],[\"$\",\"h4\",null,{\"className\":\"font-heading font-bold text-gray-900 text-lg line-clamp-2\",\"children\":\"Strukturierte Daten SEO: Sinnvoller Code oder Overkill?\"}]]}]}]]}]\n"])</script><script>self.__next_f.push([1,"2c:[\"$\",\"div\",null,{\"className\":\"mt-12 bg-white px-4 py-8 sm:p-12 rounded-lg shadow-lg border border-gray-100/50\",\"children\":[false,[\"$\",\"$L3b\",null,{\"slug\":\"technische-seo-fehler-spa-web-apps\",\"initialCount\":0}]]}]\n2d:[\"$\",\"aside\",null,{\"className\":\"hidden lg:block lg:col-span-4 relative h-full\",\"children\":[\"$\",\"div\",null,{\"className\":\"sticky top-24 space-y-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"bg-white p-6 rounded-lg shadow-sm border border-gray-100\",\"children\":[\"$\",\"$L3c\",null,{\"items\":\"$18:props:children:props:children:2:props:children:0:props:children:0:props:children:0:props:post:table_of_contents\"}]}]}]}]\n"])</script><script>self.__next_f.push([1,"32:[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"h4\",null,{\"className\":\"text-base font-bold transition-colors text-gray-700 group-hover/item:text-gray-900\",\"children\":[\"JavaScript SEO: Was Googlebot wirklich rendern kann\",\" \",false]}]}]\n33:[\"$\",\"$L1d\",\"32\",{\"href\":\"/blog/seo-fuer-entwickler-duplicate-content-pagination-filter\",\"className\":\"group/item flex items-center gap-4 p-4 rounded-lg transition-all hover:bg-gray-50 hover:border-gray-100 border border-transparent\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex-shrink-0\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-8 h-8 rounded-full bg-green-100 text-green-600 flex items-center justify-center\",\"children\":[\"$\",\"svg\",null,{\"ref\":\"$undefined\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"strokeWidth\":2,\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"className\":\"lucide lucide-circle-check w-5 h-5\",\"aria-hidden\":\"true\",\"children\":[[\"$\",\"circle\",\"1mglay\",{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}],[\"$\",\"path\",\"dzmm74\",{\"d\":\"m9 12 2 2 4-4\"}],\"$undefined\"]}]}]}],[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"h4\",null,{\"className\":\"text-base font-bold transition-colors text-gray-700 group-hover/item:text-gray-900\",\"children\":[\"Duplicate Content vermeiden: Pagination, Filter \u0026 URL-Parameter\",\" \",false]}]}],false]}]\n34:[\"$\",\"$L1d\",\"33\",{\"href\":\"/blog/technische-seo-fehler-spa-web-apps\",\"className\":\"group/item flex items-center gap-4 p-4 rounded-lg transition-all bg-primary/5 border border-primary/10 shadow-sm\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex-shrink-0\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-8 h-8 rounded-full bg-primary text-white flex items-center justify-center font-bold text-sm shadow-md shadow-primary/20\",\"children\":4}]}],[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"h4\",null,{\"className\":\"text-base font-bold transition-colors text-primary\",\"children\":[\"Technische SEO Fehler bei modernen Web-Apps (SPAs)\",\" \",false]}]}],[\"$\",\"div\",null,{\"className\":\"flex-shrink-0\",\"children\":[\"$\",\"span\",null,{\"className\":\"text-xs font-bold uppercase tracking-wider text-primary bg-primary/10 px-2 py-1 rounded\",\"children\":\"Aktuell\"}]}]]}]\n35:[\"$\",\"$L1d\",\"35\",{\"href\":\"/blog/strukturierte-daten-seo-schema-org-guide\",\"className\":\"group/item flex items-center gap-4 p-4 rounded-lg transition-all hover:bg-gray-50 hover:border-gray-100 border border-transparent\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex-shrink-0\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-8 h-8 rounded-full bg-gray-100 text-gray-500 flex items-center justify-center font-medium text-sm group-hover/item:bg-gray-200 transition-colors\",\"children\":5}]}],[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"h4\",null,{\"className\":\"text-base font-bold transition-colors text-gray-700 group-hover/item:text-gray-900\",\"children\":[\"Strukturierte Daten SEO: Sinnvoller Code oder Overkill?\",\" \",false]}]}],false]}]\n36:[\"$\",\"$L1d\",\"36\",{\"href\":\"/blog/technisches-seo-audit-qa-checklist-ci-cd\",\"className\":\"group/item flex items-center gap-4 p-4 rounded-lg transition-all hover:bg-gray-50 hover:border-gray-100 border border-transparent\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex-shrink-0\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-8 h-8 rounded-full bg-gray-100 text-gray-500 flex items-center justify-center font-medium text-sm group-hover/item:bg-gray-200 transition-colors\",\"children\":6}]}],[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"h4\",null,{\"className\":\"text-base font-bold transition-colors text-gray-700 group-hover/item:text-gray-900\",\"children\":[\"Technisches SEO Audit: Die QA-Checkliste für Entwickler\",\" \",false]}]}],false]}]\n37:[\"$\",\"$L1d\",\"37\",{\"href\":\"/blog/seo-quick-wins-entwickler-hacks\",\"className\":\"group/item flex items-center gap-4 p-4 rounded-lg transition-all hover:bg-gray-50 hover:border-gray-100 border border-transparent\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex-shrink-0\",\"children\":[\"$\",\"div\",null,{\"className\":\"w-8 h-8 rounded-full bg-gray-100 text-gray-500 flex items-center justify-center font-medium tex"])</script><script>self.__next_f.push([1,"t-sm group-hover/item:bg-gray-200 transition-colors\",\"children\":7}]}],[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"h4\",null,{\"className\":\"text-base font-bold transition-colors text-gray-700 group-hover/item:text-gray-900\",\"children\":[\"SEO Quick Wins für Entwickler: Der Turbo-Boost\",\" \",false]}]}],false]}]\n"])</script></body></html>