Patrick Lürwer: Javascript SEO: Pre- vs. Post-Rendering-Abgleich von Screaming-Frog-Crawls mit R

JavaScript SEO: Pre- vs. Post-Rendering-Abgleich von Screaming-Frog-Crawls mit R

tl;dr

  • Der Blogbeitrag beschreibt ein Framework in Form eines R-Skripts, das ich zum Analysieren von Screaming-Frog-Crawls verwende.
  • Dazu wird die entsprechende Website mit aktiviertem und deaktiviertem JavaScript-Rendering gecrawlt.
  • Die Crawls werden dann in R eingelesen und um einige Metriken angereichert:
      • Indexierbarkeit von Seiten
      • Segmentierung der URLs
    • Google-Analytics-Daten (hier: PageViews)
    • Google-Search-Appearance-Daten (hier: Impressions, Clicks)
    • Interner PageRank der URLs
  • Interne Links werden in eine SQLite-Datenbank geschrieben.
  • Der gerenderte und der nicht gerenderte Crawl werden verglichen:
    • Welche URLs kommen nur in einem der beiden Crawls vor?
    • Für URLs, die in beiden Crawls vorkommen, wird überprüft, ob sich bspw. die Titles & Descriptions, die Wortzahl und die Crawl-Tiefe ändern.
  • Im Rahmen der anschließenden Analyse werden Diagramme generiert, die einen ersten Überblick zur Beantwortung der folgenden Fragen geben:
    • Wie ist der Anteil der (nicht) indexierbaren Seiten?
    • Liegen meine wichtigen Seiten hinsichtlich der Klicktiefe auf einer der vorderen Ebenen?
    • Welche Unterschiede bestehen auf meiner Website, wenn JavaScript aktiviert resp. deaktiviert ist?
    • Welche Verzeichnisse weisen die meisten URLs auf?
    • Welche Segmente weisen die meisten URLs auf?
    • Sind meine wichtigsten Seiten auch aus Nutzersicht die wichtigsten?
Snippet Generator Blogartikel Beitragsbild

Snippet Generator: Snippet schreiben & Snippet optimieren!

Für jeden SEO gehört es zum Standard-Repertoire, Snippets zu schreiben und Snippets zu optimieren. Die Optimierung  der Titles und Descriptions  ist oft ein intensiver Prozess, der viel Kreativität verlangt. Ehe man sich versieht, findet man sich in einem Dickicht aus Browser-Tabs wieder und die Finger schmerzen vom vielen Copy & Paste. Aber wir würden nicht get:traction heißen, wenn wir nicht auch Zugkraft in unsere Meta-Tags bekommen würden! Deshalb zeige ich Euch heute die Basics im Schreiben von Meta-Titles & -Descriptions und wie man diesen Prozess mit unserem Skript für ein Snippet Generator leicht beschleunigen kann. Viel Spaß!

Hier geht’s direkt zum ▶ [get:traction] Snippet Generator ◀!

Titles & Descriptions mit dem RVC-Prinzip schreiben

Eine Frage, auf die jeder eine andere Antwort hat, aber wie Jens Fauldrath so gern sagt: „Die Metas müssen POW haben!“

Wir arbeiten nach dem RVC-Prinzip: Relevance – Value – Call-to-Action. Fangen wir damit an, dass unsere Meta-Angaben relevant (Relevance) sein müssen. Passt das Suchergebnis zur Suchanfrage und greife ich den Inhalt sowie den Intent richtig auf? Ein schöner Title und eine gute Description sollten immer die Keywords beinhalten, zu denen die zu optimierende Seite rankt, also muss ich die Ausgangsposition der Seite kennen, um die Relevanz meiner Snippets zu optimieren.

Darüber hinaus sollten ein gewisser Mehrwert (Value) und meine USPs klar an potenzielle Website-Besucher kommuniziert werden. Und zum Schluss braucht jede gute Meta-Angabe eine Handlungsaufforderung (Call-to-action), um die Klickattraktivität zu gewährleisten.

Wichtig dabei ist immer, die Motivation bzw. den Intent des Suchenden zu beachten. Wer nach Sneakers sucht, will nicht wissen, was das ist, sondern vielmehr, warum der fragliche Shop der beste für ihn ist! Wer eine falsche Erwartungshaltung aufbaut, hinterlässt meist nur unzufriedene Nutzer. Also fokussiert Euch auf den Inhalt Eurer Landingpage!

RVC-Prinzip

