Migration zu Next.js / Astro in Karlsruhe

Was beim Umzug von WordPress auf Astro oder Next.js mit GA4, Matomo und Tag Manager passiert: Inventar des Trackings, Seitenaufrufe bei Client-Routing, Einwilligung nach § 25 TDDDG, Search Console, Umstelldatum und Vorher-nachher-Vergleich.

Migration zu Next.js / Astro

Website- & Anwendungsmigration in Karlsruhe

Ich migriere Websites von WordPress, Joomla, Drupal, Angular, Vue und anderen Technologien zu Astro und Next.js. Jede Migration plane ich so, dass SEO, Inhalte und Funktionen erhalten bleiben, und schalte in einem vereinbarten Zeitfenster um. Ich arbeite allein und habe langjährige Erfahrung mit älteren und modernen Stacks.

  • Mein wordpress.org-Konto besteht seit 2006.
  • Ich habe zum WordPress-Core in den Versionen 7.0 und 7.1 beigetragen.
  • Ich betreue 30 Plugins auf wordpress.org.
  • Ich organisiere WordCamps und trete dort als Speaker auf.
  • Ich war bei jedem WordCamp Europe von 2017 bis 2026 dabei.
  • Lokales WordPress-Meetup: WordPress Meetup Karlsruhe

Mein WordPress.org-Profil

Wer eine WordPress-Seite auf Astro oder Next.js umzieht, rechnet mit Weiterleitungen und Ladezeiten. Selten steht auf der Liste, wo die Messung bleibt. Dabei lag sie oft in einem Plugin, im Theme oder in einem Tag-Manager-Container, den der Umzug nicht automatisch mitnimmt. Ohne Plan gibt es nach dem Start eine Zeitreihe mit Loch, und niemand kann sagen, ob die Zahlen wegen des Umzugs oder wegen kaputter Messung gefallen sind.

Wie das in der Praxis dokumentiert wird, zeigt die Datenschutzerklärung der Stadt Karlsruhe. Sie nennt den Webanalysedienst Matomo, beschreibt, dass dabei Cookies gesetzt und IP-Adressen vor dem Speichern anonymisiert werden, und verweist auf das Cookie-Banner der Einstiegsseite, mit dem sich das Cookie ablehnen lässt. Die Stadt stützt sich dabei auf Art. 6 Abs. 1 Buchstabe e DSGVO in Verbindung mit § 4 LDSG (Datenschutzerklärung karlsruhe.de). Welche Grundlage für Ihre Seite passt, ist eine eigene Frage; hier geht es um die Technik dahinter und darum, dass jede dieser Angaben nach dem Umzug weiter stimmen muss.

Diese Seite beschreibt, was ich dafür vorher erfasse und nachher prüfe. Weiterleitungen und die Beobachtung in der Search Console behandelt die Seite zur Migration in Bremen, Banner und Formulare die Seite zu Bonn, die Übernahme von Titeln und strukturierten Daten die Seite zu Mannheim. Hier geht es um die Messung selbst.

#Was misst Ihre Seite heute?

Vor dem Umzug lege ich ein Inventar an. Es entsteht aus dem gerenderten HTML der Seite, aus dem Tag-Manager-Container und aus den Plugin-Einstellungen, nicht aus der Erinnerung. Die Tabelle zeigt die Quellen, die ich typischerweise finde.

QuelleWo sie sitztWas ich beim Umzug entscheide
GA4 über das Google-TagTheme, Plugin oder Tag ManagerDieselbe Mess-ID übernehmen, Ereignisse einzeln prüfen
Tag-Manager-ContainerSkript im Kopf der SeiteContainer-ID übernehmen, Auslöser auf Seitenwechsel prüfen
Matomo, selbst gehostet oder CloudTracking-Code oder Matomo Tag ManagerWebsite-ID übernehmen, Einwilligungslogik prüfen
Conversion-Pixel für WerbungMeist im Tag ManagerBehalten, ersetzen oder streichen, mit Einwilligung
Ereignisse aus Plugins (Formulare, Shop)Im Plugin-Code, nicht im Tag ManagerNeu verdrahten, da das Plugin entfällt
Server-LogsHostingAls unabhängige Gegenprobe sichern

