Geschrieben von

Service Worker

MarTech/AdTech

Was sind Service Worker?

Bei einem Service Worker handelt es sich um eine Technologie, die mittels JavaScript eine Zusatzschicht zwischen Server und Browser zur Verfügung stellt. Diese Zusatzschicht kann für unterschiedliche Zwecke verwendet werden:

  • Websites offline verfügbar machen
  • Push-Benachrichtigungen
  • Grundlage für Progressive Web Apps
  • Etc.

Funktionsweise

Aus technischer Sicht ist ein Service Worker ein Web Worker. Dadurch lässt sich JavaScript unabhängig vom Hauptthread ausführen. Das heißt, dass ein Service-Worker-Code für eine Seite ausgeführt werden kann, ohne dass der Nutzer die Seite aufgerufen hat. Um einen Missbrauch zu vermeiden, sind Service Worker nur über HTTPS nutzbar (Ausnahme: localhost).

Der grobe Ablauf ist dabei wie folgt:

  1. Die Website wird aufgerufen.
  2. Über eine JavaScript-Funktion wird der Service Worker registriert. Dabei kann angegeben werden, ob der Service Worker für alle Seiten der Domain gelten soll oder nur für Bestimmte.
  3. Der Browser lädt die Datei herunter und führt sie aus.
  4. Wenn die Installation abgeschlossen ist, kann der Service Worker künftig zum Einsatz kommen.
  5. Schon geöffnete Seiten im Browser müssen neu geladen werden, bevor sie über den soeben initialisierten Service Worker bearbeitet werden können.

Der Service Worker wird dann aus dem Cache ausgeführt. Das stellt auch sicher, dass der Nutzer – nachdem die Seite inkl. dem Service Worker einmal online initialisiert worden ist – die Seite auch offline nutzen kann (oder nur bestimmte Funktionalitäten der Seite). Und: Der Service Worker wird jede 24 Stunden neu heruntergeladen, sobald eine Internetverbindung besteht.

In der Praxis heißt das: Wenn der Aufruf einzelner Seiten von Service Workern abhängt, dann muss vorher im Cache der Service Worker abgelegt worden sein, damit der Nutzer die Seite sieht. Entweder wird vor dem Aufruf der gewünschten Seite eine Seite aufgerufen, die nicht vom Service Worker abhängt, damit dieser die Möglichkeit hat initialisiert zu werden. Oder der Nutzer muss nach dem Direktaufruf der gewünschten Seite diese nochmal manuell aktualisieren. Dies kann auch zu SEO-Problemen führen, wie wir gleich sehen werden.

Mehr und detailliertere Ausführungen zur technischen Funktionsweise gibt es auf der mozilla.org-Seite.

Service Worker und SEO

Bei der “Better Together”-Konferenz von Ryte hat Martin Splitt einen SEO-Problemfall vorgestellt, der mit Service Worker zu tun hat. Das Problem des Webmasters war, dass nur die Startseite der Website indexiert wurde.

Martin ging bei der Analyse wie folgt vor:

  1. Zuerst wurde auf der Startseite geprüft, wie die internen Links zu den Unterseiten gesetzt worden sind. Da die Links mittels dem a-Tag und href-Attribut versehen worden sind, war alles gut.
  2. Dann wurde eine Unterseite aufgerufen und es wurde geprüft, ob der richtige HTTP-Status-Code ausgegeben wurde. Da der 200er ausgeliefert wurde, sah das auf den ersten Blick schon mal gut aus.
  3. Dann wurde mit dem Mobile-Friendly-Tool getestet. Die URL wurde geblockt.
  4. Daraufhin wollte sich Martin die robots.txt anschauen. Diese war nicht verfügbar, sendete aber keinen 500er, sondern 200er.
  5. Dann wurde nochmal der Status Code der Unterseite geprüft. Dieser war ein 200er, jedoch wurde er von einem Service Worker ausgeliefert.

Grundsätzlich ist das kein Problem. Service Worker bieten ja viele Vorteile (siehe weiter oben). Martin öffnete jedoch eine Unterseite – die laut dem Webmaster nicht indexiert wurden – direkt im Inkognito-Modus (daher ohne Cookie-Daten, ohne Daten im Cache, etc.). Dabei wurde ein 404er inkl. der dazugehörigen Fehlerseite ausgeliefert. Diese Seite sieht also jeder, der zum ersten Mal direkt auf die Unterseite kommt. Erst wenn die URL zum zweiten Mal aufgerufen wird, kommt eine 200-Seite mit dem Inhalt.

Grund dafür: Die untersuchte Website verwendet einen Service Worker, um ein Problem in der Server-Konfiguration zu umgehen. Der Server wurde so eingestellt, dass nur die Startseite ausgespielt wird. Um die anderen Seiten auszuspielen wurden aber Service Worker eingesetzt.

Damit die Unterseiten aber angezeigt werden können, muss der Service Worker initialisiert und im Cache abgelegt werden. Damit der Nutzer also die Seite sehen kann muss er – wie oben schon beschrieben – wie folgt vorgehen:

  • Zuerst eine Seite aufrufen, die nicht vom Service Worker abhängt. In diesem Fall wäre es die Startseite, die direkt vom Server ausgeliefert wird. Beim Aufruf der Startseite wird der Service Worker im Cache installiert. Die nachfolgenden Seiten, die vom Service Worker abhängen, können vom Nutzer also dann angesteuert werden. Der Nutzer würde hier nichts groß mitbekommen, dass sich dies im Hintergrund abspielt.
  • Oder: Der Nutzer ruft die Unterseite, die vom Service Worker abhängt, direkt auf. Im Anschluss muss die Seite nochmal aktualisiert werden, damit der Inhalt gesehen werden kann. Beim ersten Aufruf würde der Service Worker installiert werden, um beim zweiten Aufruf aus dem Cache geholt werden zu können.

Aus SEO-Sicht würde der Googlebot die Unterseiten nie sehen. Google greift auf die Seiten immer so zu, als ob er zum ersten Mal zugreift. Der Bot crawlt nicht mit einem Cache. Dadurch sieht Google in diesem Fall nur die Startseite, die vom Server ausgeliefert wird.