Ein Fließtext ist in der Meta-Description generell eher kritisch zu sehen. Besser ist eine kurze und prägnante Vorteilskommunikation, am besten in Form von „Bulletpoints“, welche beispielsweise mit Checkmarks (✔) realisiert werden können. Als USP würde ich Produktvorteile („pflegeleicht“, „bequem“…) sowie Vorteile des gesamten Shops („versandkostenfrei“, „kostenlose Lieferung & Montage“, …) verwenden.

Achtung: Auch hier nichts versprechen, was nicht geboten werden kann, um keine falsche Erwartungshaltung aufzubauen.

Titel-Optimierung -SEO-RVC

Hinweis: Es empfiehlt sich, die HTML-Symbol-Entities für Symbole zu verwenden, d. h., nicht einfach den Haken, sondern die Codes „✔“ oder „✓“ einfügen. In den SERPS wird entsprechend der Haken gesetzt.

Exemplarisch für oben der rohe Description-Code:
„✔“ = dicker Haken ✔
„✓“ = dünner Haken ✓

Viele CMS können derartige Symbole nicht erkennen, deshalb seid Ihr mit den HTML-Symbol-Entities auf der sicheren Seite.

 

Welche Datenquellen sind für Titles & Descriptions notwendig?

Natürlich schreiben wir nicht blind drauf los, sondern holen uns die richtigen Daten, um so effektiv wie möglich zu sein. Ich habe dabei meist drei Browser-Fenster geöffnet, und zwar für Folgendes:

  • GSC-Leistungsdaten aus der Suchanalyse zur aktuellen URL, für die ich Title & Description optimieren will
  • ein Suggest-Tool mit den Suggests zur Hauptsuchphrase des Dokuments
  • ein Snippetgenerator, um zu sehen, wie das Ergebnis idealerweise aussehen würde

Somit hat man drei Tabs geöffnet, um Titles & Descriptions sinnvoll zu optimieren. Schauen wir uns das genauer an!

GSC-Suchanalyse zur Title- & Description-Optimierung

Als Erstes verwenden wir die Suchanalyse der Google Search Console. Sie ist die Grundlage unserer Snippet-Optimierung. In der Suchanalyse wählen wir jetzt alle Metriken aus und filtern nach der Seite, deren Meta-Angaben ich optimieren will. Die Keywords aus dem Bericht sollten meist in absteigender Reihenfolge nach Impressions sortiert werden, um generelle Potenziale schnell erkennen zu können. Die Keywords aus diesem Bericht kann ich dann für meine Snippets verwenden, um den Intent der Nutzer besser aufzufangen.

Beispiel:
Weinherstellung Google Search Console Daten Beispiel für Snippet Optimierung

In diesem Fall ist die Seite zur Weinherstellung stärker auf den Unterschied zwischen Rot- und Weißwein ausgelegt, wobei die Potenziale definitiv in den Phrasen zur „Weinherstellung“ liegen. Im derzeitigen Title ist der Mehrwert der Landingpage nicht ganz klar und kann daher eine falsche Erwartung aufbauen. Um den Intent der Nutzer besser zu treffen, sollten wir den Fokus verlagern und in unserer Vorteilskommunikation stärker auf den Herstellungsprozess eingehen.

Title & Description optimieren mit Search Suggest

Keyword-Suggests: Auch wenn ich meine Potenziale nun analysiert habe, kann ich mir weitere Hilfe von Tools wie AnswerThePublicUbersuggest & Keyword.io holen. Damit lassen sich zusätzliche Keywords in dem gewünschten Themenbereich identifizieren und für meine Snippet-Optimierung nutzen. Meistens schreibt man auch SERP-Snippets ohne vorhandene GSC-Daten, zum Beispiel bei neuen Landingpages oder einem Relaunch. In diesem Fall sind die Keyword-Suggests neben der Detailseite ein wichtiges Instrument für Eure Snippets. Mit den Google Suggests können auch schnell die Absichten der Nutzer erkannt und für die Titles & Descriptions adaptiert werden.

Google Suggests für Wein für Anfänger

Snippet-Generator zur Title- und Description-Optimierung

Snippet-Generatoren: Diese Tools helfen uns dabei, die Darstellung auf der Suchergebnisseite (SERP) nachvollziehen zu können. Der SERP-Simulator oder der SERP Snippet Generator von SISTRIX bieten beide gute Funktionsweisen, um gute Titles und Descriptions zu schreiben. Hier werden die Zeichen- bzw. Pixellänge gezählt, Symbole zur Unterstützung von Aufmerksamkeit verwendet und das aktuelle Snippet einer URL geladen. Das Problem ist, dass uns in diesen Tools die Schritte zur Erstellung guter Titles und Descriptions nicht abgenommen werden. Das heißt, wir finden uns schnell vor einem mit Tabs befüllten Browser wieder, nur um unsere Snippets zu erstellen bzw. zu bearbeiten. Dieser Prozess ist nicht wirklich effizient und kann schnell Nerven kosten. Deshalb haben wir unseren eigenen Snippet Generator gebaut, der all diese Schritte in sich vereint.