Der vorletzte Punkt wird am häufigsten übersehen. Formularplugins und Shop-Erweiterungen senden oft eigene Ereignisse an GA4 oder Matomo. Fällt das Plugin weg, fehlt das Ereignis, obwohl der Container unverändert ist. Jedes Ereignis, das heute als Ziel oder Schlüsselereignis dient, bekommt in meiner Liste eine Zeile mit Auslöser, Ziel im neuen System und Testfall. Auf Staging läuft jeder Fall einmal durch, bevor ich den Starttermin nenne.

Aussichtsturm der Burgruine auf dem Turmberg in Durlach

Foto: Baden de, CC BY 3.0, Wikimedia Commons.

#Was ändert sich bei statischen und clientseitig gerouteten Seiten?

Bei statisch ausgelieferten Seiten und klassischen Links lädt jeder Seitenwechsel ein neues HTML-Dokument. Das Google-Tag läuft dann bei jedem Aufruf erneut, und das page_view-Ereignis entsteht wie auf der alten Seite. Heikel wird es, sobald ein Client-Router den Seitenwechsel übernimmt: Das Dokument bleibt, nur der Inhalt tauscht sich aus. Ob das der Fall ist, hängt von der Architektur ab, bei Next.js ist es üblich, bei Astro eine Entscheidung im Projekt. Ich halte sie vor dem Start schriftlich fest, weil davon die Messung abhängt.

#GA4

Google beschreibt Single-Page-Anwendungen als Seiten, die ein HTML-Dokument einmal laden und weitere Inhalte per JavaScript nachladen. Entscheidend sei, für jede angezeigte Ansicht einen Seitenaufruf zu zählen und den Referrer richtig zu setzen. Werden virtuelle Seitenaufrufe nicht erfasst, behandelt GA4 die Anwendung als eine einzige Seite, und die gesamte Interaktionszeit landet beim ersten Aufruf (Google Analytics: Single-Page-Anwendungen messen).

Zwei Wege nennt die Dokumentation: die erweiterte Messung, die page_view bei Änderungen des Browserverlaufs sendet, oder eigene Ereignisse. Die Hilfe zur erweiterten Messung führt aus, dass dabei pushState, popState und replaceState erfasst werden (Ereignisse für optimierte Analysen). Wichtig bei einem Tag Manager: Wer Google Analytics darüber einbindet, soll die automatische Verlaufserfassung in GA4 nicht zusätzlich einschalten, sonst zählen Seitenaufrufe doppelt. Welche der beiden Varianten in einem Projekt gilt, steht in meinem Messkonzept, damit sie nicht aus Versehen beide laufen.

Die Dokumentation nennt außerdem zwei Stolperstellen, die nichts mit Zählung zu tun haben: Nach einem virtuellen Seitenwechsel sollte die Scrollposition nach oben gesetzt werden, sonst misst die Scrolltiefe falsch, und die Browsersuche (Strg+F) muss auf den neuen Inhalt zugreifen können.

#Matomo

Matomo erkennt in einer Single-Page-Anwendung nicht von selbst, dass eine neue Seite erscheint. Es braucht URL und Titel der neuen Ansicht, bevor der Seitenaufruf gesendet wird. Nach der Dokumentation sieht der Ablauf so aus (Matomo: Single-Page-Application Tracking):

function trackRoute(previousUrl) {
  _paq.push(['setReferrerUrl', previousUrl]);
  _paq.push(['setCustomUrl', window.location.pathname]);
  _paq.push(['setDocumentTitle', document.title]);
  _paq.push(['trackPageView']);
}

