Heim BlogWeb-Scraping Erstellen Sie Ihren eigenen Keyword-Rank-Checker mit PHP

Erstellen Sie Ihren eigenen Keyword-Rank-Checker mit PHP

von Kadek

Bei der Rangprüfung handelt es sich um den Prozess der Überwachung der Position der Seiten Ihrer Website im SERP für bestimmte Schlüsselwörter. Dies ist ein entscheidender Teil der Suchmaschinenoptimierung, da es Ihnen hilft, die Sichtbarkeit Ihrer Website bei relevanten Suchanfragen zu verstehen und Verbesserungsmöglichkeiten zu identifizieren. Es sind viele vorgefertigte Lösungen und Dienste zur Rangprüfung verfügbar, diese weisen jedoch häufig Einschränkungen auf, wie z. B. geringe Flexibilität und hohe Kosten.

In diesem Artikel erfahren Sie, wie Sie Ihren Rangprüfer in der Skriptsprache PHP erstellen. PHP ist eine leistungsstarke und vielseitige Sprache, die sich gut für SEO-Aufgaben eignet. Es verfügt über eine große Entwicklergemeinschaft und eine breite Palette an Bibliotheken und Tools.

Vorausgesetzte Technologien

PHP ist eine der beliebtesten und ältesten serverseitigen Skriptsprachen. Es wird häufig in der Webentwicklung verwendet, um dynamische und interaktive Websites zu erstellen. Im vorherigen Artikel haben wir PHP besprochen, wie man eine Entwicklungsumgebung einrichtet und welche Bibliotheken zum Senden von Anfragen und zum Scrapen von Daten verwendet werden können.

In diesem Artikel gehen wir nicht näher auf die zuvor besprochenen Themen ein, sondern listen lediglich die Tools und Bibliotheken auf, die wir verwenden werden:

Alternativ können Sie ein Tool wie XAMPP verwenden, um einen virtuellen Apache-Server für die PHP-Entwicklung zu starten. Dies ist eine gute Option, wenn Sie nicht alle oben genannten Komponenten mühsam installieren und konfigurieren möchten.

Entwicklung des Keyword-Rank-Checker-PHP-Skripts

Keyword-Rank-Checker sind Softwareanwendungen oder Online-Plattformen, die Ihnen dabei helfen, die Ranking-Position Ihrer Website für bestimmte Schlüsselwörter auf den Ergebnisseiten von Suchmaschinen (SERPs) zu verfolgen.

Indem Sie Keyword-Rankings im Laufe der Zeit verfolgen, können Sie die Effektivität Ihrer Bemühungen genau bestimmen, Keywords mit hohem Potenzial bei minimaler Konkurrenz entdecken und die Strategien Ihrer Konkurrenten analysieren. Dieser Prozess, ein integraler Bestandteil der Keyword-Recherche, informiert nicht nur über Ihre SEO-Taktiken, sondern verschafft Ihnen auch einen Wettbewerbsvorteil.

Diese unschätzbar wertvollen Daten unterstützen Ihre SEO-Entscheidungen, leiten die Erstellung von Inhalten, die On-Page-Optimierung und den Linkaufbau und dienen gleichzeitig als Frühwarnsystem für technische Probleme oder Suchmaschinenstrafen.

Scraping von Google-Suchergebnissen mit der SERP-API

Google ist die beliebteste Suchmaschine, daher ist die Verwendung eines Rank-Checkers auf Basis der Google SERP-Ergebnisse sehr gefragt. Um Ihren Keyword-Positionsprüfer zu erstellen, sollten Sie alle Einschränkungen berücksichtigen, die Google dem Scraping auferlegt. Dies ist jedoch immer noch eine relativ machbare Aufgabe, und wir haben bereits darüber geschrieben, wie Sie die Google-Suchergebnisse selbst durchsuchen können.

Die Erstellung eines Google-Rank-Checkers erfordert jedoch das Scrapen und Verarbeiten von Daten. Um den Prozess zu vereinfachen, verwenden wir in diesem Beispiel die Scrape-It.Cloud SERP API, die strukturierte Suchergebnisse bereitstellt, ohne dass Sie selbst Google scrapen müssen. Dieser Ansatz hat mehrere Vorteile:

  1. Die SERP API stellt vorgefertigte und strukturierte Daten bereit.
  2. Es besteht keine Notwendigkeit, Proxys zu verwenden.
  3. Es gibt keine Probleme, CAPTCHAs zu lösen und zu umgehen.
  4. Wenn sich die Struktur der Suchergebnisseite ändert, müssen Sie die Datenverarbeitungslogik nicht ändern, da Sie einen vorgefertigten Datensatz erhalten.
  5. Dieser Ansatz ist viel einfacher und auch für Anfänger gut zu handhaben.