[get:traction] Snippet Generator – Effektiv Snippets schreiben & Snippets optimieren

Um schnell alle drei Ansichten zu kombinieren, verwenden wir intern eine eigene Lösung, und zwar unseren [get:traction] Snippet Generator. Dieser vereint Euren ganzen Optimierungsprozess in einem Tool. An dieser Stelle ein Dank an Johannes Kunze, der das Tool ursprünglich entwickelt hat. Mittlerweile wird das Skript als simples Einstiegsprojekt von Studenten im Support gepflegt. Dahinter steckt im Grunde ein einfaches Python-Skript, welches die Datenquellen anzapft, entwickelt und in einem Jupyter Notebook darstellt. Erweitert mit ein paar tollen Plug-ins wird daraus im Handumdrehen eine richtige kleine App, die wir Euch gerne zur Verfügung stellen wollen. Den gesamten Code gibt es natürlich im Github-Repo und dank binder könnt Ihr auch alles sofort live testen.

Johannes Kunze 💘 Jupyter, 🐍 & 🐼
Da ich meine Datenanalysen mittlerweile hauptsächlich in JupyterLab mit Python und Pandas durchführe und die interaktive Entwicklungsumgebung von Jupyter sehr schätze, freue ich mich ungemein darüber, dass der Snippet Generator bei unseren Mitarbeitern Anklang gefunden hat und nun vielleicht auch von dem ein oder anderen SEO da draußen ausprobiert wird. Falls Ihr gern mehr über Jupyter Notebooks bzw. JupyterLab wissen wollt und welche kleinen Helferlein Ihr mit etwas Python für den SEO-Alltag damit basteln könnt, freue ich mich natürlich über Kommentare mit Wünschen und Anregungen. Vom einfachen Nutzen der Sistrix-API, über das Herunterladen und Visualisieren von GSC-Daten bis hin zu komplexeren Analysen ist quasi alles möglich.

Ihr wisst jetzt, wie man gute Titles & Descriptions schreibt und welche Datenquellen man dafür braucht. Unser [get:traction] Snippet-Generator gibt Euch die Möglichkeit, die Keyword-Analyse und die Optimierung in gerade mal einem Fenster durchzuführen. Ihr wollt gleich loslegen? – Dann könnt Ihr hier den ▶ [get:traction] Snippet Generator ◀ ausprobieren!

Funktionsweisen des [get:traction] Snippet Generators

get traction Snippet Generator Funktionsweisen

  1. Hier kann der Google-Account verbunden werden: Es öffnet sich ein Pop-up mit einem Authentifizierungscode, der zur Autorisierung in das Textfeld eingefügt wird.*
  2. Wenn die Autorisierung erfolgt, können hier die Properties ausgewählt werden, auf denen gearbeitet werden soll. Wenn sich zu viele Properties im Account befinden, kann die Filterfunktion verwendet werden, um die Auswahl einzugrenzen.
  3. Es kann eine beliebige URL in der Property eingefügt werden, deren GSC-Daten abgerufen werden. (Idealerweise die URL, die optimiert werden soll.)
  4. Es kann eine beliebige URL einfügt werden, deren Meta-Angaben abgerufen werden. Diese erscheinen dann im Feld 6.
  5. Hier kann ein beliebiges Keyword eingegeben werden, welches über Google Suggest abgefragt wird. Die Suggests erscheinen unter der Eingabe. (Tipp: Es können mehrere Keyword-Suggests verwendet werden.)
  6. Auf der linken Seite erscheinen die in Feld 4 abgefragten Meta-Angaben mit der entsprechenden Zeichenlänge. Auf der rechten Seite erscheinen die in Feld 7 erzeugten Meta-Angaben, ebenfalls mit der entsprechenden Zeichenlänge. Die Länge wird bereits codiert angegeben.
  7. Hier befindet sich die Eingabe für die neuen Titles und Descriptions. Für die Description können die nebenstehenden Symbole verwendet werden. Diese werden als HTML-Symbol-Entities wiedergegeben, um die Interpretierbarkeit von beliebigen CMS zu gewährleisten.

