Join our community of websites already using SEOJuice to automate the boring SEO work.
See what our customers say and learn about sustainable SEO that drives long-term growth.
Explore the blog →TL;DR: Die meisten Tech-Stack-Posts beantworten die falsche Frage. Die eigentliche Geschichte hinter dem SEOJuice-Stack ist nicht, welches Logo bei StackShare steht, sondern wie seojuice.com Crawls, Scoring, Abrechnung, Linkvorschläge und indexierbare Seiten voneinander isoliert, damit nichts das andere zerlegt.
seojuice.com begann nicht als große Plattform. Entstanden ist es aus demselben Problem, das ich bei mindnow und auf vadimkravcenko.com immer wieder gesehen habe: Teams veröffentlichen brauchbaren Content und lassen dann interne Links, veraltete Metadaten, verwaiste Seiten und langsam umgesetzte Fixes monatelang im Backlog liegen. Die Technik hinter SEOJuice ist deshalb nicht für Konferenz-Folien optimiert, sondern für wiederholbare Aufräumarbeiten, die keinen weiteren SEO-Sprint benötigen.
Darum wirkt eine reine Stack-Liste dünn. StackShare nennt dir die Produkte, zeigt ein kurzes Profil (die aktuelle öffentliche Antwort) – schön und gut. Aber Namen verraten nicht, ob eine Anwendung langsame Crawls, blockierte Requests, Cache-Misses, fehlerhafte Eingaben, Abrechnungs-Edge-Cases oder partielle Ausfälle verkraftet.
Ich habe bei mindnow genügend Kundensysteme gebaut, um zu wissen: Architektur bricht selten im Happy Path zusammen. Sie bricht um 2 Uhr morgens – wenn sich eine Queue staut, ein Crawler blockiert wird oder ein „einfaches“ Content-Update die kanonische URL auf 400 Seiten ändert.
SEO-Tools sind chaotisch, weil sie zwischen menschlicher Intention, Website-HTML, Crawlern, Drittanbieter-APIs, Cronjobs und Produkt-UI sitzen. Ein Marketer klickt auf einen Button und erwartet sofort verwertbare Empfehlungen. Dahinter muss das System Seiten abrufen, Links parsen, Duplikate erkennen, Chancen bewerten, Belege speichern, Limits einhalten und Fortschritt anzeigen – ohne zu lügen.
Dieser Artikel ist daher kein Händler-Katalog, sondern eine Landkarte möglicher Fehlermodi. Der eigentliche SEOJuice-Stack besteht aus Entscheidungen, die langweilige SEO-Wartung günstig halten.
Falls Sie nur die direkte Antwort wollen: Der SEOJuice-Stack lässt sich am besten über Rollen statt über Markennamen verstehen. Einzelne Services können wechseln – die Verantwortlichkeiten nicht.
| Produktanforderung | Stack-Verantwortung |
|---|---|
| Marketing-Seiten und Blog-Content ausliefern | Schnelles HTML, standardmäßig crawlbar, stabile Metadaten |
| Seiten analysieren | Isolierte Crawl- und Parse-Pipeline |
| Interne Links vorschlagen | Content-Verständnis, Scoring, nachvollziehbare Empfehlungen |
| User-Projekte nachverfolgen | Persistenter Zustand für Accounts, Sites, Pages und Empfehlungen |
| App reaktionsschnell halten | Background-Jobs statt Crawlen zur Request-Zeit |
| Gemeinsame Systeme schützen | Rate Limits, Queues, Retries und sichere Fallbacks |
| Schnell ausliefern | Einfacher Deployment-Pfad und geringer Betriebsaufwand |
Diese Tabelle ist weniger aufregend als eine Logo-Wand. Gut so. SEOJuice soll dort langweilig sein, wo „langweilig“ das richtige Wort ist – wiederherstellbar, beobachtbar und leicht nachvollziehbar.
StackShare eignet sich für einen schnellen Blick – es erfüllt die wörtliche Suchanfrage. Doch wer nach seojuice tech stack sucht, will meist mehr als Lieferanten-Trivia. Er oder sie will wissen, ob das Produkt von einem Spielzeug-Script oder von solider Ingenieursarbeit zusammengehalten wird.
Es fehlt also der Kontext. Warum braucht ein SEO-Tool Background-Jobs? Warum trennt man öffentliche Seiten von App-Screens? Warum speichert man Crawl-Zeitstempel? Warum sollen Limits als Produktverhalten sichtbar sein statt als zufällige Fehler? All das kann ein Stack-Profil nicht erklären.
Der Engineering-Blog von Stripe dreht sich zwar nicht um SEO-Tools, doch das Denken über Rate Limits passt perfekt. Paul Tarjan schrieb:
„Unsere Rate-Limits werden ständig ausgelöst – allein diesen Monat haben sie bereits Millionen von Requests abgelehnt.“
Dieser Satz ist wichtig, weil er Limits als normales Produktionsverhalten behandelt, nicht als Notfall-Patch. Crawl-lastige Software braucht die gleiche Haltung. Eine einzige große Site darf nicht jedes Konto verlangsamen. Wiederholte Retries dürfen den Server eines Kunden nicht malträtieren. Fremde Limits dürfen in der UI nicht als mysteriöse Fehler durchschlagen.
Die Artikel von Vercel sind noch aus einem anderen Grund hilfreich: Release-Geschwindigkeit. Lee Robinson brachte es auf den Punkt:
„Ihr größter Vorteil kann darin liegen, wie schnell Sie ausliefern, Feedback aufnehmen und iterieren.“
Dem stimme ich zu – mit einer Bedingung. Geschwindigkeit ist nur dann ein Vorteil, wenn das System einfach genug ist, um zurückzurollen, zu beobachten und zu verstehen. Andernfalls wird Tempo nur zu einer eleganteren Art, Incidents zu produzieren.
seojuice.com darf nicht jede Oberfläche gleich behandeln. Öffentliche Seiten, Blog-Posts, Dokus und Landingpages brauchen schnelles HTML und stabile Metadaten. Authentifizierte Produkt-Screens benötigen Interaktivität, Filter, Zustände, nutzerspezifische Daten und Workflow-Gedächtnis.
Das sind unterschiedliche Aufgaben.
Öffentliche SEO-Flächen müssen beim ersten Laden crawlbares HTML, vorhersagbare Titles, Descriptions, Canonicals und interne Links liefern. Genau hier zählen static-first HTML und App-Rendering. Google braucht kein Dashboard – Nutzer dagegen schon. Wer beide Flächen verwechselt, baut am Ende alles neu, weil eine Route das falsche Rendering-Modell hatte.
Das Dashboard darf sich dagegen wie eine Anwendung verhalten: Projektstatus, Filter, ignorierte Vorschläge, Abrechnungsstatus, Crawl-Fortschritt und interaktive Aktionen. Diese Oberfläche muss nicht für „page health scoring UI“ ranken (kein Ranking-Surface). Sie soll Nutzern helfen, ihre Aufgabe zu erledigen, ohne auf Crawler zu warten.
Die gemeinsame Domain ist nicht der spannende Teil. Entscheidend ist, dass nicht jedes Routing-Segment dasselbe Rendering-Modell aufgedrückt bekommt. Öffentliche Seiten müssen indexierbar und stabil sein. Private Screens müssen nützlich und zustandsbehaftet sein.
Ein Klick auf den Button sollte das Projekt speichern – und nicht in eine Geiselnahme mit irgendeinem langsamen WordPress-Host ausarten.
Dieser Satz erklärt einen großen Teil des SEOJuice-Stacks. Wenn ein Nutzer ein Projekt erstellt oder aktualisiert, sollte die App die Anfrage speichern, die Crawl-Arbeit in die Queue legen und einen klaren Status zurückgeben. Crawler können dann Seiten unter Limits abrufen. Parser extrahieren Titles, Headings, Canonicals, Body-Inhalt, interne Links und Response-Details. Scoring läuft, sobald genügend Content vorliegt.
Die UI soll den aktuellen Status anzeigen – nicht so tun, als wäre alles sofort erledigt.
Hier sind Queues entscheidend. Crawling ist langsam im Vergleich zu normalen Web-App-Aktionen. Manche Sites antworten in 80 ms, andere in acht Sekunden. Manche blockieren unbekannte User-Agents. Manche leiten fünfmal weiter, bevor sie eine Seite zurückgeben. Manche liefern je nach Header anderes HTML. Wenn diese Arbeit während eines normalen Requests – synchron, blockierend, beim Klick des Nutzers – passiert, wird das Produkt so langsam wie die langsamste Website im Crawl.
Background-Processing macht Retries zudem sicherer. Ein fehlgeschlagener Fetch kann mit Budget erneut versucht werden. Eine blockierte URL kann markiert werden. Ein Crawl kann pausieren. Ein Scoring-Job kann auf geparsten Content warten, statt zu raten.
“There are only two hard things in Computer Science: cache invalidation and naming things.”
Phil Karltons Satz wird ständig zitiert, weil er stimmt. In SEO-Software ist ein veralteter Cache nicht bloß ein technischer Bug. Er kann Links von nicht mehr existierenden Seiten empfehlen, eine gestern veröffentlichte Seite übersehen oder einem Nutzer sagen, ein Title sei okay, obwohl das CMS ihn längst geändert hat.
Vorgegaukelte Instant-Ergebnisse sind gefährlich. Wenn Empfehlungen erscheinen, bevor der Crawl fertig ist, fühlt sich das Produkt fünf Minuten lang schnell an – dann sinkt das Vertrauen. Der Nutzer sieht Vorschläge auf Basis veralteter Daten und fragt sich, was sonst noch falsch ist.
Ich lag damit jahrelang daneben (auch ich mochte scheinbar sofortige Interfaces). Heute zeige ich lieber ehrlichen Fortschritt als erfundene Gewissheit. „Wir haben 180 Seiten gefunden und 92 bereits bewertet“ schlägt ein komplettes Dashboard auf Verdacht.
Rate Limits werden oft als Abuse-Schutz beschrieben. Für SEOJuice definieren sie zusätzlich Fairness, Zuverlässigkeit und Kundenvertrauen.
Eine einzige große Site darf nicht alle anderen Accounts ausbremsen. Wiederholte Retries dürfen einen Kunden-Server nicht endlos belasten. API-Bursts dürfen nicht zu zufälligen UI-Fehlern führen. Plan-Limits sollen wie klare Produktversprechen wirken, nicht wie versteckte Fallen.
| Limit-Typ | Wovor es schützt |
|---|---|
| Crawl-Parallelität pro Site | Kunden-Server und gemeinsame Crawler-Kapazität |
| Job-Volumen pro Account | Fair Use über Projekte hinweg |
| API-Burst-Requests | App-Stabilität |
| Retry-Budgets | Verhindert unendliches Wachstum von Queues |
| Limits nach Tarif | Eindeutige Produktversprechen |
Limiter nach Redis-Art sind hier hilfreich, aber der Limiter selbst darf kein Single Point of Failure werden. Tarjans zweite Stripe-Lehre ist mir dabei am wichtigsten:
„Stellen Sie sicher, dass bei Bugs im Rate-Limiting-Code (oder wenn Redis ausfällt) die Requests nicht beeinträchtigt werden.“
Das ist die richtige Haltung. Fällt der Limiter aus, sollte die normale Arbeit möglichst sicher degradieren. Vielleicht wird das Crawling langsamer, eine Queue pausiert oder die UI zeigt einen verzögerten Status. Was nicht passieren darf, ist ein Totalausfall, weil die Schutzschicht fragiler war als das, was sie schützen sollte.
Limits müssen außerdem so sichtbar sein, dass Nutzer sie verstehen. „Dein Crawl steht in der Queue, weil diese Site bereits gecrawlt wird“ ist besser als ein Spinner, der nie endet.
SEO-Automatisierung verliert Vertrauen, wenn sie nicht erklären kann, warum eine Empfehlung existiert.
SEOJuice benötigt daher dauerhaften Zustand für die unspektakulären Dinge: Accounts, Projekte, Sites, gecrawlte URLs, geparste Seiteninhalte, Link-Opportunities, Empfehlungsstatus, ignorierte Vorschläge, Nutzeraktionen, Crawl-Zeitstempel und Freshness-Marker. Nichts davon klingt glamourös, doch alles ist wichtig.
Langweilige Datenbanken werden unterschätzt. SEO-Empfehlungen brauchen Gedächtnis.
Hat sich eine Seite gestern geändert, muss der Nutzer wissen, ob eine Empfehlung auf dem Crawl von gestern oder auf dem von letztem Monat basiert. Wurde eine Empfehlung abgelehnt, sollte das System sich daran erinnern. Wenn eine URL umleitet, darf das Produkt nicht weiter Links zur alten Adresse vorschlagen. Verschwindet eine Seite, müssen zugehörige Empfehlungen verfallen.
Hier wird Benennung zur Produkt-Wahrheit. Eine „Seite“, eine „URL“, ein „Canonical“ und eine „Empfehlung“ klingen offensichtlich – bis Redirects, Duplikate und CMS-Templates ins Spiel kommen. Schlechte Namen erzeugen falsche mentale Modelle. Falsche Modelle erzeugen Support-Tickets.
Die Storage-Schicht muss nicht clever sein – sie muss erklärbar sein. Wenn SEOJuice einen internen Link empfiehlt, sollte das Produkt beantworten können: von welcher Seite, zu welcher Seite, basierend auf welchem Crawl, mit welchem Anker-Kontext und mit welchem aktuellen Status?
Vercels Lektion zur Release-Geschwindigkeit ist hilfreich, aber SEOJuice braucht kein Plattform-Theater, sondern kurze Feedback-Loops.
Kleine Releases lassen sich leichter reviewen. Klare Logs machen defekte Jobs einfacher auffindbar. Rollbacks nehmen die Angst. Feature Flags helfen bei hohem Risiko. Manuelle Reviews gehören weiterhin in die Nähe sensibler Empfehlungs-Logik, besonders wenn eine Scoring-Änderung viele Nutzer gleichzeitig betrifft.
Randnotiz: Früher habe ich hier clevere Architektur überbewertet. Sie fühlt sich verantwortungsvoll an, verlangsamt aber meist nur den nächsten Fix.
Der Release-Pfad sollte Content-Fixes, UX-Fixes, Billing-Anpassungen und Scoring-Verbesserungen günstig ausrollbar machen. Das meint nicht „rücksichtslos“, sondern: Änderungen sind klein genug, um sie zu verstehen, und reversibel genug, um nach dem Deploy ruhig zu schlafen.
Das gilt ebenso für die Automatisierung interner Links. Eine Empfehlungs-Engine lernt durch Feedback. Nutzer ignorieren manche Vorschläge, akzeptieren andere und decken Edge Cases auf, die im Testdatensatz unsichtbar waren. Der Stack muss diese Learnings schnell zu Produkt-Änderungen machen.
Offen gesagt: Manche Dinge lohnen die Optimierung nicht.
| Darauf optimieren wir nicht | Warum |
|---|---|
| Eine riesige Vendor-Liste | Altert schnell und lehrt wenig |
| Jede Funktion instant machen | Crawl- und Scoring-Arbeit hat reale Latenz |
| Ein Rendering-Modell für alles | Öffentliche SEO-Seiten und private App-Screens haben unterschiedliche Aufgaben |
| Alle technischen Limits verstecken | Ehrliche Limits schlagen mysteriöse Fehler |
| Komplexe Architektur für Status | Kleine Systeme sollen leicht zu debuggen sein |
Der SEOJuice-Stack soll nicht Entwickler beeindrucken, wenn er dabei Nutzer verwirrt. Vertrauen entsteht, wenn das Produkt sich vorhersehbar verhält: Projekt speichern, sicher crawlen, Fortschritt anzeigen, Empfehlungen erklären, Entscheidungen merken und sich von Fehlern erholen.
Das klingt schlicht, weil es schlicht ist. Schlichtheit ist das Ziel.
Der SEOJuice-Stack ist eine Sammlung von Produkt-Rollen: Frontend-Oberflächen für öffentliche Seiten und App-Screens, eine Backend-Schicht für Accounts und Empfehlungen, dauerhafte Speicherung für SEO-Zustand, Queues für Crawling und Scoring, Cache- und Rate-Limit-Layer für Tempo und Schutz, Monitoring für fehlgeschlagene Jobs und Retries sowie ein Deployment-Pfad, der Releases klein hält.
Wechseln einzelne Anbieter, bleibt diese Beschreibung gültig. Die Rollen sind beständiger als die konkreten Services.
Öffentliche Seiten müssen crawlbar und schnell sein. App-Screens müssen responsiv und zustandsbehaftet sein. Crawler brauchen Isolation. Scoring braucht gespeicherte Belege. Billing braucht dauerhaften Account-State. Limits brauchen sichere Fallbacks. Logs müssen Fehler sichtbar machen, bevor Nutzer sie erklären müssen.
Dieser Text ist kein internes Architektur-Dokument und will auch keines sein. Die nützliche Transparenz liegt im Operating Model: static-first, wo Google wichtig ist; Queue-gestützt, wo Crawler langsam sind; Fail-safe, wo Limits das Produkt schützen; und langweilige Speicherung, wo Link-Entscheidungen erklärt werden müssen.
Der SEOJuice-Stack ist ein Mix aus Auslieferung öffentlicher Seiten, App-Infrastruktur, persistenter Speicherung, Background-Jobs, Caching, Rate Limits und Monitoring. Die genauen Service-Namen sind weniger wichtig als die Verantwortlichkeiten: crawlbare Seiten, responsive Produkt-Screens, dauerhafter SEO-Zustand, sicheres Crawling, nachvollziehbare Empfehlungen und sichtbare Fehler.
Eine Vendor-Liste veraltet schnell und erzeugt die falsche Art von Transparenz. Ein Logo verrät nicht, wie das System Crawls, Fehler, Retries, Limits und Empfehlungs-State behandelt. Die nützliche Antwort ist architektonisch, nicht dekorativ.
Für beide – aber nicht auf derselben Oberfläche. Öffentliche Seiten sind standardmäßig crawlbar gebaut. Das Dashboard ist für Nutzer-Workflows gedacht: Projekte, Filter, Crawl-Status, Empfehlungen und Aktionen.
Crawling, Parsen und Scoring sind langsam im Vergleich zu normalen Nutzeraktionen. Queues halten die App responsiv, machen Retries sicherer und verhindern, dass eine langsame Website alle anderen blockiert.
Wenn Ihr Team interne Links, veraltete Metadaten, verwaiste Seiten und Content-Aufräumarbeiten immer wieder verschiebt, ist SEOJuice genau dafür gebaut. Der Stack ist absichtlich langweilig – damit die Wartung erledigt wird, ohne zum nächsten Engineering-Projekt zu mutieren.
no credit card required