Wenn Sie sich Ihrer Fähigkeiten noch nicht sicher sind, haben wir bereits einen Artikel geschrieben, in dem Sie einen vorgefertigten Rank Checker und Rank Tracker sowie einen Google Scraper in Google Sheets finden. Sie können die vorgefertigte Vorlage verwenden und alle notwendigen Daten erhalten. Wenn Sie jedoch Ihr Tool zur Rangprüfung in PHP erstellen möchten, kann Ihnen dieses Tutorial helfen.

Bibliotheken importieren und eine Anfrage stellen

Wie bereits erwähnt, werden wir Composer zum Importieren von Bibliotheken verwenden. Erstellen Sie dazu eine neue Datei mit dem Namen „composer.json“ und fügen Sie die im Projekt verwendeten Bibliotheken hinzu. Wir werden die httpful-Bibliothek verwenden, sodass der Dateiinhalt wie folgt lautet:

{
    "require": {
        "nategood/httpful": "*"
    }
}

Sie können * auch durch eine bestimmte Bibliotheksversion ersetzen. Wenn Sie sich jedoch nicht sicher sind oder nur die neueste kompatible Version verwenden möchten, lassen Sie *.

Erstellen Sie eine Datei mit der Erweiterung .php und importieren Sie die erforderlichen Module:

<?php
require 'vendor/autoload.php'; 
use Httpful\Request;

// Here will be code

?>

Legen Sie die Parameter fest, die wir an die API übergeben. Die vollständige Liste finden Sie in der offiziellen Dokumentation, wir verwenden jedoch nur die Grundlagen:

$location = 'Austin,Texas,United States';
$query = 'Coffee';
$filter = 1;
$domain = 'google.com';
$gl="us";
$hl="en";
$deviceType="desktop";

Der kritischste Parameter ist der Inhalt der Variablen $query, die das Schlüsselwort oder die Phrase speichert, für die die Abfrage ausgeführt wird. Sie können auch die Lokalisierung und Sprache der Suchmaschine konfigurieren, um die relevantesten Daten zu erhalten.

Legen Sie die Domäne der Ressource fest, für die die Positionssuche durchgeführt werden soll:

$searchedDomain = 'wikipedia.org'; 

Wir müssen auch den Anforderungsheader angeben, um den eindeutigen API-Schlüssel zu übergeben, der in Ihrem Konto nach der Registrierung auf der Scrape-It.Cloud-Website zu finden ist:

$headers = array(
    'x-api-key' => YOUR-API-KEY',
);

Stellen Sie dann die Anforderungszeichenfolge zusammen:

$url = sprintf(
    'https://api.scrape-it.cloud/scrape/google?location=%s&q=%s&filter=%d&domain=%s&gl=%s&hl=%s&deviceType=%s',
    rawurlencode($location),
    rawurlencode($query),
    $filter,
    rawurlencode($domain),
    rawurlencode($gl),
    rawurlencode($hl),
    rawurlencode($deviceType)
);

Und führen Sie die resultierende Anfrage aus:

$response = Request::get($url)
    ->addHeaders($headers)
    ->send();

Anschließend erfolgt auf die Anfrage eine Antwort, die von uns weiterverarbeitet wird.

Analysieren und Extrahieren von Keyword-Rängen

Die SERP-API-Antwort gibt ein JSON-Objekt mit den erforderlichen Daten zurück. Bevor wir mit dem Abrufen der erforderlichen Parameter fortfahren, werfen wir einen Blick auf die JSON-Antwortstruktur:


Die SERP-API-Antwort ist ein JSON-Objekt, das die Daten enthält, die zur Überprüfung des Rankings einer Website auf einer Suchmaschinen-Ergebnisseite (SERP) erforderlich sind.  Das JSON-Objekt enthält das Attribut „organicResults“, das die URLs der Websites enthält, die für den Suchbegriff eingestuft werden.  Zusätzlich zum Attribut „organicResults“ kann das JSON-Objekt auch andere relevante Daten enthalten.
Die JSON-Antwortstruktur

Für den einfachsten Rangprüfer können wir den Inhalt des Attributs „organicResults“ verwenden. Wir werden jedoch später das Datum und die Uhrzeit der Prüfung sowie den Link zur Abfrageseite hinzufügen und zeigen, wie man Daten aus Rich Snippets erhält.