Jetzt könnt Ihr Eure Meta-Titles und -Descriptions effizient in kürzester Zeit optimieren. Das bedeutet auch, dass Ihr nun noch mehr Seiten in kurzer Zeit optimieren könnt – und optimierte Snippets können auf der Suchergebnisseite ganz schön Eindruck machen! Wenn Ihr alle oben genannten Tipps verwendet, kann sich der Prozessablauf maßgeblich verbessern und beschleunigen.

 

Falls Ihr jetzt selbst an unserem Skript basteln wollt, hier noch der Link zum Github-Repo.

Hat Euch der Artikel gefallen? Dann würde ich mich über Feedback sehr freuen! Gerne können wir auch in den Kommentaren weiter diskutieren und optimieren.

 

Darf es noch mehr Effizienz sein? – Schaut Euch mal unseren vorhergehenden Blogbeitrag zur SEO-Indexeffizienz an!

Disclaimer

*Auch wenn Ihr Euren Google-Account angeben und Properties hinterlegen müsst, haben wir keinen Zugriff auf Eure Daten. Diese Daten werden zu keinem Zeitpunkt gespeichert; wir verwenden ebenso wenig ein Tracking für das Tool [get:traction] Snippet GeneratorBinder startet für jeden Nutzer eine Instanz, welche den Code des Github-Repos benutzt. Wenn der Dienst nicht mehr benötigt wird, wird die Instanz ebenfalls vernichtet und es werden alle Daten gelöscht. Auch während der Laufzeit hat niemand Zugriff auf dieselbe URL. Die ganze App läuft also auf einem temporären Server, welcher ein Jupyter Notebook mit dem entsprechenden Python-Code ausführt und in Eurem Browser anzeigt.

Google Search Console & R: gsc_r

Google Search Console & R: Nicht relevante Crawling-Fehler automatisch beheben & löschen

Bei get:traction gehen wir üblicherweise so vor, dass wir bei Neukunden erst einmal einen Blick in die Google Search Console (GSC) werfen, um uns bspw. einen Überblick über die dort aufgeführten Crawling-Fehler zu verschaffen.

Insbesondere die 404-Fehler („Nicht gefunden“) sind hinsichtlich der Nutzer besonders unerfreulich, da sie keine gute User Experience bieten. Notfalls kann der Nutzer über eine gut gemachte 404-Seite auf der Website gehalten werden – dies sollte jedoch nicht die Regel sein. Daher ist es wichtig, für nicht mehr vorhandene Seiten Weiterleitungen zur neuen URL oder zu ähnlichen Inhalten zu definieren.

Hört sich erst einmal einfach an, kann aber sehr schnell in Sisyphos-Arbeit ausarten. Je nach Größe und Art der Kunden-Website können schnell mehrere Tausend URLs als „Nicht gefunden“ gelistet werden.

Die Problemstellung mit den GSC-404-Crawlingfehlern

GSC Crawlingfehler

Hier beginnt das Problem allein schon bei der Datenerhebung, denn über die GSC werden nur 1.000 URLs je Property angezeigt und zum Export bereitgestellt. Zusätzlich enthält der Export über das GSC-Dashboard nicht die linkgebenden Seiten der vermeintlichen 404-Fehler. Aber auch schon bei einigen Hundert bemängelten URLs kann der zeitliche Aufwand erheblich sein, denn im Grunde muss jede URL einzeln angefasst werden.

Nicht jede gelistete URL muss zwangsläufig weitergeleitet werden. So kann die Übersicht URLs enthalten, die mittlerweile wieder mit 200 OK antworten oder bereits weitergeleitet werden. Oder es werden URLs gelistet, die gar nicht mehr verlinkt werden – weder intern noch von anderen Websites. Bei Ersterem wird dem Nutzer wieder die Seite oder eine ähnliche Seite angezeigt. Bei Letzterem gelangt der Nutzer gar nicht mehr auf diese Seite.

Nur solche URLs, die den HTTP-Statuscode 404 erzeugen und verlinkt sind, sind für mich also von besonderem Interesse. Allein für diese möchte ich herausfinden, warum die Seite nicht gefunden wird und ggf. Weiterleitungen definieren oder interne Links abbauen. Bis ich aber an diese URLs herankomme, muss viel stupide Fleißarbeit geleistet werden.

  • Workflow 404 Crawlingfehler Google Search Console GSC(1) Eine URL auswählen und überprüfen, ob sie noch mit 404 antwortet.
  • Wenn ja, (2) lasse ich mir die verlinkenden Seiten anzeigen und
  • rufe diese (3) einzeln auf, um zu überprüfen, ob hier der Link noch vorhanden ist.

