Programmatic SEO: Wie wir 253K Seiten mit Next.js & Supabase indexiert haben
Programmatic SEO: 253K Seiten indexiert mit Next.js & Supabase
Letztes Jahr haben wir einen Meilenstein erreicht, den ich ehrlich gesagt nicht für möglich hielt: 253.000 programmatisch generierte Seiten indexiert über drei Production-Sites, alle auf demselben Stack. Kein Spielzeugprojekt. Keine Demo. Echte Sites mit echtem Traffic und echtem Revenue.
Ich werde dir genau zeigen, wie wir Deluxe Astrology (91.000 Seiten), Not Another Sunday (137.000 Venue Listings) und HostList (25.000 Hosting-Company-Profile) gebaut haben – einschließlich der Supabase Queries, der Next.js Page-Architektur, der Data Pipelines und vor allem, was alles kaputt gegangen ist. Denn es ist viel kaputt gegangen.
Der meiste Online-Content zu Programmatic SEO liest sich, als würde jemand die Docs überflogen haben und gut ist. Das ist nicht so. Wir versenden diese Seiten seit über einem Jahr, starren auf Google Search Console Graphen, fluchen über Crawl-Budget-Limits und haben langsam herausgefunden, was in großem Maßstab wirklich funktioniert.
Inhaltsverzeichnis
- Was Programmatic SEO 2025 wirklich bedeutet
- Die drei Projekte: Production-Zahlen
- Der Stack: Supabase, Next.js ISR, Vercel Edge
- Data Pipeline Architektur
- Page Template Architektur, die Google nicht hasst
- Echter Code: Von der Supabase Query zur gerenderten Seite
- Was kaputtging und wie wir es fixten
- Ergebnisse: Die Hockey-Stick-Kurve und ehrliche Fehlschläge
- Programmatic SEO vs. traditioneller Content: Wann welcher nutzen?
- Häufig gestellte Fragen

