Guide

Keyword-Clustering nach SERP-Ähnlichkeit

Zwei Keywords, bei denen Google dieselben Seiten zeigt, bedienen dieselbe Suchintention: Eine Seite sollte beide abdecken. Hier sind die Methode, die richtigen Schwellenwerte und ein sofort einsetzbares Skript.

Das Wichtigste in Kürze
  • Zwei Keywords gehören zur selben Gruppe, wenn ihre Top 10 genug URLs teilen: 3 bis 4 gemeinsame URLs sind der gängigste Schwellenwert.
  • Die Methode stützt sich auf das, was Google tatsächlich anzeigt, nicht auf die Ähnlichkeit der Wörter: Zwei ähnlich klingende Keywords können zusammen landen oder auch nicht.
  • Mit der Semscraper API kosten 1.000 Keywords auf Seite 1 0,30 €, und das Python-Skript in diesem Artikel erledigt den Rest.

Das Prinzip

Das Clustering nach SERP-Ähnlichkeit beruht auf einer einfachen Idee: Zeigt Google für zwei Suchanfragen dieselben Seiten, versteht es sie als dieselbe Suchintention. Eine einzige Seite Ihrer Website kann dann für beide ranken. Umgekehrt erfordern zwei Keywords, die sich ähneln, deren SERPs aber nichts gemeinsam haben, zwei getrennte Seiten.

Die Methode ist zuverlässiger als eine Gruppierung nach den Wörtern selbst, denn sie stützt sich auf das Urteil von Google, nicht auf die Ähnlichkeit von Zeichenketten. „Laufschuhe Damen“ und „Joggingschuhe für Frauen“ haben kaum ein Wort gemeinsam, ihre SERPs überschneiden sich aber oft stark.

Die Schritte

  1. Die Top 10 erfassen für jedes Keyword, im richtigen Land, in der richtigen Sprache und auf dem richtigen Gerät.
  2. Die URLs der organischen Ergebnisse extrahieren, ohne Anzeigen, Videos und andere Blöcke.
  3. Die Keywords paarweise vergleichen: Wie viele URLs teilen sie?
  4. Gruppieren: die Paare oberhalb eines Schwellenwerts zusammenfassen.

Den Schwellenwert wählen

Gemeinsame URLs in den Top 10Wirkung
2Breite Gruppen, mit dem Risiko, benachbarte Suchintentionen zu vermischen
3 oder 4Die gängigste Einstellung: stimmige Gruppen ohne allzu starke Zersplitterung
5 und mehrSehr enge Gruppen, viele isolierte Keywords

Beginnen Sie bei 3, prüfen Sie ein Dutzend Gruppen von Hand und passen Sie dann an. Der richtige Schwellenwert hängt von Ihrem Thema ab: E-Commerce-SERPs, die von wenigen großen Websites dominiert werden, überschneiden sich leichter als redaktionelle.

Strikte oder lockere Gruppen

Es gibt zwei Ansätze. Beim strikten Clustering muss jedes Keyword einer Gruppe den Schwellenwert mit einem Pivot-Keyword erreichen, in der Regel dem meistgesuchten der Gruppe. Die Gruppen sind sauber, und es ist der Ansatz des Skripts unten. Beim lockeren Clustering genügt es, wenn ein Keyword mit einem einzigen Mitglied der Gruppe verbunden ist: Die Gruppen wachsen durch Verkettung, mit dem Risiko, von einer Suchintention zur nächsten abzudriften.

Um zu entscheiden, welche Seiten Sie erstellen oder zusammenführen, ist das strikte Clustering fast immer die richtige Wahl.

Das vollständige Skript

Dieses Skript sendet Ihre Keywords an die API, ruft die SERPs ab und bildet dann die Gruppen. Ersetzen Sie den API-Schlüssel, die Keyword-Liste und bei Bedarf den Schwellenwert. Die Keywords sollten vom meistgesuchten zum am wenigsten gesuchten sortiert sein, damit der Pivot jeder Gruppe ihre Hauptsuchanfrage ist.

