JavaScript SEO Basics – So verarbeitet Google JavaScript-Inhalte

Erfahre in diesem Artikel, wie Google mit JavaScript umgeht und welche Auswirkungen dies auf SEO hat. Erfahre mehr über die Entwicklung von Suchmaschinen, die JavaScript ausführen, und tauche in praktische Tests und Beobachtungen ein, um die Komplexität von JavaScript in der SEO zu verstehen.

Das Wichtigste in Kürze

  • Suchmaschinen werten mittlerweile nicht nur den Quelltext aus, sondern führen auch JavaScript aus
  • Die Praxis zeigt, jedoch, dass der Umgang von Suchmaschinen mit per JavaScript angezeigten Inhalten nicht zuverlässig vorausgesagt werden kann.
  • Um eine schnelle Indexierung aller wichtiger Inhalte sicherzustellen, sollte auf JavaScript so weit wie möglich verzichtet werden.
  • Alternativ kann mit Server Side Rendering eine Seite mit gerendertem JavaScript an Google und die User geschickt werden
  • In diesem Artikel findest du auch einen Test, der dir zeigt, wie Google JavaScript grundsätzlich handhabt.

Bereits 2016 bin ich auf einen Artikel mit dem Titel „Does Google execute JavaScript?“ (leider nicht mehr online) gestoßen. Darin werden verschiedene JavaScript-Szenarien durchgespielt und getestet, wie Google damit umgeht. Da der Autor freundlicherweise die Testdaten auf Github veröffentlicht hat, habe ich ein paar eigene Tests dazu erstellt, um besser zu verstehen, wie Google mit JavaScript umgeht.

Der Test ist zwar alt, aber die zugrunde liegende Praxis ist immer noch gültig.

Ausgangslage

Jahrelang war der Inhalt des Quelltextes einer Seite ausschlaggebend dafür, was Google und andere Suchmaschinen lesen konnten. Seit einiger Zeit sind die Suchmaschinen jedoch dazu übergegangen, nicht nur den Quelltext auszuwerten, sondern auch JavaScript auszuführen. Da durch den Einsatz von JavaScript nicht nur optische Effekte, sondern auch inhaltliche Veränderungen der Seite vorgenommen werden können, liegt eine korrekte Ausführung von JS auch im Interesse der Suchmaschinen.

LinkedIn Startseite ohne gerendertem JavaScript
LinkedIn Startseite ohne gerendertem JavaScript

Testaufbau

Um die Auswirkungen der Verwendung von JavaScript auf SEO besser zu verstehen, habe ich einige einfache Java-Skripte an den Google-Index geschickt – analog zum oben beschriebenen Test. Jedes dieser Skripte verändert bei seiner Ausführung einen Teil des Textes auf der Seite.

Das HTML

Unter https://www.michaelhohenleitner.de/js-test/ habe ich eine HTML-Datei erstellt, die im Body des Quelltextes folgendes enthält:

<h1>JavaScript SEO Test</h1>
<div id="content-load-intern">
<p style="color: red;">JS Wird nicht ausgeführt</p>
</div>
<div id="content-load-head">
<p style="color: red;">JS nach load wird nicht ausgeführt</p>
</div>
<div id="content-load">
<p style="color: red;">JS DOMContentLoaded von extern wird nicht ausgeführt</p>
</div>
<div id="content">
<p style="color: red;">JS nach load wird nicht ausgeführt</p>
</div>
<div id="content-robots">
<p style="color: red;">Via Robots.txt gesperrtes JS Wird nicht ausgeführt</p>
</div>
<div id="content-timeout">
<p style="color: red;">Warten auf timeout...</p>
</div>
<div id="ajax">
<p style="color: red;">Warten auf ajax.</p>
</div>

beim Aufruf der Website mit deaktiviertem JavaScript ergibt also folgendes Bild:

Das Bild zeigt einen Screenshot eines JavaScript SEO Tests mit verschiedenen leeren Testfeldern.

Die 7 Container zeigen 1:1 den Inhalt aus dem HTML Quelltext.

Mit JavaScript

Am HTML wurde nichts verändert. Lediglich JavaScript wurde im Browser aktiviert und einige Skripte eingefügt.

Internes JavaScript

Als einfachste Übung wurden nun zwei Java-Scripte in den Header eingefügt, die

  • Mit DOMContentLoaded Event den Inhalt des ersten Containers austauschen
  • Mit dem Load Event den Inhalt des zweiten Containers austauschen