Bei 100 nicht gefundenen URLs und bis zu 10 verlinkenden URLs sind das dann schon 1.100 URLs, die ich betrachten muss, bis ich mit der richtigen Arbeit beginnen kann. Da wäre es natürlich toll, wenn mir zumindest die Fleißarbeit irgendwie abgenommen werden könnte.

GSC-Crawlingfehler (404) automatisiert bewerten

Glücklicherweise lassen sich die meisten Aufgaben, die man mit „stupide“ und „Fleißarbeit“ beschreiben kann, automatisieren.

R to the rescue!

R ist eine statistische Programmiersprache, die wir bei get:traction unter anderem für die Analyse von Crawls und Logfiles sowie die Auswertung von Google Analytics-Daten verwenden. In Kombination mit der searchConsoleR-Library von Mark Edmondson lässt sich ein Programm schreiben, dass uns die zuvor beschriebene Arbeit abnimmt. Über die Library können die Crawling-Fehler über die GSC-API abgefragt und als behoben markiert werden.

Das Programm soll hier nicht im Detail beschrieben (der Code findet sich hier auf GitHub), sondern der Ablauf kurz skizziert werden.

Ablauf automatisierte GSC 404 Crawlingfehler Bewertung

  1. Beim ersten Ausführen muss dem Skript der Zugriff auf das jeweilige GSC-Konto eingeräumt werden. Die Authentifizierung erfolgt aktuell noch über den Browser, soll aber zukünftig über einen Google Service-Account erfolgen, damit das lästige Hantieren mit den OAuth-Dateien entfällt.
  2. Ist der Account verifiziert, lädt das Skript alle verifizierten Properties herunter, von der eine ausgewählt werden kann.
  3. Für diese Property werden dann alle URLs heruntergeladen, die als „not found“ bemängelt werden. Dies erfolgt sowohl für die Plattform Web als auch Smartphone.
  4. Im Anschluss beginnt der erste Teil der „Fleißarbeit“. Für alle not-found-URLs wird der Statuscode erhoben, um zu überprüfen, ob sie immer noch mit 404 antworten. URLs, die mittlerweile wieder mit 200 OK oder 301 Redirect antworten, werden in eine separate Tabelle geschrieben, um sie später über die API als behoben zu markieren. Wir erinnern uns: Ist die URL wieder erreichbar oder wird weitergeleitet, brauche ich natürlich keine Weiterleitung definieren. Sie ist für mich also nicht von Interesse und kann als behoben markiert werden. Die restlichen URLs, die weiterhin mit 404 antworten, werden weiterverarbeitet.
  5. Für diese URLs werden nun alle verlinkenden URLs ebenfalls auf ihren Statuscode überprüft. Ist der Statuscode bei einer verlinkenden URL 4xx, wird die verlinkte URL in die zuvor genannte Tabelle geschrieben, um sie als behoben zu markieren. Hier greift also die Prämisse, dass URLs, die zwar mit 404 antworten, aber nicht mehr verlinkt werden, aussortiert werden sollen, da der Nutzer sie sowieso nicht aufrufen kann. Folglich brauchen auch keine Weiterleitungen definiert werden. Alle bemängelten URLs, deren verlinkenden URLs jedoch mit 200 OK antworten, werden weiterverarbeitet.
  6. Bisher wurde von den (vermeintlich) Link-gebenden URLs nur der Statuscode ermittelt. In diesem Schritt wird nun auch der HTML-Quellcode der jeweiligen Seite heruntergeladen, um zu gucken, ob die bemängelte URL weiterhin verlinkt wird. Findet sich der Link nicht mehr im Quellcode, werden auch diese URLs in die Tabelle geschrieben, um sie in der GSC als behoben zu markieren.
  7. Zum Schluss liegen damit zwei Tabellen vor: 1) Eine Tabelle mit den „echten“ Crawling-Fehlern, also solche URLs, die immer noch mit 404 antworten und verlinkt werden. Sie werden als CSV exportiert, um sie händisch prüfen zu können. 2) Eine Tabelle mit den URLs, die über die API als behoben markiert werden können, weil die URLs wieder mit 200 antworten, weitergeleitet werden oder nicht mehr verlinkt werden.

Fazit: Google Crawlingfehler schnell automatisiert bewerten und bearbeiten