Lassen Sie uns die JSON-Antwort dekodieren und das Ergebnis zur weiteren Verarbeitung in einer Variablen speichern.

$data = json_decode($response->raw_body, true);

Überprüfen Sie zunächst, ob die JSON-Antwort leer ist. Wenn die Anfrage fehlschlägt, sollten wir das Skript stoppen und eine Fehlermeldung anzeigen.

if (!is_array($data) || empty($data)) {
    die('Error with JSON decoding or Empty data');
}

Als nächstes sollten wir sicherstellen, dass die OrganicResults-Eigenschaft Daten enthält und ein Array ist. Wenn nicht, sollten wir auch das Skript stoppen.

if (isset($data('organicResults')) && is_array($data('organicResults')) && !empty($data('organicResults'))) {
    // Here will be code
} else {
    die('organicResults is empty');
}

Erstellen wir nun eine Variable zum Speichern der Positionsdaten.

    $result = array();

Durchlaufen Sie das OrganicResults-Array und finden Sie die Ergebnisse, die die Domäne in der URL enthalten.

    foreach ($data('organicResults') as $item) {
        if (isset($item('link')) && strpos($item('link'), $searchedDomain) !== false) {
            // Here will be code
        }
    }

Schließlich können wir die Position, das Google-Keyword, die Domain und andere Daten in der Ergebnisvariablen speichern.

            $result() = array(
                'position' => $item('position'),
                'domain' => $searchedDomain,
                'keyword'=> $query,
                'link' => $item('link'), 
                'title' => $item('title'),
                'displayedLink' => $item('displayedLink'),
                'source' => $item('source'),
                'snippet' => $item('snippet'),            
       );

In diesem Schritt verfügen Sie über die gewünschten Daten in der Ergebnisvariablen. Sie können es entweder weiterverarbeiten, auf dem Bildschirm anzeigen oder in einem praktischen Format für die zukünftige Verwendung oder Speicherung speichern.

Ergebnisse speichern und präsentieren

Da Suchmaschinen-Ranking-Daten eine bestimmte Struktur haben, ist es sehr praktisch, sie in einem Tabellenformat zu speichern. CSV ist eines der beliebtesten Formate und wird von den meisten Betriebssystemen unterstützt. Erwägen Sie daher, den erhaltenen Datensatz Schritt für Schritt in einer CSV-Datei zu speichern.

Legen Sie den Namen der Datei mit Rangdaten fest:

    $csvFilePath="rank_checker.csv";

Überprüfen Sie, ob die Datei zum aktuellen Zeitpunkt existiert:

    $fileExists = file_exists($csvFilePath);

Öffnen Sie dann die Datei, um am Ende der Datei Daten hinzuzufügen. Wenn Sie möchten, dass die Datei jedes Mal überschrieben wird, verwenden Sie den Parameter „w“ anstelle von „a“.

    $file = fopen($csvFilePath, 'a'); 

Überprüfen wir nun, ob die Datei leer ist oder vorher nicht existierte, und legen dann die Spaltenüberschriften fest:

    if (!$fileExists || filesize($csvFilePath) == 0) {
        fputcsv($file, array_keys($result(0)));
    }

Geben Sie die gesammelten Daten zeilenweise ein, falls der Domainname mehrmals in den Suchergebnissen gefunden wurde:

    foreach ($result as $row) {
        fputcsv($file, $row);
    }

Vergessen Sie zum Schluss nicht, die Datei zu schließen:

    fclose($file);

Um zu erfahren, ob die Daten erfolgreich gespeichert wurden, können Sie eine Benachrichtigung an die Befehlszeile ausgeben:

    echo 'Data saved to CSV file: ' . $csvFilePath;

Die letzte Aktion ist nicht obligatorisch, ermöglicht Ihnen jedoch einen Überblick über den aktuellen Stand der Skriptausführung. Als Ergebnis der Ausführung erhalten Sie eine Datei mit ähnlichem Inhalt:


Die CSV-Datei enthält die Ergebnisse einer Rangprüfung.  Die Datei wird bei jedem Start des Skripts aktualisiert, sodass Sie die Positionsänderungen Ihrer Schlüsselwörter im Laufe der Zeit verfolgen können.
Eine CSV-Datei mit Rangprüfungsergebnissen.