Was Programmatic SEO 2025 wirklich bedeutet
Programmatic SEO ist die Generierung von Seiten in großem Maßstab aus strukturierten Daten mithilfe von Templates. Das ist die Ein-Satz-Version. Die Realität ist viel chaotischer.
Googles Position 2025 ist klar, aber nuanciert: Sie bestrafen programmatischen Content nicht, weil er programmatisch ist. Sie bestrafen ihn, wenn er dünn, dupliziert oder unhilfreich ist. Der Unterschied zwischen Zapiers 70.000 indizierten Seiten, die zu $140M ARR beitragen, und einem dev.to Case Study, in dem 287.000 Seiten fast null organische Indexation bekamen, kommt auf eine Sache an – ob jede Seite wirklich eine Anfrage beantwortet, die ein Mensch in die Suchleiste tippt.
Ahrefs-Daten zeigen uns, dass 96,55% aller Webseiten null organischen Traffic bekommen. Programmatic SEO verschärft dieses Problem, wenn du nur Variationen desselben Contents spinnst. Aber es kann es auch spektakulär lösen, wenn deine Daten wirklich einzigartig sind und deine Templates Seiten produzieren, die sinnvoll voneinander unterscheiden.
Hier ist das mentale Modell, das für uns funktioniert: Jede programmatische Seite sollte den „würde ich das bookmarken?"-Test bestehen. Wenn du sie von Google aus landest – würdest du bleiben? Würdest du etwas finden, das du nirgends sonst findest? Wenn die Antwort nein ist, veröffentliche es nicht.
Die drei Projekte: Production-Zahlen
Lass mich aufschlüsseln, was wir wirklich gebaut haben und wie die Zahlen aussehen.
| Projekt | Seiten | Content-Typen | Geografischer Umfang | Schlüsselmetrik |
|---|---|---|---|---|
| Deluxe Astrology | 91.000 | Horoskope, Celebrity-Profile, Engel-Nummern, Kosmische Münzen, Edelsteine, Yoga-Posen, Name Lab, Astrologen-Verzeichnis | 30 Sprachen | 91K indexierte Seiten |
| Not Another Sunday | 137.000 | Café & Roaster Venue-Listings mit NRI-Score, Fotos, Karten | USA, UK, Japan | 137K einzigartige Venue-Seiten |
| HostList | 25.000 | Hosting-Company-Profile mit HostScore-Algorithmus | 53 Länder | 25K indexierte Profile |
| Gesamt | 253.000 |
Deluxe Astrology: 91K Seiten über 30 Sprachen
Deluxe Astrology begann als eine einglesprachige Horoskop-Site. Der Scale kam aus der Schnittmenge von Content-Typen und Sprachen. Denk drüber nach: 12 Zodiac-Zeichen × 365 tägliche Horoskope × 30 Sprachen sind bereits 131.000 potenzielle Seiten von nur einem Content-Typ. Wir waren selektiv – nicht jede Kombination bekommt eine Seite – aber die kombinatorische Natur von Astrologieinhalten ist perfekt für pSEO.
Nur die Celebrity-Profiles-Section hat 28.840 Records, jede angereichert via Claude mit Natal-Chart-Analyse, Persönlichkeits-Breakdowns und Kompatibilitäts-Insights. Mehr über diese Data Pipeline später.
Not Another Sunday: 137K Venue-Listings
Not Another Sunday ist eine Specialty-Coffee-Discovery-Plattform. Jedes Café und jeder Roaster bekommt eine einzigartige Seite mit einem proprietären NRI-Score (Neighbourhood Relevance Index), kuratierten Fotos, einer eingebetteten Karte, Öffnungszeiten und Bewertungen. Wir ziehen Daten von mehreren APIs, nutzergeneriertem Content und manueller Kuratierung.
Der Schlüssel-Insight: Keine zwei Venue-Seiten sehen gleich aus, weil keine zwei Venues gleich sind. Das Template ist konsistent, aber die Daten füllen es jedes Mal anders. Ein Café in Shibuya mit 4,8 NRI und Latte-Art-Wettbewerben sieht völlig anders aus als ein Roaster in Brooklyn mit 3,2 NRI und Wholesale-Only-Betrieb.
HostList: 25K Hosting-Profile über 53 Länder
HostList katalogisiert Hosting-Unternehmen weltweit, jedes mit einem HostScore – unserem algorithmischen Rating basierend auf Uptime-Daten, Preisgestaltung, Support-Responsivität und Nutzerbewertungen. 25.000 Profile über 53 Länder, jedes mit einzigartigen Performance-Daten, Preistabellen und Vergleichs-Widgets.
Der Stack: Supabase, Next.js ISR, Vercel Edge
Wir standardisierten auf demselben Stack über alle drei Projekte. Hier ist, warum jeder Teil wichtig ist.
Supabase (PostgreSQL + pgvector): Unsere gesamte Data Layer lebt in Supabase. PostgreSQL gibt uns die relationale Struktur, die wir für komplexe Queries brauchen (gib mir alle Schütze-Celebrities, die im Dezember geboren sind und auch Musiker sind), und pgvector powered semantische Suche über Content. Supabase's Free Tier verwaltet 500MB; wir sind bei Pro für $25/Monat pro Projekt für 8GB Datenbanken mit unbegrenzten API-Calls.
Next.js mit ISR (Incremental Static Regeneration): Jede Seite wird beim Build statisch generiert oder beim ersten Request, dann auf einem Zeitplan revalidiert. Das bedeutet, Googles Crawler trifft immer auf eine schnelle, vorgerenderete HTML-Seite – nicht auf einen Loading Spinner, der auf clientseitiges JavaScript wartet. Wir verwenden den App Router mit generateStaticParams für Path-Generierung.
Vercel Edge: Deployment, CDN und Edge Middleware alle in einem. Vercels Pro Plan bei $20/Benutzer/Monat gibt uns 1TB Bandbreite, was den Traffic von 253K Seiten komfortabel handhabt. Edge Middleware handhabt Geo-Routing für Deluxe Astrologys 30-Sprachen-Setup.
Die totalen Infrastruktur-Kosten für alle drei Projekte laufen bei etwa $150–200/Monat. Das ist Hosting von 253.000 Seiten, die Millionen monatlicher Crawls bekommen. Wenn du programmatische Sites baust und unsere Next.js-Entwicklungskapazitäten in Betracht ziehst oder Hilfe mit Headless-CMS-Architektur brauchst, das ist der Stack, den wir empfehlen würden.