Das Event DOMContentLoaded Event wird ausgelöst, sobald das DOM vollständig geladen ist. Im Gegensatz dazu wartet das Load Event, bis die verknüpften JavaScript- und CSS-Dateien vollständig geladen sind.

<script> 
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('content-load-intern').innerHTML =
'</p>
<p>
</p>
<h2 style="color:green">Ich stehe im Head und komme mit dem Event DOMContentLoaded</h2>
<p>
</p>
<p>';
}, false);
</script>
<script>
window.addEventListener("load", function(event) {
document.getElementById('content-load-head').innerHTML =
'</p>
<p>
</p>
<h2 style="color:green">Ich stehe im Head und komme mit dem Event load</h2>
<p>
</p>
<p>';
}, false);
</script>

Der Inhalt der ersten beiden Boxen sieht nun im Browser bei aktiviertem JavaScript wie folgt aus:

Das Bild zeigt einen Screenshot eines "JavaScript SEO Test" mit zwei Nachrichten, die anzeigen, dass JavaScript-Code im Kopfteil der Seite mit unterschiedlichen Ereignissen ("DOMContentLoaded" und "load") ausgeführt wurde.

Ein Blick in den Quelltext (wenn man die Skripte im Header ignoriert) reicht bereits nicht mehr aus, um den Inhalt der Seite zu verstehen.

Externe JavaScripte

Im nächsten Schritt wurden einige externe JavaScripte in die Seite integriert:

  • Ersetzen des Inhalts in Container 3 mit dem Event DOMContentLoaded
  • Ersetzen des Inhalts in Container 4 mit dem Event load
  • Ersetzen des Inhalts in Container 5 mit dem Event load, die verlinkte JavaScript Datei ist jedoch per Robots.txt gesperrt
  • Ersetzen des Inhalts in Container 6 nach einem 3 Sekunden Timeout

Die Container 3-6 präsentieren sich nun im Browser wie folgt:

Das Bild zeigt einen Screenshot von vier Textblöcken, die verschiedene Szenarien für das Laden von JavaScript-Skripten beschreiben.

Eine Nachvollziehbarkeit der inhaltlichen Änderungen ist ohne einen Blick in die eingebundenen JS-Dateien nicht mehr möglich.

Asyncrones JavaScript

Zuletzt wurde ein asynchrones JavaScript eingebunden. Der Inhalt des untersten Containers stammt also weder aus dem Quelltext noch aus der JavaScript-Datei, sondern aus einer Textdatei, die über JavaScript serverseitig geladen wird.

Aus

<div id="ajax">
<p style="color: red;">Warten auf ajax.</p>
</div>

wird dadurch:

<div id="ajax">
<h2 style="color: green;">Ich bin ein asyncrones JavaScript.</h2>
</div>

Zwischenfazit

Der Blick in den Quelltext gibt keine Sicherheit darüber, was der Benutzer im Browser angezeigt bekommt. Um den Quelltext der Seite sinnvoll beurteilen zu können, muss er in einem Entwicklungswerkzeug des Browsers betrachtet werden, da hier nach dem vollständigen Laden des Document Object Models (DOM) der endgültige Quelltext ausgegeben wird.

Zur Veranschaulichung hier ein Vergleich zwischen dem Seitenquelltext und der Ansicht in der Entwicklerkonsole mit gerendertem DOM:

Das Bild zeigt zwei Beispielseiten mit HTML-Code und JavaScript, welche offenbar unterschiedliche Lademechanismen und das Verhalten von JavaScript in einem SEO-Kontext demonstrieren.

Welche Auswirkungen hat das auf SEO?

Dass JavaScript Seiteninhalte verändern kann, ist nichts Neues. Interessant ist nun, wie Suchmaschinen damit umgehen. Um einen ersten Eindruck zu erhalten, wurde die Testseite in der Search Console gerendert.

Auf dem Bild ist eine Webseite zu sehen, die Informationen darüber zeigt, wie Googlebot eine Seite sieht und wie sie für einen Besucher aussieht, insbesondere in Bezug auf JavaScript-Ausführung und -Rendering.

Wie du siehst, werden alle Boxen korrekt angezeigt, mit Ausnahme derer, die durch die Robots.txt gesperrt sind. In der Spalte „So hätte ein Besucher Ihrer Website die Seite gesehen“ nimmt es die Search Console mit der Robots.txt nicht so genau und zeigt auch diesen Bereich korrekt gerendert an.