Wer den Matomo Tag Manager nutzt, legt einen Auslöser “History Change” und einen Auslöser “Pageview” an und hängt beide an dasselbe Tag; als URL gilt dann {{PageUrl}}. Der Vorschaumodus des Tag Managers dient zum Testen. Seitenbezogene Custom Dimensions und Custom Variables müssen beim Wechsel zurückgesetzt werden, sonst hängen sie am nächsten Seitenaufruf. Wer Form Analytics oder Media Analytics nutzt, muss nach jeder neuen Ansicht den DOM neu scannen lassen, sonst werden Formulare auf Folgeseiten nicht erfasst.

#Einwilligung nach § 25 TDDDG: was den Seitenwechsel überlebt

§ 25 Abs. 1 TDDDG macht das Speichern von Informationen im Endgerät und den Zugriff darauf von einer Einwilligung abhängig. Nach Abs. 2 Nr. 2 entfällt sie nur, wenn der Vorgang unbedingt erforderlich ist, damit ein ausdrücklich gewünschter digitaler Dienst bereitgestellt werden kann (§ 25 TDDDG). Die Grundlagen dazu stehen auf der Seite zu Bonn. Für die Messung kommen drei Punkte hinzu, die sich erst beim Umzug zeigen.

Der Datenschutzaufsicht Baden-Württemberg zufolge hängt die Pflicht nicht am Personenbezug. Die FAQ des LfDI Baden-Württemberg zu Cookies und Tracking hält fest, dass die Einwilligungspflicht unabhängig davon gilt, ob die gespeicherten oder ausgelesenen Informationen personenbezogen sind. Als Gegenmodell beschreibt sie eine Reichweitenanalyse über Logfiles, bei der kein Zugriff auf das Endgerät stattfindet. Die FAQ trägt den Stand März 2022 und spricht noch vom TTDSG, das inzwischen TDDDG heißt (FAQ zu Cookies und Tracking). Wer neu über sein Messkonzept nachdenkt, kann also auch die Frage stellen, wie viel davon ohne Zugriff auf das Endgerät auskommt.

Der Einwilligungsstatus muss vor dem ersten Seitenaufruf feststehen. Google beschreibt bei Consent Mode, dass zuerst ein Standardzustand gesetzt und danach nach der Nutzerentscheidung aktualisiert wird. Aktualisierungen müssen auf der Seite erfasst werden, auf der sie stattfinden, bevor ein Seitenübergang beginnt (Consent Mode für Entwickler). Bei Client-Routing ist das einfacher, weil das Dokument bleibt. Bei statischen Seiten muss die Entscheidung gespeichert sein und bei jedem Laden vor dem Google-Tag gelesen werden.

Matomo trennt Tracking- und Cookie-Einwilligung. Mit requireConsent wird weder ein Cookie gesetzt noch eine Anfrage gesendet, bevor die Einwilligung vorliegt. Mit requireCookieConsent gehen Anfragen immer raus, Cookies erst nach Zustimmung. Nach rememberConsentGiven legt Matomo selbst ein Cookie mit der Entscheidung ab, in Safari gilt sie nach der Dokumentation wegen der Intelligent Tracking Prevention nur sieben Tage (Matomo: Tracking und Cookie-Einwilligung). Das ist keine Rechtsauskunft, aber ein Grund, den Consent-Weg auf Staging in Safari und Chrome zu testen.

Eine Regel halte ich ein: Banner und Seitentechnik ändere ich nicht am selben Tag. Wird die Einwilligungslösung strenger konfiguriert als vorher, fallen die gemessenen Zahlen, ohne dass sich das Publikum geändert hat. Fallen sie zeitgleich mit dem Umzug, lässt sich beides nicht mehr trennen. Ob Ihre Messung eine Einwilligung braucht, klärt Ihre Datenschutzberatung. Ich baue sie so, wie Sie es entscheiden.

#Search Console und Sitemap: nur die Teile, die die Messung betreffen