Data Pipeline Architektur
Die Daten sind das, was Programmatic SEO macht oder bricht. Templates sind einfach. Wirklich einzigartige, hochwertige Daten für zehntausende Seiten zu bekommen? Das ist der schwierige Teil.
Wir verwenden vier Datenquellen-Typen über unsere Projekte:
1. API Scraping
Not Another Sunday zieht Venue-Daten von Google Places API, Yelp Fusion API und einer Handvoll regionaler APIs für Japan. Wir führen nächtliche Sync-Jobs über Supabase Edge Functions aus, die nach neuen Venues, aktualisierten Stunden und geschlossenen Locations checken. Jede API-Response wird normalisiert in unser Schema vor dem Einfügen.
2. CSV Import mit Validierung
HostLists initialer Datensatz kam aus einem massiven CSV von Hosting-Unternehmen, das über zwei Jahre zusammengestellt wurde. Wir bauten eine Validierungs-Pipeline, die auf Duplikate prüft, Unternehmensnamen normalisiert und unvollständige Records flaggt. Etwa 30% des initialen Imports wurden geflaggt und erforderten manuelle Überprüfung.
3. Claude AI Anreicherung
Hier wird es interessant. Für Deluxe Astrology hatten wir 28.840 Celebrity-Records mit grundlegenden biografischen Daten – Name, Geburtstag, Geburtsort. Das reicht nicht für eine nützliche Seite aus. Wir nutzten Claude (Anthropics API) um jedes Record mit Natal-Chart-Interpretation, Persönlichkeits-Analyse, Karriere-Kompatibilitäts-Insights und Fun Facts anzureichern.
Der Schlüssel: Wir nutzten Claude nicht, um Content aus dem Nichts zu generieren. Wir nutzten ihn, um echte astronomische Daten zu analysieren und zu interpretieren. Jedes Celebrity's Natal Chart wird mathematisch aus ihren Geburtsdaten berechnet, dann bietet Claude die astrologische Interpretation. Die zugrunde liegenden Daten sind einzigartig und verifizierbar. Die KI-Schicht adds Tiefe, nicht Fabrikation.
Hier ist eine vereinfachte Version unserer Anreicherungs-Pipeline:
import anthropic
from supabase import create_client
client = anthropic.Anthropic()
supabase = create_client(SUPABASE_URL, SUPABASE_KEY)
def enrich_celebrity(record):
natal_chart = calculate_natal_chart(
birth_date=record['birth_date'],
birth_place=record['birth_place']
)
prompt = f"""Given this natal chart data for {record['name']}:
Sun: {natal_chart['sun_sign']} in {natal_chart['sun_house']}
Moon: {natal_chart['moon_sign']} in {natal_chart['moon_house']}
Rising: {natal_chart['ascendant']}
Write a 300-word astrological personality profile focusing on
how these placements manifest in their career as a {record['profession']}.
Include specific aspect interpretations."""
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}]
)
supabase.table('celebrities').update({
'natal_chart': natal_chart,
'ai_profile': response.content[0].text,
'enriched_at': 'now()'
}).eq('id', record['id']).execute()
Wir verarbeiteten alle 28.840 Records über etwa eine Woche, batching Requests um in Rate Limits zu bleiben. Die Kosten lagen bei etwa $180 in API Credits. Nicht schlecht für die Anreicherung von fast 29K Seiten mit einzigartigen Content.
4. User-Generated Content
Not Another Sunday akzeptiert Bewertungen und Foto-Submissions von Benutzern. Dieser UGC macht Seiten zunehmend einzigartig über die Zeit und signalisiert Google, dass der Content frisch und community-driven ist.
Page Template Architektur, die Google nicht hasst
Hier ist, wo die meisten Programmatic-SEO-Projekte fehlschlagen. Sie erstellen ein Template wie:
<h1>{City} {Service} Directory</h1>
<p>Looking for {service} in {city}? Browse our directory of {count} providers.</p>
Das ist dünner Content. Google weiß es. Nutzer wissen es. Mach das nicht.
Unsere Template-Architektur stellt sicher, dass jede Seite fünf einzigartige Elemente hat:
Einzigartiges H1: Nicht nur
{name}in ein Pattern eingefügt. Die H1-Struktur variiert nach Content-Typ und enthält kontextuelle Modifikatoren.Einzigartige Meta Description: Generiert von den echten Seiten-Daten, nicht ein Template mit gefüllten Lücken.
Einzigartiger Body Content: Das ist das Große. Jede Seite hat 400-2.000 Wörter Content, der spezifisch für diese Entität ist. Für Celebrities ist es ihre Natal-Chart-Analyse. Für Venues ist es ihre NRI-Breakdown, Nachbarschafts-Kontext und Menu-Highlights. Für Hosting-Unternehmen ist es ihre HostScore-Breakdown mit spezifischen Uptime-Prozentanteilen und Preisgestaltung.
Strukturierte Daten (schema.org): Jede Seite bekommt JSON-LD Markup geeignet für ihren Typ –
Personfür Celebrities,LocalBusinessfür Venues,Organizationfür Hosting-Unternehmen.Interne Verlinkung: Jede Seite verlinkt auf 5-15 verwandte Seiten basierend auf echten Daten-Beziehungen. Eine Celebrity-Seite verlinkt zu anderen Celebrities mit demselben Sun Sign, derselben Profession oder demselben Geburtstag. Eine Venue-Seite verlinkt zu nahegelegenen Venues und Venues mit ähnlichen NRI-Scores.
Das interne Verlinkungs-Piece stellte sich als der einzeln wichtigste Faktor für Indexation heraus. Mehr dazu im Fixes-Abschnitt.
Echter Code: Von der Supabase Query zur gerenderten Seite
Lass mich dir den echten Ablauf für eine Not Another Sunday Venue-Seite zeigen. Das ist Production-Code, leicht vereinfacht für Lesbarkeit.
Zuerst, die Supabase Query-Schicht:
// lib/queries/venues.ts
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.SUPABASE_SERVICE_ROLE_KEY!
)
export async function getVenueBySlug(slug: string) {
const { data, error } = await supabase
.from('venues')
.select(`
id, name, slug, description, nri_score,
address, city, country, lat, lng,
opening_hours, photos, menu_highlights,
created_at, updated_at,
venue_reviews (
id, rating, body, author_name, created_at
),
venue_tags (
tag:tags ( name, slug )
)
`)
.eq('slug', slug)
.eq('status', 'published')
.single()
if (error) throw error
return data
}
export async function getRelatedVenues(venueId: string, city: string, nriScore: number) {
const { data } = await supabase
.rpc('get_related_venues', {
p_venue_id: venueId,
p_city: city,
p_nri_score: nriScore,
p_limit: 12
})
return data ?? []
}
Die get_related_venues Funktion ist eine PostgreSQL Funktion in Supabase, die nahegelegene Venues sortiert nach NRI Score Nähe zurückgibt:
CREATE OR REPLACE FUNCTION get_related_venues(
p_venue_id UUID,
p_city TEXT,
p_nri_score NUMERIC,
p_limit INT DEFAULT 12
)
RETURNS TABLE (
id UUID, name TEXT, slug TEXT,
nri_score NUMERIC, city TEXT, country TEXT
) AS $$
BEGIN
RETURN QUERY
SELECT v.id, v.name, v.slug, v.nri_score, v.city, v.country
FROM venues v
WHERE v.id != p_venue_id
AND v.status = 'published'
AND v.city = p_city
ORDER BY ABS(v.nri_score - p_nri_score) ASC
LIMIT p_limit;
END;
$$ LANGUAGE plpgsql;
Jetzt die Next.js Page-Komponente mit App Router:
// app/venues/[country]/[city]/[slug]/page.tsx
import { getVenueBySlug, getRelatedVenues } from '@/lib/queries/venues'
import { VenueHeader } from '@/components/venue/VenueHeader'
import { NRIScoreCard } from '@/components/venue/NRIScoreCard'
import { VenueMap } from '@/components/venue/VenueMap'
import { ReviewSection } from '@/components/venue/ReviewSection'
import { RelatedVenues } from '@/components/venue/RelatedVenues'
import { venueJsonLd } from '@/lib/schema/venue'
import { notFound } from 'next/navigation'
export const revalidate = 3600 // ISR: revalidate every hour
export async function generateMetadata({ params }: Props) {
const venue = await getVenueBySlug(params.slug)
if (!venue) return {}
const reviewCount = venue.venue_reviews?.length ?? 0
const avgRating = reviewCount > 0
? (venue.venue_reviews.reduce((sum, r) => sum + r.rating, 0) / reviewCount).toFixed(1)
: null
return {
title: `${venue.name} -- Specialty Coffee in ${venue.city} | NRI ${venue.nri_score}`,
description: avgRating
? `${venue.name} in ${venue.city} scores ${venue.nri_score}/10 NRI. Rated ${avgRating}/5 from ${reviewCount} reviews. ${venue.description?.slice(0, 80)}...`
: `${venue.name} in ${venue.city} scores ${venue.nri_score}/10 on our Neighbourhood Relevance Index. ${venue.description?.slice(0, 100)}...`,
alternates: {
canonical: `/venues/${params.country}/${params.city}/${params.slug}`
}
}
}
export default async function VenuePage({ params }: Props) {
const venue = await getVenueBySlug(params.slug)
if (!venue) notFound()
const related = await getRelatedVenues(venue.id, venue.city, venue.nri_score)
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(venueJsonLd(venue)) }}
/>
<article>
<VenueHeader venue={venue} />
<NRIScoreCard score={venue.nri_score} breakdown={venue.nri_breakdown} />
<VenueMap lat={venue.lat} lng={venue.lng} />
<section className="venue-body">
<h2>About {venue.name}</h2>
<p>{venue.description}</p>
{venue.menu_highlights && (
<>
<h3>Menu Highlights</h3>
<ul>
{venue.menu_highlights.map(item => (
<li key={item}>{item}</li>
))}
</ul>
</>
)}
</section>
<ReviewSection reviews={venue.venue_reviews} />
<RelatedVenues venues={related} currentCity={venue.city} />
</article>
</>
)
}
Bemerke revalidate = 3600. Das ist ISR – die Seite wird beim ersten Request statisch generiert und für eine Stunde gecacht. Googles Crawler bekommt immer schnelles HTML. Frische Daten fließen im nächsten Revalidations-Zyklus ein. Das ist enormwichtig für Crawl Budget.
Was kaputtging und wie wir es fixten
Hier ist, wo die meisten Case Studies unehrlich werden. Sie zeigen die Ergebnisse ohne die Monate des Debuggings. Wir hatten drei Hauptprobleme.
Problem 1: Deluxe Astrology – Crawl Budget Verhungerung
Wir starteten mit 91.000 Seiten und einer flachen Sitemap-Struktur. Google indexierte etwa 12.000 Seiten im ersten Monat und dann... stoppte. Der GSC Coverage Report zeigte "Discovered -- currently not indexed" für zehntausende URLs.
Das Problem war zweifach. Erstens war unsere Sitemap eine einzelne Datei mit 91.000 URLs. Google empfiehlt max 50.000 pro Sitemap, aber auch innerhalb dieses Limits signalisiert eine einzelne massive Sitemap keine Priorität. Zweitens war unsere interne Verlinkung schwach – viele Seiten waren nur über die Sitemap erreichbar, nicht über On-Page-Links.
Der Fix:
Sitemap Umstrukturierung: Wir zerlegten die monolithische Sitemap in kategorie-basierte Sitemaps.
sitemap-celebrities.xml,sitemap-horoscopes-en.xml,sitemap-horoscopes-es.xml, etc. Jede unter 10.000 URLs.Interne Verlinkung Überhaul: Wir fügten kontextuelle Cross-Links auf jeder Seite hinzu. Celebrity-Seiten verlinken nun zu verwandten Celebrities (gleiches Zodiac, gleiche Profession, gleiches Geburtstag). Horoskop-Seiten verlinken zu den Celebrity-Profilen für dieses Zeichen. Jede Seite verbindet mit mindestens 8 anderen Seiten.
Dünne Seiten-Entfernung: Wir töteten etwa 4.000 Seiten, die weniger als 200 Wörter einzigartigen Content hatten. Das waren meist auto-generierte Kombinations-Seiten, die keinen Wert hinzufügten. Weniger Seiten, aber höhere Qualität.
Nach diesen Änderungen stieg die Indexation von 12K zu 91K über etwa 10 Wochen. Die interne Verlinkung war der größte Hebel.
Problem 2: HostList – ISR Fehlkonfiguration
HostList startete mit export const dynamic = 'force-dynamic' auf jeder Seite. Das bedeutete, dass jede einzelne Request – einschließlich jedes Googlebot-Crawls – Supabase in Echtzeit traf. Mit Google, das tausende Seiten pro Tag crawlte, wurde unsere Supabase-Instanz gehämmert, Response-Zeiten spiked und einige Seiten timed out während Crawls.
Der Fix: Wir wechselten zu export const revalidate = 3600. Seiten werden statisch gecacht und servieren in unter 100ms. Supabase wird nur einmal pro Stunde pro Seite hit statt einmal pro Request. Unsere p95 Response-Zeit fiel von 2,8 Sekunden auf 47 Millisekunden. Googlebot begann, 3x mehr Seiten pro Tag zu crawlen, weil es nicht herumwarten musste.
Problem 3: Not Another Sunday – Duplizierter Content über Länder
Einige Café-Ketten operieren in mehreren Ländern. Starbucks Reserve in Tokyo und Starbucks Reserve in London hatten anfänglich sehr ähnlichen Page Content, weil das Template Brand-Information betonte über lokale Besonderheiten.
Der Fix: Wir werteten lokale Inhalte viel höher. Nachbarschafts-Beschreibungen, Vergleiche nahegelegener Venues, lokales Review-Sentiment und länderspezifische Preisgestaltung machen nun 70%+ jeder Seite aus. Die Brand-Info ist eine kleine Section. Google stoppte, diese als Near-Duplikate zu flaggen.
Ergebnisse: Die Hockey-Stick-Kurve und ehrliche Fehlschläge
Die kombinierten GSC-Daten über alle drei Projekte zeigen die klassische Hockey-Stick-Kurve – flach für Wochen, dann exponentielles Wachstum, als Googles Crawler Vertrauen in unseren Domains gewann.
| Metrik | Monat 1 | Monat 3 | Monat 6 | Monat 12 |
|---|---|---|---|---|
| Gesamt indexierte Seiten | 18.200 | 67.000 | 189.000 | 253.000 |
| Tägliche organische Clicks | 340 | 2.100 | 8.400 | 19.600 |
| Durchschnittliche Position (alle Queries) | 42 | 28 | 16 | 11 |
| Crawl Requests/Tag (alle Sites) | 4.200 | 12.800 | 31.000 | 48.000 |
| Monatliche Supabase Kosten | $75 | $75 | $125 | $150 |
| Monatliche Vercel Kosten | $40 | $60 | $60 | $60 |
Aber lass mich auch ehrlich über die Fehlschläge sein. Etwa 8% unserer Seiten sitzen immer noch in "Discovered -- currently not indexed" nach 12 Monaten. Das sind üblich die Traffic-armen Seiten im Long Tail – spezifische Angel-Number-Seiten in Sprachen mit niedrigem Such-Volumen oder Hosting-Unternehmen in kleineren Märkten. Wir könnten sie wahrscheinlich mit mehr internen Links force-indexieren, aber der ROI ist nicht da.
Wir hatten auch einen Zeitraum um Monat 4, als Deluxe Astrologys Traffic 30% nach einem Google Core Update fiel. Es erholte sich über 6 Wochen ohne irgendwelche Änderungen unsererseits, aber das waren stressige Wochen. Programmatische Sites scheinen volatiler während Core Updates zu sein, weil Google Qualitäts-Signale über das ganze Page-Korpus auf einmal neu bewertet.
Falls du in Betracht ziehst, etwas in diesem Maßstab zu bauen, haben wir unseren Ansatz und unsere Preisgestaltung auf unserer Pricing-Seite detailliert. Für Astro-basierte statische Site-Generierung – mit der wir auch experimentiert haben für rein-statische pSEO – check unsere Astro-Entwicklungskapazitäten.
Programmatic SEO vs. traditioneller Content: Wann welcher nutzen?
Programmatic SEO ist kein Ersatz für Editorial Content. Es ist ein anderes Tool für einen anderen Job.
| Faktor | Programmatic SEO | Traditioneller Content |
|---|---|---|
| Beste für | Datengetriebene Queries ("beste Cafés in Shibuya", "Löwe Horoskop heute") | Intent-getriebene Queries ("wie man Pour-Over-Kaffee braut") |
| Content-Einzigartigkeit | Kommt von einzigartigen Daten pro Seite | Kommt von einzigartiger Perspektive/Research |
| Scaling-Geschwindigkeit | 1.000+ Seiten pro Woche | 2-5 Artikel pro Woche |
| Wartungslast | Datenbank-Updates, Template-Fixes | Periodische Content-Aktualisierung |
| Google-Vertrauens-Building | Langsamer (muss Qualität im großen Maßstab beweis) | Schneller (jedes Stück einzeln beurteilt) |
| Risiko-Profil | Höher (dünne Content-Strafen treffen ganze Site) | Niedriger (ein schlechter Artikel tankt die Domain nicht) |
Der sweet Spot ist das Kombinieren beider. Not Another Sunday hat 137K programmatische Venue-Seiten und 200+ Editorial Guides über Coffee Culture, Brau-Methoden und Stadt-spezifische Café-Crawl-Routen. Der Editorial Content baut E-E-A-T Signale, die die ganze Domain liften, was hilft, dass die programmatischen Seiten schneller indexieren.
Häufig gestellte Fragen
Wie viele Seiten kannst du realistisch mit Programmatic SEO indexiert bekommen? Das hängt völlig von Domain Authority und Content-Qualität ab. Auf etablierten Domains mit starken Backlink-Profilen haben wir 90%+ Indexations-Raten für 100K+ Seiten gesehen. Neue Domains kämpfen – der dev.to Case Study von 287K Seiten auf einer frischen Domain, die fast null Indexation bekamen, ist die Norm, nicht die Ausnahme. Fange mit 1.000-5.000 hochqualitativen Seiten an, baue Autorität auf, dann scale.
Was ist das Minimum an Content pro Seite um Dünne-Content-Strafen zu vermeiden? Wir zielen für mindestens 400 Wörter einzigartigen Content pro Seite an, plus strukturierte Daten, Bilder und interne Links. Aber Word Count allein ist nicht die Metrik – es geht darum, ob die Seite die Nutzer-Anfrage besser beantwortet als das, was bereits existiert. Eine 200-Wort-Seite mit einzigartigen Datentabellen und einer Karte kann eine 2.000-Wort-Seite mit generischem Text outperformen.
Ist Programmatic SEO noch sicher nach Googles 2025 Helpful Content Updates? Ja, aber nur wenn du wirklich nützliche Seiten erstellst. Googles 2025 Updates zielen spezifisch auf Low-Quality Programmatic Content, das nur existiert, um Search Traffic zu erfassen ohne Wert zu bieten. Sites wie Zapier (70K Seiten, $140M ARR) gedeihen weiter, weil ihre Seiten echte Probleme lösen. Die Sites, die bestraft werden, sind die, die Variationen von "Best {service} in {city}" generieren ohne echte Daten dahinter.
Wie viel kostet ein Programmatic SEO Stack mit Supabase und Vercel? Unser Drei-Projekt-Stack läuft bei etwa $150-200/Monat insgesamt. Supabase Pro ist $25/Monat pro Projekt (wir verwenden drei Instanzen). Vercel Pro ist $20/Benutzer/Monat. Die KI-Anreicherung via Claudes API war eine einmalige Kosten von etwa $180 für 28.840 Records. Für die meisten Projekte unter 50K Seiten, erwarte $50-100/Monat in Infrastruktur-Kosten.
Wie lang dauert es, bis Google programmatische Seiten indexiert? Erwarte 2-4 Wochen für das initiale Crawling deiner Sitemaps, aber volle Indexation großer Page-Sets dauert 3-6 Monate. Unsere Erfahrung zeigt ein Hockey-Stick-Muster: langsames Crawling für die ersten 6-8 Wochen während Google Qualität bewertet, dann schnelle Beschleunigung, sobald es entscheidet, dass dein Content die Indexation verdient. Interne Verlinkung und Sitemap-Struktur beeinflussen diese Timeline dramatisch.
Sollte ich Next.js SSR oder ISR für programmatische SEO Seiten verwenden?
ISR, fast immer. SSR (force-dynamic) bedeutet, dass jede Crawler-Request – einschließlich jedes Googlebot-Crawls – deine Datenbank trifft, was Performance-Probleme im großen Maßstab erschafft und Crawl Budget verschwendet auf langsame Responses. ISR mit revalidate = 3600 (oder sogar 86400 für tägliche Updates) gibt dir Static-Site-Performance mit dynamische Daten-Frische. Wir lernten das die schwere Weise mit HostList – der Switch von force-dynamic zu ISR ließ unsere Response-Zeit von 2,8s zu 47ms fallen.
Wie handhabst du interne Verlinkung über 100K+ Seiten? Datenbank-getriebene verwandte Content-Queries. Jede Seite führt eine Query durch, die 8-15 verwandte Seiten findet basierend auf echten Daten-Beziehungen – gleiche Kategorie, ähnliche Scores, geografische Nähe, geteilte Attribute. Verlinke nicht einfach zufällig zu Seiten. Die Links müssen kontextuellen Sinn für Nutzer und Google machen. Wir verwenden PostgreSQL-Funktionen in Supabase um diese Beziehungen effizient zu berechnen.
Was ist der größte Fehler, den Leute mit Programmatic SEO machen? Den Fokus auf Page-Anzahl statt Page-Qualität. Es ist verlockend, jede mögliche Kombination deiner Daten zu generieren, aber 10.000 ausgezeichnete Seiten werden 100.000 mittelmäßige überperformen jedes Mal. Wir töteten 4.000 dünne Seiten auf Deluxe Astrology und sahen Indexation über die verbleibenden Seiten erhöhen. Google interpretiert dünne Seiten als Signal, dass deine ganze Site niedrige Qualität sein könnte. Falls du bereit bist, programmatische Seiten richtig zu bauen, kontaktiere unser Team – wir haben diese Lektionen gelernt, damit du es nicht tun musst.