Mit ein bisschen R-Magie können wir uns das Leben deutlich einfacher machen. Auf Knopfdruck bereinigen wir die GSC-Auflistung, sodass nur noch die Fehler angezeigt werden, die wirklich relevant sind und unserer Aufmerksamkeit bedürfen. Auch das Problem großer Websites mit (hundert-)tausenden von Crawling-Fehlern lässt sich damit begegnen. Wird das Skript ausgeführt, wird mit Sicherheit ein Großteil der 1.000 URLs als behoben markiert. Dadurch können neue URLs nachrücken, die wir dann durch ein erneutes Ausführen des Skripts weiter reduzieren, und so weiter.

Gerade bei der initialen Auswertung eines neuen Kundenaccounts befreien wir uns dadurch von unnötigem Ballast und können uns schnell auf das Wesentliche konzentrieren. Aber auch im laufenden Betrieb — bspw. wöchentlich — hilft die Automatisierung dabei, Ordnung zu halten.

Hier noch einmal der Link auf das GitHub-Repro.


[Update: 16.10.2017] Anleitung

Erst einmal vielen Dank für das rege Interesse an meinem Skript. Gerne reiche ich natürlich eine kurze Anleitung nach, wie es überhaupt ausgeführt wird.

Installation von R und RStudio

Unter folgedem Link kann R heruntergeladen werden: https://cran.rstudio.com/index.html.

Wählt das für Euch passende OS aus; im Nachfolgenden werde ich die Installation für Windows beschreiben.

Installation für Windows

Am besten verwendet Ihr die base -Variante.

base-Variante

Ladet die R-3.4.2-win.exe herunter und führt sie aus.

R.-3.4.2-win.exe herunterladen

Nachdem Ihr dem Installationsdialog gefolgt seid, ist R im Verzeichnis C:\Program Files\R (oder dem von Euch gewählten Verzeichnis) installiert. Aktuell kann R jedoch nur auf der Kommandozeile ausgeführt werden. Deutlich mehr Komfort bietet daher eine IDE wie RStudio, die unter folgendem Link kostenlos heruntergeladen werden kann: https://www.rstudio.com/products/rstudio/download/#download. Auch hier ladet ihr euch den passenden Installer (RStudio-1.1.383.exe) herunter, führt ihn aus und folgt dem Installationsdialog.

Installationsdialog im Installer ausführen

Danach findet sich im Verzeichnis C:\Program Files\RStudio\ die RStudio-Installation und im Unterverzeichnis /bin die rstudio.exe zum Starten den Programms.

RStudio öffnen, ein neues Projekt anlegen und das Skript importieren

Nachdem Ihr RStudio gestartet habt, kurz noch einige Anmerkungen zum Aufbau von RStudio.

Aufbau von RStudio

Direkt vorweg: Bei mir sieht die GUI etwas anders aus, als bei einer Erstinstallation, da ich sie meinen Bedürfnissen entsprechend angepasst habe. So sind meine Panels (mehr dazu gleich) anders angeordnet und ich verwende ein schwarzes Theme. An der grundlegenden Funktionalität ändert das natürlich nichts.

RStudio ist in vier Panels aufgeteilt, die verschiedene Aufgaben übernehmen:

  1. Der Filemanager listet alle Dateien des aktuellen Projekts (auf Projekte komme ich gleich zu sprechen) oder wenn kein Projekt ausgewählt ist, die Ordner der einzelnen Projekte.
  2. Der Editor dient dazu, Skripte zu schreiben und zu speichern.
  3. Das Enviroment-Tab listet alle Variablen eines Projekts und ermöglicht es so, sich die Daten genauer anzusehen.
  4. Die Console dient zum Ausführen von Skripten.

Als Erstes legen wir ein neues Projekt an, in dem wir das Skript speichern können. Dazu wählt Ihr in der Navigationsleiste File → New Project… → New Directory → New Project. Vergebt einen Projektnamen wie bspw. gsc_crawling_erros und wählt als Speicherort ein Verzeichnis aus. Ich speichere meine Projekte standardmäßig in der Dropbox, sodass ich E:/Dropbox/Rstudio als Verzeichnis angeben, in dem RStudio dann einen Ordner gsc_crawling_errors erzeugt. Habt Ihr das Projekt erstellt, wechselt RStudio automatisch in das Verzeichnis, dass zunächst nur die Projektdatei gsc_crawling_errors.Rproj enthält. Anschließend erzeugt ihr ein neus R-Skript. Drückt dazu STRG + SHIFT + N oder geht über die Navigationsleiste wie im Screenshot zu sehen.

R-Script erzeugen

