SEO Agentur NRW: Wenn Rankings wackeln und Leads fehlen – so gehen wir’s technisch an

Letzte Woche saß ich bei einem Kunden in NRW im Call (E-Commerce, ziemlich solide Marke) und die Stimmung war so: „Traffic ist da, aber irgendwie kommen keine Anfragen rein.“ Und ja, Rankings waren sogar „okay“. Nur: Die Seite hat sich angefühlt wie ein Schaufenster ohne Türgriff. Du siehst alles, aber du kommst nicht rein.
Interessiert an diesem Thema?
Kontaktieren Sie uns für eine kostenlose Beratung →Das ist halt der Punkt, an dem viele nach einer SEO Agentur in NRW suchen: Nicht weil sie „SEO“ als Buzzword brauchen, sondern weil irgendwas in der Kette aus Technik, Content, Tracking und Local Signalen klemmt. Und das merkst du erst, wenn du’s mal wirklich end-to-end prüfst.
Problem Statement (so fühlt sich das in echt an)
In unserer Erfahrung sind 80% der Performance-Probleme auf ineffiziente Queries zurückzuführen
Beispiel: B2B Shopware 6 Shop (≈ 50k SKUs)
API Response Time von 600ms auf 180ms optimiert
Implementation Checklist
- ✓ Requirements definiert
- ✓ Architektur geplant
- ✓ Tests geschrieben
- ✓ Dokumentation erstellt
Typische Situation: Du hast Sichtbarkeit, aber die falsche Sichtbarkeit. Oder du rankst lokal nicht da, wo’s zählt (Köln, Düsseldorf, Essen, Dortmund… you name it). Oder du verlierst seit einem Relaunch langsam Keywords und keiner weiß warum, weil „hat doch vorher funktioniert“.
Ein Fehler, den ich oft sehe: Es wird am Content geschraubt, während die Indexierung schief läuft. Dann optimierst du eigentlich ins Leere. Passiert ständig. Und ja, ich hab’s auch schon selbst verbockt, als ich vor Jahren zu sehr auf Content-KPIs geguckt hab und die Canonicals nur so „meh“ gesetzt waren.
Technical Background (was bei Local SEO in NRW wirklich reinspielt)
Wenn du lokal Dienstleistungen verkaufst, ist SEO kein einzelner Hebel. Es ist eher ein System aus:
- Technik: Crawlability, Indexierung, interne Links, Pagespeed (nicht als Religion, aber als UX-Faktor), saubere Canonicals, Schema.
- Local Signale: Google Business Profile, NAP-Konsistenz, lokale Landingpages, Bewertungen, Local Backlinks.
- Intent-Fit: „SEO Agentur NRW“ ist nicht nur Info, das ist „Ich will jemanden beauftragen“. Heißt: Angebot, Vertrauen, Cases, klare Kontaktwege.
- Messbarkeit: saubere Events, Call-Tracking, Formular-Tracking, GSC/GA4 ohne Datenmatsch.
Ich bin nicht 100% sicher, ob’s immer so ist, aber in NRW sehen wir überdurchschnittlich oft zwei Extreme: sehr starke regionale Konkurrenz in den Ballungsräumen und gleichzeitig super viele „Semi“-Websites, die nie technisch aufgeräumt wurden. Das macht’s spannend, weil du mit sauberer Technik oft schneller hochkommst als du denkst.
Implementation Steps (wie wir das praktisch angehen – ohne Theater)
Wir starten selten mit „wir schreiben 20 Blogartikel“. Meistens starten wir mit: Was blockiert Wachstum? Und dann gehen wir Schritt für Schritt.
1) Crawl & Index: Erst prüfen, dann bauen
Ich will wissen: Was kann Google sehen? Was soll Google sehen? Was rankt schon lokal? Und was wird aus Versehen indexiert (Filterseiten, interne Suche, Parameter-URLs)?
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin
BASE = "https://example.de" # echte Domain einsetzen
# Quick & dirty Crawl, weil man manchmal schnell ein Gefühl braucht
# TODO: später optimieren (robots.txt respektieren, Queue, Dedupe, etc.)
seen = set([BASE])
queue = [BASE]
while queue:
url = queue.pop(0)
r = requests.get(url, timeout=15)
if r.status_code != 200:
print("BAD", r.status_code, url)
continue
soup = BeautifulSoup(r.text, "html.parser")
canon = soup.select_one('link[rel="canonical"]')
if canon and canon.get("href") and canon.get("href").startswith("http") is False:
print("CANONICAL maybe relative:", url, canon.get("href"))
for a in soup.select("a[href]"):
href = a.get("href")
if not href or href.startswith(("mailto:", "tel:", "#")):
continue
nxt = urljoin(url, href)
if nxt.startswith(BASE) and nxt not in seen:
seen.add(nxt)
queue.append(nxt)
print("Crawled:", len(seen))
Das ist kein Enterprise-Crawler, aber für ein erstes „Wo knallt’s?“ reicht’s oft. Und manchmal findest du in 5 Minuten genau den einen Weiterleitungs-Loop oder den komischen Canonical, der dir seit Monaten leise Rankings frisst.
2) Local Landingpages: nicht „NRW“ zuspammen, sondern Regionen sauber abbilden
Wenn du in NRW unterwegs bist, ist „NRW“ als Landingpage okay, aber eigentlich willst du Cluster: Köln + Umgebung, Düsseldorf + Umgebung, Ruhrgebiet (Essen/Duisburg/Bochum), Dortmund/Münster… je nach Einzugsgebiet. Nicht 30 Doorway-Pages, sondern 4–8 starke Seiten, die wirklich Substanz haben: Leistungen, Prozesse, Cases aus der Region, Anfahrts-/Remote-Setup, Ansprechpartner.
Technisch wichtig: saubere interne Verlinkung von der Hauptnavigation oder zumindest von einer Hub-Seite („Standorte“ / „Regionen“). Sonst hängen diese Seiten irgendwo im Nirvana.
type Region = {
slug: string;
title: string;
intro: string;
nearby: string[];
};
const regions: Region[] = [
{
slug: "nrw",
title: "SEO Agentur NRW",
intro: "Wir unterstützen Teams in NRW von Tech-SEO bis Local SEO – ohne Bullshit-Bingo.",
nearby: ["Köln", "Düsseldorf", "Essen", "Dortmund"]
},
{
slug: "koeln",
title: "SEO Agentur Köln",
intro: "Für Köln setzen wir oft stark auf Local + Content, weil die Konkurrenz halt sportlich ist.",
nearby: ["Leverkusen", "Bonn", "Bergisch Gladbach"]
}
];
export function renderRegionPage(r: Region): string {
const cityLinks = r.nearby
.map((c) => `<li><a href="/seo-agentur-${c.toLowerCase().replace(/\s+/g, "-")}">${c}</a></li>`)
.join("\n");
return `
<h1>${r.title}</h1>
<p>${r.intro}</p>
<h2>In der Nähe</h2>
<ul>${cityLinks}</ul>
`;
}
// Irgendwo im Build-Prozess:
// regions.forEach(r => writeFile(`/seo-agentur-${r.slug}/index.html`, renderRegionPage(r)))
Das ist natürlich nur ein Sketch. Aber genau so bauen wir’s oft: Datenmodell, Template, saubere URLs, konsistente interne Links. Und dann packen wir die echten Inhalte drauf: Cases, FAQs, Ansprechpartner, „so läuft die Zusammenarbeit“.
3) Structured Data: LocalBusiness & Service sauber, nicht übertrieben
Schema ist kein Ranking-Magie-Zauber. Aber es hilft bei Eindeutigkeit. Gerade bei Agenturen mit mehreren Standorten oder Remote-first Teams. Wichtig: keine Fake-Adressen. Das rächt sich irgendwann.
4) Reporting/Tracking: Leads statt Vanity
Wenn du „SEO Agentur NRW“ optimierst, willst du am Ende Calls, Mails, Formulare, Terminbuchungen. Rankings sind nur Mittel zum Zweck.
-- Beispiel: Leads pro Landingpage (vereinfacht)
-- Angenommen wir schreiben Form-Submits/Calls in eine events-Tabelle
SELECT
page_path,
COUNT(*) AS leads,
MIN(event_time) AS first_lead,
MAX(event_time) AS last_lead
FROM events
WHERE event_name IN ('form_submit', 'call_click', 'booking_complete')
AND event_time >= NOW() - INTERVAL '30 days'
GROUP BY page_path
ORDER BY leads DESC
LIMIT 20;
So eine simple Sicht reicht oft, um zu merken: „Ah, die NRW-Seite bekommt Traffic, aber die Köln-Seite konvertiert.“ Dann weißt du, wo du nachschärfen musst (Copy, Trust, CTA, interne Links, Query-Match).
Best Practices (aus der Praxis, nicht aus dem Lehrbuch)
- Kein Local SEO ohne Vertrauen: Cases, echte Referenzen, Ansprechpartner, Prozess. Klingt banal, ist aber der Unterschied zwischen Klick und Anfrage.
- Technik zuerst, Content danach: Wenn Index/Canonical/Redirects schief sind, kannst du dir Content sparen. Wirklich.
- Interne Links wie ein Navigationssystem: Hub-Seite „NRW“ → Cluster-Seiten → Leistungsseiten. Nicht 200 Footer-Links, sondern sinnvoll.
- Google Business Profile pflegen: Kategorien, Leistungen, Fotos, Posts, Q&A, Bewertungen. Und NAP überall konsistent.
- Keine Doorway-Pages: „SEO Agentur Essen“, „SEO Agentur Bochum“, „SEO Agentur Duisburg“ mit identischem Text ist halt Mist. Dann lieber weniger, aber gut.
Real-World Example (wie so ein NRW-Projekt wirklich aussieht)
Bei einem Projekt letzten Monat (B2B-Dienstleister, mehrere Standorte in NRW) war das Hauptproblem gar nicht „zu wenig Content“. Es war eine Mischung aus:
- Weiterleitungsketten nach dem Relaunch (http → https → non-www → www → /startseite),
- ein Canonical-Setup, das lokale Seiten teilweise auf die Startseite gezogen hat,
- und ein Tracking, das Formulare nur manchmal als Conversion gezählt hat (je nach Consent-State).
Wir haben erst die Redirects begradigt, dann Canonicals/Indexierung sauber gemacht, dann die lokalen Seiten neu strukturiert (NRW als Hub, darunter Köln/Düsseldorf/Ruhrgebiet) und anschließend Bewertungen & GBP verbessert. Das Ergebnis war nicht „über Nacht Platz 1“, aber: mehr qualifizierte Anfragen und weniger „Wir wollten eigentlich Webdesign“-Leads. Und das zählt irgendwie mehr.