Dadurch kann Google die Bedeutung einzelner Skripte für die Darstellung beurteilen und die Meldung „Der Googlebot konnte nicht alle Ressourcen für diese Seite abrufen“ entsprechend priorisieren. Auf das „Verstecken“ von Inhalten durch das Sperren von URLs mittels Robots.txt sollte daher verzichtet werden.

Wie sieht der Google Cache aus?

Da Google auch die Möglichkeit bietet, eine gerenderte Vorschau im Cache zu betrachten, werfen wir auch einen Blick darauf. Unmittelbar nach der Indexierung wurden nur die Skripte aus dem Header ausgeführt. Dies deckt sich mit dem ersten Test und ist vermutlich auf die noch nicht gecrawlten JavaScript-Dateien zurückzuführen.

Das Bild zeigt einen Screenshot einer Webseite, die einen JavaScript SEO Test darstellt.

In der Nur-Text-Version wird keines der Skripte ausgeführt:

Das Bild zeigt die Darstellung einer Webseite in der Google Cache-Ansicht, welche verschiedene Testergebnisse bezüglich der Ausführung von JavaScript für Zwecke der Suchmaschinenoptimierung (SEO) auflistet.

Nachdem auch die JavaScript-Dateien über die Search Console eingereicht wurden, werden nun auch die anderen Skripte gerendert. Mit Ausnahme von Ajax:

Das Bild zeigt einen Screenshot einer Webseite mit einem "JavaScript SEO Test", welcher verschiedene Methoden der Einbindung von JavaScript und deren Sichtbarkeit für Suchmaschinen zu demonstrieren scheint.

Was rankt?

Es bleibt die Frage, ob die Inhalte, die gerendert werden, auch über die Suche auffindbar sind.

Die Inhalte der beiden Skripte aus dem Header sind erwartungsgemäß auffindbar:

Das Bild zeigt einen Google-Suchergebnisseite mit einem Treffer für einen JavaScript SEO Test.
Das ist ein Bildschirmfoto einer Google-Suchergebnisseite mit einem Suchbegriff über JavaScript SEO und einem Website-Link als Ergebnis.

Auch bei den extern eingebundenen Skripten sieht es gut aus:

Das Bild zeigt ein Google-Suchergebnis für einen JavaScript SEO Test.

Der über die Robots.txt gesperrte Inhalt wird korrekterweise nicht ausgegeben:

Das Bild zeigt eine Google-Suchergebnisseite mit einer Fehlermeldung, dass keine Dokumente gefunden wurden, die zur Suchanfrage passen.

Auch der Inhalt nach dem 3-Sekunden-Timeout stellt für Google kein Problem dar. Lediglich der Inhalt des asynchronen JavaScript kann nicht über die Google-Suche gefunden werden:

Das Bild zeigt die Ergebnisseite einer Google-Suche, bei der nach einem asynchronen JavaScript-Test von der Webseite "michaelgoepfert.de" gesucht wurde.
Das Bild zeigt ein Google-Suchergebnis mit einer Webseite, die für einen JavaScript SEO-Test steht.

Hier gibt es einen Unterschied zum Test von stephanboyer.com. Allerdings wurde auch bei diesem Test der AJAX-Aufruf erst einige Zeit später ausgeführt:

New Years Update (1/1/2017): Apparently some time after I did this experiment Google re-indexed the page and did the AJAX call this time.

Zusammenfassung

Der Test zeigt, dass Google mit einfachem JavaScript keine Probleme zu haben scheint. Unabhängig davon, ob der Inhalt über ein externes Skript kommt oder nicht. Allerdings wird die Analyse durch die unterschiedlichen Sichten im Google Cache und in der Search Console erschwert.

Wie testen?

Die SEO Software Screaming Frog bietet schon seit längerem die Möglichkeit Seiten zu Rendern:

https://twitter.com/JohnMu/status/817000987605012481?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E817000987605012481%7Ctwgr%5Ef3736274602683b9daf290e8c6465ce804b10116%7Ctwcon%5Es1_&ref_url=https%3A%2F%2Fwww.michaelhohenleitner.de%2Fwissen%2Ftechnisches-seo%2Fjavascript%2F

Das Ergebnis der gerenderten Seite in Screaming Frog entspricht in jedem Fall der Ansicht in der Search Console und repräsentiert somit die über die Websuche auffindbaren Inhalte.

JavaScript und das Canonical Tag

Auf der Entwicklerkonferenz Google I/O 2018 gab Google interessante Einblicke in das Crawl- und Indexierungsverhalten von JavaScript-Seiten:

YouTube

Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.
Mehr erfahren

Video laden

In diesem Video wird auch die Aussage getroffen, dass Google die Canonical Tags ausschließlich aus dem ungerenderten HTML-Code ausliest und die per JavaScript (z.B. mit dem Google Tag Manager) eingefügten Canonical Tags nicht berücksichtigt. Die wurde jedoch kürzlich in einem Test widerlegt.

Fazit

JavaScript und SEO schließen nicht zwangsläufig aus. Dennoch solltest du bei Inhalten, die clientseitig per JavaScript geladen werden, vorsichtig sein. Obwohl Google immer wieder betont, damit keine Probleme zu haben, kommt es immer wieder vor, dass JS-generierte Inhalte gar nicht oder nur verzögert indexiert werden.

Um auf Nummer sicher zu gehen, sollte darauf geachtet werden, dass alle SEO-relevanten Inhalte serverseitig (z.B. mit Server Side Rendering) an die Nutzer und an Google gesendet werden. Dies wirkt sich auch positiv auf die Ladezeit aus.

🔗 Weiterführende Links
Da dieser Test nur an der Oberfläche kratzt, hier noch ein paar weitere Quellen zum Thema JavaScript und SEO:
We Tested How Googlebot Crawls Javascript And Here’s What We Learned
Auditing JavaScript for SEO
Core Principles of SEO for JavaScript
The Technical SEO Renaissance: The Whys and Hows of SEO’s Forgotten Role in the Mechanics of the Web
Crawlt Bing JavaScript?
A Non-Technical Guide to Diagnosing JavaScript SEO Issues

Ein Mann sitzt lächelnd auf einem Stuhl und hebt seine Hand zum Gruß.

Hol dir unser Wissen direkt in dein Postfach!

Einmal pro Woche schicken wir dir Wissenswertes rund um WordPress, SEO, KI, Datenschutz, Sicherheit, Texte, Bilder und Webdesign – verständlich aufbereitet, ergänzt um spannende Einblicke in den StrategieVier-Allltag. Trag dich direkt hier in unseren Newsletter ein!

Du meldest dich zu unserem Newsletter an. Macht vier Mal Website-Wissen pro Monat. Dafür nutzen wir Active Campaign. Du kannst dich jederzeit per Klick abmelden. Datenschutz.

Michael Hohenleitner

Michael ist S4-Mitgründer. Als technischer SEO-Berater entwickelt er Gesamtstrategien als Basis unserer Projekte. Denn die Websites unserer Kunden sollen ja nicht nur schön sein, sondern erstens auch im Web gefunden werden und das zweitens von der passenden Zielgruppe.

Auf dem Bild ist ein lächelnder Mann in lässiger Kleidung, der auf dem Boden sitzt. Michael Hohenleitner

Weitere Beiträge von uns

Links sind das Rückgrat des Internets. Sie verbinden Webseiten miteinander, leiten Nutzer zu relevanten Inhalten und spielen eine entscheidende Rolle in der Suchmaschinenoptimierung (SEO). In diesem Artikel lernst du alles über die Bedeutung von Links...

Willst du KI-Fotos für SEO einsetzen? Lerne, wann sie nützlich sind und wann echte Fotos bevorzugt werden sollten. Authentizität kann den Unterschied machen!...
In diesem Artikel lernst du, wie du mit Google Search Console und Looker Studio ein effizientes und kostenloses Keyword Monitoring Tool erstellst. Erhalte tiefe Einblicke in deine Rankings und visualisiere die Leistung deiner Keywords über...
Entdecke, wie du mit Python auf die Google Search Console API zugreifst – ganz ohne Programmierkenntnisse! Unsere Anleitung und ein kostenloses Python-Skript ermöglichen es dir, alle wichtigen Keyword- und URL-Daten unkompliziert zu extrahieren. Wir führen...
Hol dir unser Wissen
in dein Postfach!
Mit unserem Newsletter bekommst du regelmäßig relevante Updates rund um Websites, SEO, Content, WordPress, KI, Datenschutz und Cyber-Sicherheit.

Du meldest dich mit deiner Anfrage zum Website-Audit auch zu unserem Newsletter an. Wir schicken dir nach unseren Willkommens-E-Mails bis zu vier Mal im Monat unser Website-Wissen! Für den Versand der Mails verwenden wir Active Campaign. Du kannst dich jederzeit mit nur einem Klick wieder abmelden. Datenschutz.