Die Search Console unterscheidet zwei Property-Typen. Eine Domain-Property fasst alle Subdomains und Protokolle zusammen und lässt sich nur per DNS-Eintrag bestätigen. Eine URL-Präfix-Property gilt für genau ein Protokoll und eine Subdomain und kennt mehrere Bestätigungsmethoden (Property-Typen). Daraus folgt für den Umzug: Bei der Domain-Property ändert sich nichts. Bei einer URL-Präfix-Property prüfe ich, womit sie bestätigt wurde.

Googles Leitfaden zum Umzug nennt das ausdrücklich: Die Bestätigung muss auch nach dem Umzug funktionieren. Wer per HTML-Datei bestätigt hat, muss die Datei in den neuen Auftritt kopieren, und wer per Meta-Tag oder über Google Analytics bestätigt hat, muss dafür sorgen, dass die neue Seite beides weiter enthält (Umzug mit URL-Änderungen). Gerade Meta-Tag und Analytics-Bestätigung stammen oft aus einem SEO-Plugin oder dem Theme, die beim Umzug entfallen.

Für die Sitemap gilt nach Googles Dokumentation: Absolute URLs, priority und changefreq werden ignoriert, und lastmod nutzt Google nur, wenn es nachprüfbar stimmt, etwa im Vergleich zur letzten Änderung der Seite. Ein Sitemap-Generator, der bei jedem Build allen Seiten das Build-Datum gibt, liefert deshalb keinen Nutzen (Sitemap erstellen). Ich leite lastmod aus dem Änderungsdatum des Inhalts ab.

#Umstelldatum festhalten

Jede Auswertung nach dem Umzug braucht einen Fixpunkt. Ich trage das Datum der Umstellung an drei Stellen ein: im Projektprotokoll, als Git-Tag des Releases und, wo es geht, im Analysewerkzeug selbst. Matomo kennt dafür Annotationen: In jedem Diagramm zum Verlauf lässt sich zu einem Datum eine Notiz anlegen, die sich mit einem Stern hervorheben lässt (Matomo: Annotationen). Wer GA4 und Search Console nutzt, bekommt von mir das Datum zusätzlich in einem kurzen Protokoll, damit auch in einem Jahr noch klar ist, was an diesem Tag passiert ist.

Ich trage auch Teilschritte ein, falls es sie gibt: das Datum, an dem die neue Sitemap eingereicht wurde, die Umschaltung der Weiterleitungen und eine Änderung am Banner. So lässt sich später jede Auffälligkeit einem Ereignis zuordnen.

#Vorher und nachher vergleichen

Vergleichbar sind nur Zahlen, die auf beiden Seiten gleich entstehen. Ich lege vor dem Start fest: Zeitraum vor dem Start, Zeitraum danach, gleiche Wochentage, gleiche Seitengruppen. Danach schaue ich auf diese Auffälligkeiten.

AuffälligkeitMögliche UrsachePrüfung
Seitenaufrufe fast verdoppeltVerlaufserfassung in GA4 und Tag Manager gleichzeitig aktivDebugView, ein Klick darf einen page_view erzeugen
Seitenaufrufe stark gefallen, Sitzungen stabilSeitenwechsel per Client-Router ohne virtuellen page_viewNavigation durchklicken, Ereignisse im DebugView ansehen
Ein Schlüsselereignis fehltPlugin entfallen, das es gesendet hatZeile im Inventar, Testfall auf Staging
Alle Zahlen gefallen, Logfiles stabilEinwilligungslösung strenger oder Consent-Zustand kommt zu spätReihenfolge von Consent-Standard und Google-Tag prüfen
Matomo-Besuche nach Safari-Anteil gefallenEinwilligung läuft nach sieben Tagen abDokumentation zu rememberConsentGiven, Testlauf in Safari
Keine Daten für eine SeitengruppeFalsche URL oder falscher Titel im SPA-AufrufsetCustomUrl und Titel im Netzwerkprotokoll

Die Server-Logs dienen dabei als Gegenprobe. Sie zählen keine Einwilligung und kennen keinen Client-Router, aber sie zeigen, ob der Verkehr überhaupt ankommt. Die Zahlen der Search Console messen etwas anderes als GA4 oder Matomo, nämlich Zugriffe aus der Google-Suche. Ich führe sie deshalb getrennt und setze sie nicht gleich.