clustering.py
import time
import requests

API_KEY = "API_KEY"
API = "https://api.semscraper.com/v1/serp"
HEADERS = {"Authorization": "Bearer " + API_KEY}
THRESHOLD = 3

# vom meistgesuchten zum am wenigsten gesuchten
keywords = ["laufschuhe damen", "joggingschuhe frauen", "trailschuhe damen"]

# 1. Erfassungen in Paketen von 1.000 anlegen (Maximum pro Aufruf): Top 10, google.de, Desktop
ids = []
for i in range(0, len(keywords), 1000):
    items = [{"search_engine": "google_search", "keyword": k, "device": "desktop",
              "location": "de", "language": "de", "depth": 1} for k in keywords[i:i + 1000]]
    created = requests.post(API, json=items, headers=HEADERS).json()
    ids += [row["id"] for row in created["data"]]

# 2. SERPs in Paketen von 100 IDs abrufen, höchstens 10 Minuten lang
serps, pending, attempts = {}, ids, 0
while pending and attempts < 60:
    attempts += 1
    time.sleep(10)
    done = set()
    for i in range(0, len(pending), 100):
        res = requests.get(API, params={"ids": ",".join(pending[i:i + 100]), "output": "json"}, headers=HEADERS).json()
        for row in res["data"]:
            if row["status"] == "done":
                urls = set()
                for block in row["results"]:
                    if block["type"] == "organic":
                        urls.update(item["url"].rstrip("/") for item in block["items"])
                serps[row["keyword"]] = urls
                done.add(row["id"])
    pending = [x for x in pending if x not in done]

# 3. striktes Clustering um ein Pivot-Keyword
clusters, seen = [], set()
for pivot in keywords:
    if pivot in seen or pivot not in serps:
        continue
    group = [pivot]
    seen.add(pivot)
    for other in keywords:
        if other not in seen and other in serps:
            if len(serps[pivot] & serps[other]) >= THRESHOLD:
                group.append(other)
                seen.add(other)
    clusters.append(group)

for group in clusters:
    print(" | ".join(group))

Die bei der Erstellung zurückgegebenen IDs werden anschließend, durch Kommas getrennt, an den Abruf übergeben, höchstens 100 pro Aufruf; die Erstellung nimmt 1.000 Keywords pro Aufruf an, daher die beiden Schleifen. Bei großen Volumen nutzen Sie besser eine Callback-URL: Die API sendet Ihnen die Ergebnisse, sobald sie fertig sind, ganz ohne Polling-Schleife.

Fallstricke, die Sie vermeiden sollten

  • Standorte oder Geräte mischen: Vergleichen Sie SERPs, die unter denselben Bedingungen erfasst wurden, sonst stammen die Unterschiede vom Kontext, nicht von der Suchintention. Bei einem lokalen Thema geolokalisieren Sie alle Suchanfragen in derselben Stadt.
  • SERPs von verschiedenen Tagen vergleichen: Erfassen Sie den gesamten Batch am selben Tag.
  • Rohe URLs behalten: Normalisieren Sie mindestens den abschließenden Schrägstrich und gegebenenfalls die Parameter, damit identische URLs nicht übersehen werden.
  • Nicht-organische Blöcke mitzählen: Videos, News oder Anzeigen ändern sich stündlich und verfälschen den Vergleich.

Was es kostet

Eine einzige Ergebnisseite reicht, um Top 10 zu vergleichen: Bei Semscraper kosten 1.000 Keywords 0,30 €, 10.000 Keywords 3 €. Mit den 1.000 kostenlosen Anfragen bei der Registrierung testen Sie die Methode an einem echten Keyword-Set. Die Erfassungsparameter sind auf der Seite Google Search API beschrieben.

Testen Sie es mit Ihren eigenen Keywords

1.000 kostenlose SERPs, ohne Kreditkarte.