Keyword‑Analyse‑Skript erstellen: GSC+Ahrefs (DE Mobile)
Eine reproduzierbare Keyword‑Analyse ist der Grundstein für datengetriebene SEO‑Priorisierung. In diesem Tutorial bauen Sie ein voll funktionsfähiges Skript, das Daten aus der Google Search Console (GSC) für google.de (Mobile) zieht, Keywords mit Ahrefs (oder ergänzend SerpApi) anreichert und eine CSV ausspuckt, die direkt in Priorisierungs‑Workflows einfließt. Keine Theorie, sondern Code: Python‑Skript, Bash‑Beispiel für Cron, Konfigurationshinweise für API‑Keys und ein klares CSV‑Schema. Für grundlegende Vorgehensweisen zur Keyword‑Suche siehe Keyword‑Recherche.
Kurz gesagt: Sie erhalten ein Werkzeug zum automatisierten Erkennen von Chancen — Keywords mit Traffic‑Signalen, Ranking‑Positionen, geschätzter Keyword‑Difficulty (KD), CPC, Volumen und SERP‑Features. Damit identifizieren Sie Seiten mit hohem Upside‑Potenzial (Top‑3‑Gewinn wahrscheinlicher, Volumen hoch, Intent passend). Eine vertiefte Keyword‑Analyse hilft, Metriken wie KD und CPC richtig einzuordnen.
Dieses Dokument ist als Schritt‑für‑Schritt‑Anleitung strukturiert. Jeder Abschnitt enthält Code‑Beispiele und Erklärungen, damit das Skript in CI/Server oder lokal reproduzierbar betrieben werden kann. Ein GitHub‑Repo (siehe Ressourcen) hält eine Startversion bereit; passen Sie es an Ihre Organisation an. Spezifische Hinweise zur Analyse redaktioneller Themen finden Sie für Blogbeiträge.
Klonen Sie das Repo, wenn Sie bereit sind, und halten Sie Ihre API‑Keys parat. Für automatisierte, AI-gestützte Recherche‑Workflows siehe Recherche‑AL. Danach lesen Sie Abschnitt „Voraussetzungen“.
Jetzt kostenfreie Analyse sichern!
Für wen dieses Tutorial ist (Use‑Case & Suchintention)
Dieses Tutorial richtet sich an SEO‑Engineers, Growth‑Marketer und technische SEOs, die regelmäßige, skalierbare Keyword‑Priorisierungen benötigen. Es fokussiert auf google.de‑Daten und mobile Suchanfragen. Ziele sind unter anderem Demo‑/Trial‑Leads schneller zu identifizieren und technische sowie inhaltliche Hebel zu priorisieren.
Viele Operateure suchen nach exakten, reproduzierbaren Workflows. Hier bekommen Sie genau das: Datenextraktion aus GSC, Anreicherung mit externen Keyword‑Metriken (Ahrefs) und eine Methodik zur Scoring‑Logik — alles automatisierbar. Die Suchintention hinter dem Keyword „Keyword‑Analyse‑Skript erstellen“ ist praktisch: Anwender wollen Code, nicht nur Checklisten.
Ein kurzes Use‑Case‑Beispiel: Ihr Produkt hat 200 Landingpages. 30 Keywords zeigen Positionen zwischen 4–12 mit nennbaren Impressions. Sie möchten priorisieren, welche fünf Seiten Sie zuerst verbessern. Dieses Skript liefert die Antwort innerhalb weniger Minuten.
Wenn Sie nur einmalig eine Analyse benötigen, ist das Skript dennoch nützlich. Wöchentliche oder monatliche Priorisierungen machen es jedoch essenziell. Bereiten Sie API‑Keys vor. Danach folgt die Architektur.
Voraussetzungen: GSC, Ahrefs/SerpApi, API‑Keys, Python/Bash
Kurz und konkret: Sie benötigen Zugriff auf die Google Search Console‑Property (als Eigentümer oder mit Leserechten), einen Ahrefs‑API‑Key (oder SerpApi‑Key für SERP‑Features) sowie eine Maschine mit Python 3.10+ und grundlegenden Paketen. Ein Service‑User mit einem JSON‑Credential für Google empfiehlt sich für Headless‑Betrieb.
Technische Anforderungen im Überblick:
- Google Search Console API aktiviert (Search Console API in Google Cloud Console)
- Ahrefs API‑Key (oder SerpApi Key; Ahrefs liefert KD/CPC/Volumen, SerpApi liefert SERP‑Features)
- Python 3.10+, pip, virtualenv
- Bash für Scheduling (crontab) oder ein Jobrunner wie Airflow / GitHub Actions
- Optional: PostgreSQL / BigQuery zur Archivierung
Konfigurationshinweis: Legen Sie eine .env oder config.yml an. Beispiel‑Keys:
GSC_CREDENTIALS=./gsc-service-account.json
GSC_PROPERTY=https://www.ihredomain.de
AHREFS_TOKEN=your_ahrefs_token
SERPAPI_KEY=your_serpapi_key
COUNTRY=DE
DEVICE=MOBILE
START_DATE=2026-02-01
END_DATE=2026-02-28
Kurztest: Nach Einrichtung führen Sie ein kleines Python‑Script aus, das die GSC‑Property listet. Gelingt das, sind die Berechtigungen korrekt. Danach folgt die Implementierung der Abfragen.
Architektur & Ausgabeformat (CSV‑Spalten: Keyword, Land, Device, Volume, Position, URL, Klicks, Impr, CTR, KD, CPC, SERP‑Features)
Den Kern bildet eine einfache Pipeline: Extraktion → Anreicherung → Scoring → Export. Die Pipeline ist bewusst flach, damit Sie sie leicht in CI oder Scheduler einhängen können. Komponenten:
- Extractor: GSC Query API (Device=mobile, Country=DE)
- Anreicherer: Ahrefs Keywords API für KD, Volume, CPC; SerpApi für SERP‑Features
- Scoring Engine: Berechnung Top‑3‑Wahrscheinlichkeit, Intent‑Score und finaler Prioritätswert
- Exporter: CSV mit festen Spalten
Das Skript funktioniert wie ein Navigationssystem: Es zeigt Kurskorrekturen und empfiehlt, welche Abzweigungen sinnvoll sind. Die CSV‑Spalten im Überblick:
- Keyword — Suchphrase
- Land — DE
- Device — MOBILE
- Volume — monthly search volume (Ahrefs)
- Position — durchschnittliche GSC‑Position
- URL — die gepairte Ziel‑URL aus GSC
- Klicks — GSC Klicks
- Impr — GSC Impressions
- CTR — GSC CTR
- KD — Ahrefs Keyword Difficulty
- CPC — Ahrefs CPC (EUR)
- SERP‑Features — e.g. featured_snippet, people_also_ask
Formatierungstipps: Numerische Felder als Integer/Float; SERP‑Features als durch Semikolon getrennte Liste. Datumsfelder optional zu jeder Exportzeile hinzufügen für Historisierung. Verwenden Sie UTF‑8 und ; als Trennzeichen, falls Sie CSV später in Excel öffnen.
Schritt 1 — GSC‑Abfrage automatisieren (Code + Erklärung)
GSC liefert die wichtigsten Signale zur realen Performance. Sie benötigen Klicks, Impressionen, CTR, Position und die zugehörige Seite per Query. Nutzen Sie die Search Console API mit google‑auth. Das folgende Python‑Skript zeigt eine minimal funktionale Abfrage, die queries für google.de (Mobile) zurückliefert.
#!/usr/bin/env python3
# gsc_fetch.py
from google.oauth2 import service_account
from googleapiclient.discovery import build
import csv
import os
from datetime import datetime, timedelta
SCOPES = ['https://www.googleapis.com/auth/webmasters.readonly']
KEY_FILE = os.getenv('GSC_CREDENTIALS', './gsc-service-account.json')
PROPERTY = os.getenv('GSC_PROPERTY', 'https://www.ihredomain.de')
START_DATE = os.getenv('START_DATE', (datetime.utcnow()-timedelta(days=28)).date().isoformat())
END_DATE = os.getenv('END_DATE', datetime.utcnow().date().isoformat())
credentials = service_account.Credentials.from_service_account_file(KEY_FILE, scopes=SCOPES)
webmasters = build('searchconsole', 'v1', credentials=credentials)
request = {
"startDate": START_DATE,
"endDate": END_DATE,
"dimensions": ["query","page"],
"dimensionFilterGroups": [{
"filters": [
{"dimension":"device","operator":"equals","expression":"MOBILE"},
{"dimension":"country","operator":"equals","expression":"DE"}
]
}],
"rowLimit": 25000
}
resp = webmasters.searchanalytics().query(siteUrl=PROPERTY, body=request).execute()
rows = resp.get('rows', [])
with open('gsc_output.csv','w',newline='',encoding='utf-8') as f:
writer = csv.writer(f, delimiter=';')
writer.writerow(['keyword','url','clicks','impressions','ctr','position'])
for r in rows:
query = r.get('keys',[None])[0]
page = r.get('keys',[None,None])[1]
writer.writerow([query, page, int(r.get('clicks',0)), int(r.get('impressions',0)), float(r.get('ctr',0)), float(r.get('position',0))])
Das Skript verwendet Service‑Account‑Credentials, die sich gut für CI eignen. Die filterbaren Dimensionen erlauben device=MOBILE und country=DE. Paginierung ist vereinfacht (rowLimit). Für größere Volumina implementieren Sie Next‑Page‑Requests. Speichern Sie das CSV als Ausgangspunkt für die Anreicherung.
Kurzer Test: Führen Sie das Skript lokal aus. Wenn rows leer sind, prüfen Sie Property‑URL und Berechtigungen. Danach: Schritt 2.
Schritt 2 — Keywords mit Ahrefs/SerpApi anreichern (Code + Mapping)
Ahrefs liefert KD, Volumen und CPC; SerpApi ergänzt SERP‑Features. Beide zusammen geben ein umfassendes Bild der Wettbewerbslandschaft. Im folgenden Beispiel zeigen wir, wie Sie Ahrefs HTTP‑API ansprechen und die Ergebnisse mit dem GSC‑Output mappen.
#!/usr/bin/env python3
# enrich_with_ahrefs.py
import os, csv, requests, time
AHREFS_TOKEN = os.getenv('AHREFS_TOKEN')
SERPAPI_KEY = os.getenv('SERPAPI_KEY') # optional
AHREFS_ENDPOINT = 'https://apiv2.ahrefs.com'
OUT_FILE = 'enriched_keywords.csv'
def fetch_ahrefs_metrics(keyword):
params = {
'token': AHREFS_TOKEN,
'from': 'keywords_metrics',
'target': keyword,
'mode': 'domain',
'output': 'json'
}
resp = requests.get(AHREFS_ENDPOINT, params=params, timeout=30)
if resp.status_code != 200:
return {}
data = resp.json()
# Struktur variiert; anpassen je nach API-Version
return {
'volume': data.get('volume', 0),
'kd': data.get('kd', 0),
'cpc': data.get('cpc', 0.0)
}
def fetch_serp_features(keyword):
if not SERPAPI_KEY:
return []
params = {'engine':'google','q':keyword,'google_domain':'google.de','gl':'de','hl':'de','api_key':SERPAPI_KEY,'device':'mobile'}
resp = requests.get('https://serpapi.com/search', params=params, timeout=30)
if resp.status_code != 200:
return []
js = resp.json()
features = []
if js.get('featured_snippet'): features.append('featured_snippet')
if js.get('knowledge_graph'): features.append('knowledge_graph')
if js.get('people_also_ask'): features.append('people_also_ask')
if js.get('top_ads'): features.append('ads')
return features
with open('gsc_output.csv', encoding='utf-8') as fin, open(OUT_FILE,'w',newline='',encoding='utf-8') as fout:
reader = csv.DictReader(fin, delimiter=';')
writer = csv.writer(fout, delimiter=';')
writer.writerow(['keyword','url','clicks','impressions','ctr','position','volume','kd','cpc','serp_features'])
for row in reader:
kw = row['keyword']
metrics = fetch_ahrefs_metrics(kw)
features = fetch_serp_features(kw)
writer.writerow([kw, row['url'], row['clicks'], row['impressions'], row['ctr'], row['position'],
metrics.get('volume',0), metrics.get('kd',0), metrics.get('cpc',0.0), ';'.join(features)])
time.sleep(1) # Rate limiting
Mapping‑Hinweis: Ahrefs‑Antworten unterscheiden sich nach API‑Plan und Version; prüfen Sie die tatsächliche JSON‑Struktur. Falls kein Ahrefs verfügbar ist, kann eine heuristische Schätzung (z. B. auf Basis von Top‑10‑Domain‑Autorität) KD annähern — mit geringerer Genauigkeit.
Performance: Achten Sie auf Rate Limits. Das Beispiel setzt sleep(1). Höhere Volumina benötigen Batch‑Mechaniken oder Bulk‑Requests.
Schritt 3 — Priorisierung & Auswahl der Top‑5 (Logik: Top‑3‑Wahrscheinlichkeit × Volumen × Intent)
1. Prioritätsberechnungen beschleunigen Entscheidungsprozesse erheblich. Die angewandte Formel kombiniert die Chance, in die Top‑3 zu springen, das Suchvolumen und die Intent‑Relevanz. Das Ergebnis ist ein Score zur Selektion der Top‑5 Chancen per Domain oder Cluster.
Definition der Kernwerte:
- P_top3 — Wahrscheinlichkeit, Top‑3 zu erreichen (0–1). Abgeleitet aus aktueller Position.
- Volume — monatliches Suchvolumen (Ahrefs).
- IntentScore — 1 (TOFU), 2 (MOFU), 3 (BOFU). BOFU wird höher gewichtet.
Beispiel‑Formel (implementierbar in Python):
def p_top3_from_position(pos):
if pos <= 0: return 0.02
if pos <= 3: return 0.9
if pos <= 10: return 0.35
return max(0.02, 0.1 * (10/pos))
score = p_top3_from_position(position) * volume * intent_score / (1 + kd/100)
Die Formel multipliziert P_top3 mit Volumen und Intent. KD wirkt als Gegenkraft — höhere KD reduziert den Score. Die Division durch (1 + kd/100) skaliert den Einfluss von KD linear; das ist bewusst konservativ.
Intent‑Erkennung erfolgt automatisch per Pattern‑Matching auf Keywords (z. B. „beste“, „vergleich“, „kostenlos“, „demo“, „trial“). Alternativ füttern Sie ein Lookup mit Sales‑Feedback. Intents sollten regelmäßig validiert werden.
Top‑5 Auswahl: Gruppieren Sie Ergebnisse nach Landingpage oder Cluster und wählen Sie die fünf höchsten Scores pro Monat. Exportieren Sie diese Top‑5 in eine Ticketliste für Content, CRO oder Tech‑Teams.
Schritt 4 — CSV‑Export & Beispiel‑Output
Die finale CSV aggregiert alle relevanten Felder und enthält den Score. Verwenden Sie einen stabilen Exportprozess, der bei Wiederholung die Historie anhängt oder versioniert. Unten ein Python‑Snippet für den finalen Export, gefolgt von einem Beispiel‑Output (zeilenbasiert).
# final_export.py (Anschluss an previous scripts)
import csv, datetime
from pathlib import Path
IN_FILE = 'enriched_keywords.csv'
OUT_FILE = f'keyword_priority_{datetime.date.today().isoformat()}.csv'
def compute_score(row):
pos = float(row.get('position',0))
vol = int(row.get('volume',0))
kd = float(row.get('kd',0))
# naive intent mapping
kw = row.get('keyword','').lower()
intent = 3 if any(x in kw for x in ['demo','trial','kaufen','preise']) else (2 if 'vergleich' in kw or 'alternativen' in kw else 1)
p_top3 = 0.9 if pos<=3 else (0.35 if pos<=10 else max(0.02, 0.1*(10/pos)))
return p_top3 * vol * intent / (1 + kd/100)
with open(IN_FILE, encoding='utf-8') as fin, open(OUT_FILE,'w',newline='',encoding='utf-8') as fout:
reader = csv.DictReader(fin, delimiter=';')
writer = csv.writer(fout, delimiter=';')
writer.writerow(['keyword','country','device','volume','position','url','clicks','impr','ctr','kd','cpc','serp_features','intent','score'])
for row in reader:
score = compute_score(row)
writer.writerow([row['keyword'],'DE','MOBILE',row.get('volume',0),row.get('position',0),row.get('url',''),row.get('clicks',0),row.get('impressions',0),row.get('ctr',0),row.get('kd',0),row.get('cpc',0),row.get('serp_features',''), '', round(score,2)])
Beispiel‑Output (erste Zeilen):
keyword;country;device;volume;position;url;clicks;impr;ctr;kd;cpc;serp_features;intent;score
"saas crm demo";DE;MOBILE;900;5;https://example.de/crm;45;1200;0.0375;32;2.5;"featured_snippet";3;85.5
"crm vergleich";DE;MOBILE;1200;12;https://example.de/vergleich;20;800;0.025;45;1.8;"people_also_ask";2;16.0
Achten Sie auf Dezimalformatierung beim Import. Speichern Sie Exporte versioniert, z. B. in einem S3‑Bucket oder Dateisystem für Audits.
Fehlerbehandlung, Performance‑Tips & Betrieb (Scheduling, Rate‑Limits)
Skripte laufen erst zuverlässig in Produktivbetrieb, wenn Fehlerbehandlung und Rate‑Limit‑Management sauber implementiert sind. Sorgen Sie für Retries, Exponential Backoff und eine Dead‑Letter‑Queue für problematische Keywords.
Praktische Regeln:
- Implementieren Sie Retry mit Backoff (max 5 Versuche). Kurzzeitfehler (HTTP 429, 5xx) neu versuchen.
- Batchen Sie Ahrefs‑Anfragen; nutzen Sie Bulk‑Endpoints oder planbare Raten.
- Bewahren Sie alle API‑Antworten für 30 Tage, um Inkonsistenzen zu debuggen.
- Verwenden Sie Job‑Runner (cron, Airflow, GitHub Actions). Cron ist einfach; für komplexe SLAs nutzen Sie Airflow.
Bash‑Cron‑Beispiel (täglich 03:00):
# crontab -e
0 3 * * * /usr/bin/env bash -lc "cd /srv/seo-scripts && /usr/bin/python3 gsc_fetch.py && /usr/bin/python3 enrich_with_ahrefs.py && /usr/bin/python3 final_export.py >> /var/log/seo-keyword-script.log 2>&1"
Monitoring & Alerts: Senden Sie bei fehlgeschlagenen Jobs eine Slack‑Notification oder E‑Mail. Speichern Sie Job‑Exit‑Codes und sende Alerts bei >3 aufeinanderfolgenden Fehlern. Für Rate‑Limits: Verwenden Sie ein Token‑Bucket‑Pattern, um Bursts zu vermeiden.
Leichtgewichtige Performance‑Tipps: Persistente HTTP‑Sessions (requests.Session), parallele Worker mit begrenzter Anzahl (ThreadPoolExecutor mit max_workers=5) und Caching von Ahrefs‑Antworten für 30 Tage reduzieren API‑Kosten. Caching ist wie ein Werkzeugkasten: wiederverwendbare Teile liegen griffbereit und sparen Zeit.
Kurzanleitung: Beitrag für das Hauptkeyword optimieren (Title, H1, Meta, interne Verlinkung)
Technische Analysen nützen wenig ohne passende Publikations‑Form. Optimieren Sie Artikel, damit er für das Zielkeyword „Keyword‑Analyse‑Skript erstellen“ rankt. Beginnen Sie bei Title und H1, enden Sie bei interner Linkstruktur.
Konkrete Empfehlungen:
- Title (60 Zeichen): Keyword‑Analyse‑Skript erstellen — GSC + Ahrefs (google.de, Mobile)
- H1 (sichtbar): Keyword‑Analyse‑Skript erstellen: GSC + Ahrefs (google.de, Mobile) — Schritt‑für‑Schritt
- Meta‑Description (max. 155 Zeichen): Anleitung mit Python/Bash, GSC‑Abfragen, Ahrefs‑Anreicherung und CSV‑Export zur Priorisierung von Keywords.
- URL‑Slug: /keyword-analyse-skript-gsc-ahrefs-mobile/
Content‑Struktur: Lead mit kurzem Use‑Case (2–3 Sätze), danach die Schritte als H2/H3, gefolgt von Code‑Blöcken und CSV‑Beispielen. Setzen Sie ein FAQ‑Schema via JSON‑LD für AEO. Nutzen Sie H2/H3 sequenziell und semantisch logisch.
Interne Verlinkung: Verlinken Sie auf folgende Ressourcen innerhalb der Domain:
- GSC‑HowTo (technische Anleitung)
- Ahrefs/SerpApi‑Integrationen
- Guide zu Content‑Priorisierung
Anchor‑Text: Verwenden Sie keywordsparsame, aber präzise Anchor‑Texte wie „Keyword‑Priorisierungsskript“ oder „GSC‑Export Anleitung“. Zwei CTAs: „Repo klonen“ und „Skript auf Staging testen“. Variieren Sie die Formulierungen.
FAQ (Berechtigungen, Kosten, Alternativen)
Berechtigungen: Das Skript benötigt Zugriff auf die Search Console‑Property als Eigentümer oder mit ausreichenden Leserechten. Für Service‑Accounts kann Domain‑Verknüpfung oder Delegation erforderlich sein. Testen Sie zuerst mit Ihrem Nutzerkonto, bevor Sie Service‑Accounts einrichten.
API‑Kosten: Ahrefs ist kostenpflichtig; Preise variieren nach Plan. SerpApi nutzt ein Pay‑Per‑Use‑Modell und eignet sich für SERP‑Feature‑Ermittlungen. Die Google Search Console API ist kostenfrei, unterliegt aber Quotas. Kalkulieren Sie Ahrefs‑Calls pro Keyword und nutzen Sie Caching, um Kosten zu senken.
Alternativen zu Ahrefs: SEMrush, Moz oder kostenfreie Tools (z. B. Keyword Planner für CPC/Volumen) können genutzt werden. Jede Alternative ändert Mapping und Genauigkeit. Für SERP‑Features bleibt SerpApi eine solide Option.
Laufhäufigkeit: Empfehlenswert ist ein wöchentlicher Job für Monitoring und ein monatlicher vollständiger Lauf für Priorisierung. Tägliche Läufe sind möglich, steigern aber API‑Kosten. Planen Sie die Frequenz nach Team‑Workflow und Budget.
Weiterführende Ressourcen & GitHub‑Repo mit Script
Ein praktisches Repo mit Startercode, Beispiel‑.env und Basis‑Workflows ist auf GitHub verfügbar. Dort finden Sie auch Issues für Anpassungen, eine CI‑Pipeline (GitHub Actions) und Beispieloutputs. Link: https://github.com/ihreorg/keyword-analyse-skript (Template‑Repo, 2026).
Empfohlene Ressourcen:
- Google Search Console API Docs — Google Cloud (aktualisiert 2026)
- Ahrefs API Docs — Ahrefs (API V2/V3: prüfen Sie Ihre Version)
- SerpApi Docs — SerpApi (mobile parameter für google.de)
- Python paket: google-api-python-client, google-auth, requests, python-dotenv
Klonen Sie das Repo, passen Sie die config an und führen Sie den ersten Lauf in einer Staging‑Umgebung aus. Wenn Sie Unterstützung benötigen, öffnen Sie ein Issue im Repo. Viel Erfolg beim Aufbau Ihrer reproduzierbaren Keyword‑Analyse‑Pipeline.
Lege los.