#So läuft das Projekt bei mir

Ich arbeite allein, remote und schriftlich. Termine und Telefonate gibt es nicht. Fragen, Entscheidungen und der Umfang stehen in Textform, damit sie sich später nachlesen lassen. Grafik und Layout liefern Sie, die Umsetzung übernehme ich.

Am Anfang brauche ich Lesezugriff auf GA4 und, falls vorhanden, Matomo, den Export des Tag-Manager-Containers, Zugang zur Search Console und die Einstellungen Ihrer Einwilligungslösung. Dazu eine Liste der Ereignisse, die für Sie zählen: Formulare, Anrufe, Käufe, Downloads. Daraus entsteht das Messkonzept, das ich Ihnen schriftlich schicke. Nach dem Start vergleiche ich die vereinbarten Zeiträume und melde mich mit einem kurzen Bericht. Auf Wunsch übernehme ich die laufende Betreuung danach, die Stunden aus diesem Paket übertragen sich nicht in den Folgemonat.

#Häufige Fragen

#Verliere ich bei der Migration meine bisherigen Analytics-Daten?

Die Historie liegt bei Google beziehungsweise in Ihrer Matomo-Installation, nicht in der Website. Bleiben Property, Datenstrom und Matomo-Website-ID gleich, läuft die Zeitreihe weiter. Ich übernehme die Kennungen aus dem Altbestand und prüfe nach dem Start, ob die ersten Seitenaufrufe ankommen.

#Zählt GA4 bei Next.js oder Astro jede Seite einzeln?

Bei normalen Seitenladungen ja. Bei clientseitigem Routing nur, wenn für jede Ansicht ein page_view gesendet wird. Google nennt dafür die erweiterte Messung auf Basis von Browserverlaufsereignissen oder eigene Ereignisse; beides prüfe ich im DebugView.

Das hängt von den Skripten ab, die übrig bleiben. Sobald Messung oder Pixel Informationen auf dem Endgerät speichern oder auslesen, verlangt § 25 TDDDG eine Einwilligung. Die Einordnung für Ihr Haus trifft Ihre Datenschutzberatung; ich setze um, was dort entschieden wird.

#Muss ich die Search Console neu einrichten?

Bleibt die Domain gleich, bleibt die Property. Zu prüfen ist, ob die Bestätigungsmethode im neuen Auftritt weiter funktioniert, etwa Meta-Tag oder HTML-Datei. Eine Domain-Property wird per DNS bestätigt und ist vom Umzug nicht betroffen.

#Wie erkenne ich später, ab wann sich die Zahlen verändert haben?

Ich halte das Umstelldatum im Projektprotokoll fest und trage es in Matomo als Annotation ein. Dazu kommt ein fester Vergleichszeitraum vor und nach dem Start mit gleichen Wochentagen.

#Kann ich vorübergehend ohne Messung starten und später nachrüsten?

Technisch ja, praktisch entsteht dann eine Lücke genau in der Phase, in der Sie die Wirkung des Umzugs sehen wollen. Ich empfehle, Messung und Einwilligung vor dem Start auf Staging zu prüfen.

#Ihre Anfrage

Senden Sie Ihre Anfrage über das Kontaktformular. Nennen Sie die Adresse Ihrer Website, welche Werkzeuge heute messen (GA4, Matomo, Tag Manager, Pixel), welche Ereignisse für Sie zählen und Ihren Wunschtermin. Ich antworte an Werktagen per E-Mail, und die erste schriftliche Einschätzung kostet nichts. Das allgemeine Vorgehen steht auf der Seite zur Migration nach Next.js und Astro.

Brauchen Sie die Leistung: Migration zu Next.js / Astro in Karlsruhe?

Beschreiben Sie Ihr Projekt per E-Mail. Antwort innerhalb von 48 Stunden.

Projekt beschreiben

Weitere WordPress-Dienste und Wissensbasis entdecken