Beim Starten des Skripts wird der Inhalt der Datei aktualisiert, und im Laufe der Zeit stehen Ihnen detaillierte Daten zu den Positionsänderungen in einem praktischen Format zur Verfügung.

Planung und Automatisierung

Um die Ranking-Position zu automatisieren, können Sie die integrierten Systemfunktionen nutzen. Unter Windows wird beispielsweise eine Aufgabe im Taskplaner erstellt und unter Linux wird Cron verwendet. Das Hinzufügen von Aufgaben zum Taskplaner ist visuell und intuitiv, daher werden wir nicht weiter darauf eingehen.

Lassen Sie uns überlegen, wie Sie den PHP Rank Checker mit einer Starthäufigkeit von einmal täglich zu Cron hinzufügen. Dazu müssen Sie den Speicherort des PHP-Pakets und Ihren PHP-Rank-Checker kennen.


Der Befehl crontab -e öffnet die Cron-Job-Konfigurationsdatei und ermöglicht Ihnen, die Planung von Aufgaben zu ändern.  In diesem Fall fügen Sie eine neue Aufgabe hinzu, um das PHP Rank Checker-Skript täglich auszuführen.
Ein Computerbildschirm, auf dem die Terminalschnittstelle mit dem Befehl crontab angezeigt wird.

Anschließend müssen Sie eine Regel für Cron festlegen. Hierzu können Sie einen Aufgabengenerierungsdienst nutzen. In unserem Fall reicht es für einen täglichen Start aus, @daily zu verwenden.

Gehen wir nun zur Cron-Job-Konfigurationsdatei. Geben Sie dazu den folgenden Befehl in das Terminal ein:

crontab -e

Fügen Sie dann eine neue Aufgabenzeile in der Form „Frequenz Location-of-PHP-Package Location-of-Rank-Checker“ hinzu, zum Beispiel:

@daily /usr/bin/php /root/php_script/rank.php

Speichern Sie anschließend Ihre Änderungen und schließen Sie den Editor. Sie können vorhandene Aufgaben später mit dem folgenden Befehl anzeigen:

crontab -l

Um eine Aufgabe aus Cron zu löschen, können Sie denselben Befehl verwenden, um den Editor zu starten, wenn Sie eine neue Aufgabe hinzufügen. Löschen Sie einfach die erforderliche Zeile.

Verbesserung des PHP-Skripts zur Keyword-Rank-Prüfung

Die vorherige Version des SERP-Checkers ist zwar funktionsfähig, speichert jedoch nicht alle gewünschten Daten. Wie Sie an der Struktur des zurückgegebenen JSON erkennen können, können wir eine größere Anzahl von Parametern erhalten. Deshalb ergänzen wir das vorherige Skript und speichern die nützlichsten.

SERP-Schnappschuss

Einer der wichtigsten und nützlichsten Parameter, die wir von der SERP-API erhalten, ist der SERP-Snapshot. In unserem Fall handelt es sich um einen Link, auf den Sie klicken können, um zu sehen, wie die Suchergebnisse zum Zeitpunkt der Positionsprüfung aussahen. Dies ist sehr wichtig, wenn Sie beispielsweise die Top-10-Ergebnisse wissen möchten, wer auf dem ersten Platz war und wer die Positionen vor und nach Ihrer Ressource besetzt hat.

Der Link zum SERP-Snapshot befindet sich im googleHtmlFile-Attribut, also fügen wir unserer $results-Variablen einige zusätzliche Parameter hinzu:

            $result() = array(
                'position' => $item('position'),
                'domain' => $searchedDomain,
                'keyword'=> $query,
                'link' => $item('link'),
                'title' => $item('title'),
                'displayedLink' => $item('displayedLink'),
                'source' => $item('source'),
                'snippet' => $item('snippet'),
                'googleUrl' => $data('requestMetadata')('googleUrl'),
                'googleHtmlFile' => $data('requestMetadata')('googleHtmlFile'),
            );

Der Rest des Codes bleibt unverändert.

Ein weiterer nützlicher Parameter ist das Datum und die Uhrzeit. Obwohl wir Daten sammeln und Veränderungen im Laufe der Zeit beobachten können, können wir keine genauen Diagramme erstellen, ohne die spezifischen Daten jeder Prüfung zu kennen. Um dieses Problem zu beheben, fügen wir der Variablen $result einen neuen Parameter hinzu:

                'position' => $item('position'),
                'domain' => $searchedDomain,
                'keyword'=> $query,
                'link' => $item('link'),
                'title' => $item('title'),
                'displayedLink' => $item('displayedLink'),
                'source' => $item('source'),
                'snippet' => $item('snippet'),
                'googleUrl' => $data('requestMetadata')('googleUrl'),
                'googleHtmlFile' => $data('requestMetadata')('googleHtmlFile'),
                'date' => date('Y-m-d H:i:s'),