Es öffnet sich das Editor-Panel mit dem neuen Skript, das aktuell natürlich leer ist. Drückt als erstes STRG + S, um das Skript zu speichern und vergebt einen Dateibennenung wie bspw. gsc_crawling_errors.R.

Als Nächstes kopiert ihr das R-Skript von GitHub und fügt es in die gerade erstellte, leere Datei in RStudio ein. Euer RStudio sollte dann in etwa wie folgt aussehen.

RStudio nachdem ihr das R-Skript von GitHub eingefügt habt

Installation der benötigten Packages

Am Anfang des Skripts seht ihr einige Libraries, die ich importiere, um sie im Skript zu verwenden. Da Ihr R resp. RStudio komplett neu installiert habt, müsst ihr diese zunächst herunterladen. Führt dazu in der Konsole (bei mir rechts unten im Bild) folgenden Befehl aus:

Variablen definieren

Als Nächstes müsst ihr einige Variablen im Skript anpassen. Das macht Ihr an folgender Stelle:

  • Die Variable new_auth belasst Ihr zunächst auf TRUE. Sie dient dazu die initiale Authentifizierung durchzuführen (dazu nachher mehr).
  • Die Variable path_to_csv_export ändert Ihr zu einem beliebigen Pfad mit Dateiangabe. Dort wird das Skript die 404-Fehler als CSV speichern, die ihr euch genauer angucken müsst, da sie vom Skript als „echte“ 404er ermittelt wurden. Ich möchte die Datei bspw. auf meinem Desktop speichern, also trage ich ein: C:/Users/Patrick/Desktop/404_export.csv. (Hinweis: Nicht wundern, Pfadangaben in R/Rstudio müssen unter Windows nicht mit einem Backslash angegeben werden.)
  • Die client_id und client_secret müsst Ihr wahrscheinlich erst einmal erzeugen. Das machen wir jetzt.

Google API Client-ID erzeugen und Google Search Console API aktivieren

Ruft dazu folgende URL auf und meldet euch mit eurem Google-Account an : https://console.developers.google.com/apis/credentials.

Navigiert zu Credentials → Create credentials → OAuth client ID.

Google API Client-ID erzeugen und Google Search Console API aktivieren

Ihr erhaltet den Hinweis, dass Ihr zunächst einen Consent Screen konfigurieren müsst. Diese Einwilligung wird euch nachher angezeigt, wenn Ihr Euch mit dem Skript authentifizieren wollt. Klick also auf: Configure consent screen.

Credentials

Es reicht aus, wenn Ihr den Product name ausfüllt und dann auf Save klickt. Danach gelangt Ihr wieder auf den Auswahl-Screen für den Application type. Wählt hier Other, vergebt einen Namen und drückt auf Create.

Namen vergeben

In einem Fenster werden Euch dann Eure Zugangsdaten angezeigt, die Ihr entsprechend in die Variablen des Skripts eintragt.

Variablen des Scripts eintragen

Zu guter Letzt müsst Ihr die Search Console API an sich noch aktivieren. Wechselt dazu links in der Navigation auf Library und sucht nach Google Search Console API, wählt sie aus und aktiviert sie.

Google Search Console API aktivieren

Hinweis: Die Aktivierung kann einige Minuten dauern. In der Zwischenzeit führe ich Euch weiter durchs Skript.

Das Skript ausführen

Bisher haben wir nur Werte ins Skript eingetragen, aber noch nichts ausgeführt. Um einzelne Zeilen oder Abschnitte eines Skripts auszuführen, können diese mit der Maus markiert und mittels STRG + ENTER ausgeführt werden. Als erstes führt Ihr die Zeilen 1 bis 65 aus; also bis zum und inklusive folgenden Skript-Abschnitt, der für die Authentifizierung zuständig ist.

Wird dieser Abschnitt ausgeführt, öffent sich Euer Browser und Ihr müsst die Authentifizierung mit dem Google-Account zulassen, für den Ihr die GSC-Fehler abfragen wollt (Sagt „Hallo“ zu eurem vorher erstellten Consent Screen).

SEO Monitoring: Zulassen anklicken

Habt Ihr auf Zulassen geklickt, seht Ihr im Filemanager von RStudio, dass eine .httr-oauth-Datei erzeugt wurde. Damit Ihr euch nicht jedes Mal neu authentifizieren müsst, setzt die Variable new_auth am Anfang des Skripts jetzt auf FALSE. Zukünftig wird das Skript die Datei dann verwenden, um sich gegenüber der API zu authentifizieren. Wollt Ihr einen anderen Google-Account authentifizieren, setzt die Variable wieder auf TRUE und führt die Schritte bis hierher erneut aus.