Zusätzlich zu den Suchergebnissen können Sie auch auf andere Daten aus der JSON-Antwort zugreifen, z. B. „Personen stellen auch“ oder „Ähnliche Fragen“. Um beispielsweise verwandte Fragendaten abzurufen, können Sie den folgenden Code verwenden:

    $relatedQuestions = array();

    foreach ($data('relatedQuestions') as $question) {
        $relatedQuestions() = array(
            'title' => $question('title'),
            'link' => $question('link'),
            'source' => $question('source'),
            'snippet' => $question('snippet'),
        );
    }

Somit können Sie das Format und die Menge der Daten, die Sie von der Google SERP API erhalten, anpassen.

Vollständiger Code des Rangprüfers

Hier finden Sie den vollständigen Code des Rank-Checkers auf PHP:

<?php
require 'vendor/autoload.php'; 

use Httpful\Request;

// Set your params
$location = 'Austin,Texas,United States';
$query = 'Coffee';
$filter = 1;
$domain = 'google.com';
$gl="us";
$hl="en";
$deviceType="desktop";

// Set your domain to check 
$searchedDomain = 'wikipedia.org'; 

// Set your api-key
$headers = array(
    'x-api-key' => 'YOUR-API-KEY',
);

$url = sprintf(
    'https://api.scrape-it.cloud/scrape/google?location=%s&q=%s&filter=%d&domain=%s&gl=%s&hl=%s&deviceType=%s',
    rawurlencode($location),
    rawurlencode($query),
    $filter,
    rawurlencode($domain),
    rawurlencode($gl),
    rawurlencode($hl),
    rawurlencode($deviceType)
);

$response = Request::get($url)
    ->addHeaders($headers)
    ->send();

$data = json_decode($response->raw_body, true);

if (!is_array($data) || empty($data)) {
    die('Error with JSON decoding or Empty data');
}

if (isset($data('organicResults')) && is_array($data('organicResults')) && !empty($data('organicResults'))) {
    $result = array();
    foreach ($data('organicResults') as $item) {
        if (isset($item('link')) && strpos($item('link'), $searchedDomain) !== false) {
            $result() = array(
                'position' => $item('position'),
                'domain' => $searchedDomain,
                'keyword'=> $query,
                'link' => $item('link'),
                'title' => $item('title'),
                'displayedLink' => $item('displayedLink'),
                'source' => $item('source'),
                'snippet' => $item('snippet'),
                'googleUrl' => $data('requestMetadata')('googleUrl'),
                'googleHtmlFile' => $data('requestMetadata')('googleHtmlFile'),
                'date' => date('Y-m-d H:i:s'),
            );
        }
    }

    $csvFilePath="rank_checker.csv";
    $fileExists = file_exists($csvFilePath);

    $file = fopen($csvFilePath, 'a'); 

    if (!$fileExists || filesize($csvFilePath) == 0) {
        fputcsv($file, array_keys($result(0)));
    }

    foreach ($result as $row) {
        fputcsv($file, $row);
    }

    fclose($file);

    echo 'Data saved to CSV file: ' . $csvFilePath;
} else {
    die('organicResults is empty');
}

?>

Abschluss

In diesem Artikel haben wir Schritt für Schritt den Prozess der Erstellung eines benutzerdefinierten Rank-Checkers in PHP mithilfe der SERP-API besprochen. Zusätzlich zum Abrufen der Grundparameter haben wir auch besprochen, wie man einen Anforderungs-Snapshot erhält und speichert und wie man das aktuelle Datum und die aktuelle Uhrzeit erhält.

Der Einfachheit halber haben wir am Ende des Artikels das gesamte Skript bereitgestellt, das Ihnen helfen kann, die Prinzipien der Erstellung eines Rank Checkers basierend auf der SERP-API besser zu verstehen.

Allerdings gibt die SERP-API, wie bereits erwähnt, mehr Daten zurück, als wir in unserem Skript verwendet haben. Wenn Sie die JSON-Antwortstruktur kennen, können Sie Ihr Tool daher flexibel gestalten und alle benötigten Daten übertragen.

Related Posts

Hinterlasse einen Kommentar