Als Nächstes führt Ihr dann folgende Zeile aus:

Dadurch erhaltet Ihr alle Properties, die für den Google-Account freigegeben sind. Klickt Ihr im Enviroment-Panel auf die Variable properties, werden sie Euch in tabellarischer Form angezeigt.

Variable properties in tabellarischer Form

Wählt eine der Properties aus und tragt sie in die nachfolgende Variable property ein.

Wie bereits oben erwähnt, kann die Aktivierung der GSC-API einige Minuten dauern. Wenn Ihr also zu schnell gelesen habt und folgende Fehlermeldung seht, macht genau das, was dort steht und holt euch erst einmal einen ☕. Nach ca. 5 Minuten, sollte die Aktivierung erfolgt sein.

Fehlermeldung

Das war’s erst einmal an manuellen Einstellungen. Führt jetzt die restlichen Zeilen des Skripts aus.

Einige (nerdige) Anmerkungen

Direkt vorweg ein Disclaimer: Wer schon einmal Websites gescrapt oder auch nur URLs automatisiert abgefragt hat, weiß, dass jedes Skript früher oder später knallt, weil nicht alle Eventualitäten im Vorfeld bedacht werden können … oder weil Google wieder mal an seiner API herumbastelt oder was auch immer. Ich prognostiziere also schon einmal, dass das Skript früher oder später nicht mehr in der gewünschten Form funktionieren wird. Da wir es aber bei get:traction selbst verwenden, werde ich es entsprechend aktualisieren und den neuen Code auf GitHub einstellen.

User-Agent

Über diese Konfiguration könnt Ihr einen anderen User-Agent definieren. Standardmäßig verwendet das httr-Package keinen User-Agent, was einige Websites nicht mögen und dann keinen Inhalt zurückgeben.

Error-Handling

Es kann immer mal wieder vorkommen, dass URLs nicht wie erwartet antworten (ノಠ益ಠ)ノ彡┻━┻ s. Disclaimer). Damit das Skript nicht abbricht, fange ich solche Errors mit einem simplen tryCatch, der dann einfach ein NA zurückgibt, die URL also „hinten runter fallen lässt“. In der Console wird aber zumindest die URL ausgegeben, bei der das Problem aufgetreten ist.

URLs als behoben markieren

Aktuell kommt es immer wieder zu folgender Fehlermeldung, wenn URLs als behoben markiert werden sollen:

Ursache dafür ist, dass die Funktion fix_sample_url() nicht mit URL-encodierten Zeichen (bspw. wie in folgender URL: podcast/beyond-pageviews-podcast/bp-2-3-warum-google-tag-manager/%20%E2%80%8E) umgehen kann. An einem Fix arbeite ich.

Außerdem kann es vorkommen, dass URLs nicht direkt aus der GSC verschwinden, wenn Ihr sie als behoben markiert habt. Um zu testen, ob der API-Call überhaupt funktionert, könnt Ihr ihn mit der Funktion fix_sample_url() testen. Tragt dazu eine URL aus der GSC ein. Wenn die Funktion mit TRUE antwortet, hat das Senden an die API auf jeden Fall funktioniert. Sollte das nicht geklappt haben, kann es sein, dass Ihr nur einen lesenden Zugriff auf die Property habt.

Fin?

Wie Ihr seht, gibt es an dem Skript noch einiges zu tun. Denn wie Tolstoi schon so schön gesagt hat:

— Alle glücklichen URLs antworten gleich, jede unglückliche URL antwortet auf ihre eigene Weise unglücklich.

Für Anregungen und Probleme, über die Ihr gestolpert seid, oder sogar Verbesserungsvorschläge bin ich daher immer offen.

Bis dahin: Happy R! 👋

Hier noch einmal der Link auf das GitHub-Repro.

Kontaktieren Sie uns & profitieren Sie von mehr Traktion durch SEO!

SEO Berlin – [sichtbar & erfolgreich]
Wielandstraße 9, 12159 Berlin
030 / 296 73 998
berlin@gettraction.de

SEO Darmstadt- [sichtbar & erfolgreich]
Heinrich-Hertz-Straße 6, 64295 Darmstadt
06151 / 860 69 85
darmstadt@gettraction.de

5 Gründe für get:traction:

  • individuelle SEO-Beratung & -Betreuung
  • keine Abnahmeverpflichtung
  • zertifizierte SEO-Experten
  • transparente & faire Arbeitsweise
  • nachhaltige SEO-Strategien