Migration zu Next.js / Astro in Bonn

Was nach dem Wechsel von WordPress auf Astro oder Next.js die Plugins für Formulare, Newsletter-Anmeldung und Einwilligung ersetzt: Formularverarbeitung auf dem Server, Spamschutz ohne Tracking, Double-Opt-in und ein Banner nur dort, wo § 25 TDDDG es verlangt.

Migration zu Next.js / Astro

Website- & Anwendungsmigration in Bonn

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.

Mein WordPress.org-Profil

Bei jedem WordPress-Umzug stellt sich dieselbe Frage zu spät: Was wird aus dem Kontaktformular, aus der Newsletter-Anmeldung und aus dem Cookie-Banner? In WordPress waren das drei Plugins, oft mit eigener Datenbanktabelle, eigenem Skript und eigener Cookie-Liste. Astro und Next.js bringen keines davon mit. Auf dieser Seite beschreibe ich, was an ihre Stelle tritt, was ich weglasse und wo das Gesetz tatsächlich eine Einwilligung verlangt.

Ich bin Mariusz Szatkowski, ein einzelner Entwickler in Gdynia, und arbeite seit 2006 mit WordPress. Ich arbeite remote und schriftlich. Die Gestaltung der Formulare kommt von Ihnen, ich setze sie um.

Wer in Bonn eine Firma gründet, findet auf bonn.de unter der Wirtschaftsförderung Themen wie Existenzgründung, Fördermittel und Ausschreibungen (Stadt Bonn). Für die meisten dieser Organisationen ist das Formular der eigentliche Zweck der Website: Anfragen, Anmeldungen, Newsletter. Gerade dort lohnt es sich, die Verarbeitung bewusst neu zu bauen, statt Plugin-Verhalten unbesehen zu kopieren.

Poppelsdorfer Schloss mit Weiher in Bonn

Foto: Felix Baumgarten, CC BY-SA 4.0, Wikimedia Commons.

#Was die WordPress-Plugins bisher erledigten

Ein Formular-Plugin macht vier Dinge: Es rendert das Formular, prüft die Eingaben, speichert den Eintrag und verschickt eine Mail. Ein Newsletter-Plugin ergänzt Bestätigungsmail, Abmeldung und Liste. Ein Consent-Plugin blockiert Skripte, bis jemand zustimmt. Nach der Migration verteilen sich diese Aufgaben neu:

AufgabeIn WordPressNach der Migration
Formular darstellenPlugin, oft mit eigenem CSS und SkriptNormales HTML im Template
Eingaben prüfenPlugin-EinstellungenSchema auf dem Server, etwa mit Zod
Anfrage zustellenPlugin sendet Mail über PHPServerfunktion sendet über SMTP oder einen Mail-Dienstleister
Eintrag speichernTabelle in der WordPress-DatenbankNur Mail, oder eine Tabelle, die ich nach Absprache anlege
Spam abwehrenCaptcha-Dienst, oft von DrittenHoneypot, Zeitprüfung, Begrenzung
Newsletter bestätigenNewsletter-PluginBestätigungslink, Token und Protokoll
EinwilligungBanner-Plugin für allesBanner nur für das, was § 25 TDDDG betrifft

#Formulare auf dem Server

Der Server ist der einzige Ort, an dem eine Prüfung verbindlich ist. Die Browserprüfung mit required und type="email" ist Komfort. Die Next.js-Dokumentation sagt das ausdrücklich: Server-seitig prüft man mit einer Schema-Bibliothek wie Zod oder Valibot (Next.js, Forms).

Astro. Eine Action wird mit defineAction() aus astro:actions angelegt und aus src/actions/index.ts exportiert. Mit accept: 'form' nimmt sie FormData entgegen. Ein Formular mit method="POST" und action={actions.name} funktioniert nach der Dokumentation auch ohne JavaScript (Astro, Actions). Der Preis: Die Dokumentation verlangt, dass Seiten, die ein Formular per Action verarbeiten, on demand gerendert werden. Dafür braucht es einen Adapter und export const prerender = false auf der einzelnen Seite; der Rest der Website bleibt standardmäßig vorab erzeugt (Astro, On-demand rendering). Wer gar keinen Server betreiben will, kann das Formular an einen externen Endpunkt schicken, muss dann aber dessen Datenschutz mitprüfen.

Next.js. Eine Server Action ist eine Funktion mit 'use server', die als action des Formulars übergeben wird und FormData erhält. Alternativ nimmt ein Route Handler in route.ts einen POST entgegen und liest request.formData() (Next.js, route.js). Beides ist ein Endpunkt, den jeder aufrufen kann. Die Dokumentation sagt: Eine exportierte Server Action ist per direktem POST erreichbar, und Eingaben sind immer zu validieren (Next.js, Data Security). Wie sich das absichern lässt, steht auf meiner Seite zu Server Actions für Bonn.

Ein Route Handler für ein einfaches Kontaktformular ist kurz:

export async function POST(request: Request) {
  const formData = await request.formData()
  const email = formData.get('email')
  // prüfen, dann senden, dann antworten
  return Response.json({ ok: true })
}

Für Astro, Zod und Fehlermeldungen im Detail verweise ich auf meine Seite zu Astro-Formularen für Wuppertal. Hier nur die Entscheidung, die vor der Technik steht: Was passiert mit der Anfrage?

#Zustellen oder speichern

Es gibt zwei saubere Wege, und sie unterscheiden sich datenschutzrechtlich deutlich.

  • Nur Mail. Die Serverfunktion verschickt die Anfrage an ein Postfach und legt nichts ab. Es gibt nichts zu löschen außer der Mail selbst. Für die meisten Kontaktformulare reicht das.
  • Mit Speicherung. Anfragen landen in einer Datenbank, etwa für Anmeldungen oder Vorgänge mit Status. Dann klären Sie mit mir vorher schriftlich, welche Felder gespeichert werden, wie lange und wer sie wieder löscht.

Versendet ein Dienstleister die Mails, ist er Auftragsverarbeiter. Den Vertrag dazu und den Standort der Server prüft Ihre Datenschutzberatung. Zur Frage, wo die Website selbst läuft, steht mehr auf meiner Seite zu Hosting und Datenstandort für Frankfurt.

#Spamschutz ohne Tracking

Ein Captcha von Dritten lädt Skripte nach und überträgt die IP-Adresse an einen Dienst. Das ist nicht nötig. Für ein Firmenformular genügen vier Maßnahmen, die komplett auf Ihrem Server laufen:

  1. Ein Honeypot: ein für Menschen unsichtbares Feld, das Bots ausfüllen. Ist es gefüllt, verwirft der Server die Anfrage.
  2. Eine Zeitprüfung: Wird das Formular schneller abgeschickt, als ein Mensch tippt, wird die Anfrage verworfen.
  3. Validierung auf dem Server, auch gegen überlange Eingaben und Zeilenumbrüche in Betreff und Absender, damit niemand Mail-Header einschleust.
  4. Eine Begrenzung der Anfragen je Adresse in einem Zeitfenster. Die Next.js-Dokumentation empfiehlt Rate Limiting für teure Vorgänge wie das Verschicken von Mails.

Nichts davon speichert etwas im Browser. Das ist der Punkt, an dem das Gesetz ins Spiel kommt.

#Wann § 25 TDDDG ein Banner verlangt

§ 25 Abs. 1 TDDDG verlangt eine Einwilligung für das Speichern von Informationen auf der Endeinrichtung und für den Zugriff auf dort gespeicherte Informationen. Abs. 2 Nr. 2 nimmt Vorgänge aus, die unbedingt erforderlich sind, damit der Anbieter einen vom Nutzer ausdrücklich gewünschten digitalen Dienst zur Verfügung stellen kann (§ 25 TDDDG).

Daraus folgt für die Praxis:

Fall§ 25 TDDDG
Formular ohne Cookie, ohne Skript DritterBerührt die Vorschrift nicht
Honeypot und Zeitprüfung auf dem ServerBerühren die Vorschrift nicht
Statisch ausgelieferte Seiten mit lokal gehosteten SchriftenNichts wird gespeichert oder ausgelesen
Warenkorb- oder Sitzungscookie, den der Nutzer durch seine Handlung auslöstKann unter Abs. 2 Nr. 2 fallen
Reichweitenmessung, Werbe-Pixel, Karten oder Videos Dritter mit Cookies oder AuslesenEinwilligung nötig, also Banner oder Zwei-Klick-Lösung

Die Konsequenz ist unbequem für Plugin-Gewohnheiten: Ein Banner ist kein Schutzschild für die ganze Website, sondern die Antwort auf konkrete Skripte. Wenn nach der Migration kein einziges davon übrig ist, gibt es nichts abzufragen. Ob ein nachgeladenes Skript etwas im Endgerät ablegt oder ausliest, prüfe ich im Browser, bevor es auf die Seite kommt. Dass dabei auch die IP-Adresse an Dritte geht, ist ein getrenntes Thema der DSGVO und kein Fall von § 25. Eine Rechtsberatung ersetzt das nicht; die Einordnung für Ihr Haus trifft Ihre Datenschutzberatung.

#Newsletter: Double-Opt-in selbst gebaut

Nach § 7 Abs. 2 Nr. 2 UWG ist Werbung per elektronischer Post eine unzumutbare Belästigung, wenn keine vorherige ausdrückliche Einwilligung vorliegt. Für Bestandskunden sieht § 7 Abs. 3 UWG eine Ausnahme vor, sie hängt an vier Bedingungen: Die Adresse stammt aus dem Verkauf einer Ware oder Dienstleistung, sie wird für ähnliche eigene Produkte genutzt, der Kunde hat nicht widersprochen und wurde bei Erhebung und jeder Verwendung klar auf sein Widerspruchsrecht hingewiesen (§ 7 UWG). Für eine Anmeldung auf der Website ist das die falsche Grundlage; dort gilt die Einwilligung.

Der Gesetzestext nennt kein Verfahren. Ich baue Double-Opt-in, weil sich nur so belegen lässt, dass die Adresse zur Person gehört:

  1. Das Anmeldeformular nimmt die Adresse entgegen und sendet eine Mail mit einem Bestätigungslink. Es gibt noch keine Werbung.
  2. Der Link enthält ein zufälliges, einmaliges Token mit Ablaufzeit.
  3. Erst der Klick darauf setzt den Status auf bestätigt. Gespeichert werden Zeitpunkt, der Text der Einwilligung und die Version der Datenschutzerklärung.
  4. Jede Mail trägt einen Abmeldelink, der ohne Anmeldung funktioniert.

Den Versand selbst übernimmt in der Regel ein Newsletter-Dienstleister. Die Liste liegt dann dort; die Website reicht nur die bestätigten Adressen weiter. Welcher Dienst zu Ihnen passt, ist eine Entscheidung Ihrer Datenschutzberatung, nicht meine.

#Datenschutzerklärung nach dem Umzug

Die Erklärung beschreibt, was die Website tut. Wenn sich die Technik ändert, ändert sich der Text. Die LDI NRW, für Unternehmen in Bonn zuständige Aufsicht, stellt ein Muster für Datenschutzhinweise einfacher Websites bereit. Es deckt Verantwortliche, Server-Logfiles, Speicherdauer und Betroffenenrechte ab. Die LDI weist selbst darauf hin, dass der Text ergänzt werden muss, wenn Cookies, Kontaktformulare, Kommentarfunktionen oder Plugins von sozialen Netzwerken im Einsatz sind. Die Erklärung muss mit einem Klick von jeder Seite erreichbar sein.

Meine Liste für den Abgleich nach der Migration:

  • Plugins, die in der alten Erklärung stehen und nicht mehr existieren, werden gestrichen.
  • Der Empfänger der Formularmails und die Speicherdauer der Anfragen werden ergänzt.
  • Ein Newsletter-Dienstleister wird mit Zweck und Rechtsgrundlage genannt.
  • Die Cookie-Liste entspricht dem, was im Browser tatsächlich gesetzt wird. Ich prüfe das in den Entwicklertools der fertigen Seite.
  • Impressum und Erklärung bleiben mit einem Klick erreichbar, auch auf dem neuen Frontend.

Den endgültigen Text legt Ihre Datenschutzberatung fest. Ich liefere die technische Liste: welche Daten wohin gehen, wie lange sie liegen und welche Skripte laufen.

#Was vor dem Umzug mitgenommen wird

  • Bisherige Einträge. Formulareinträge und Newsletter-Listen werden vor der Abschaltung aus dem Plugin exportiert. Wie der Export aus WordPress insgesamt läuft, steht auf meiner Seite zum WordPress-Export für Essen.
  • Bestehende Einwilligungen. Bei Newsletter-Adressen wandert der Nachweis mit, sonst ist er verloren. Fehlt er, beurteilt Ihre Beratung, ob eine neue Bestätigung nötig ist.
  • Barrierefreiheit. Beschriftete Felder, Fehlermeldungen, die ein Screenreader vorliest, und sichtbarer Fokus gehören zum Formular. Zum BFSG steht mehr auf meiner Seite für Münster.
  • Redakteure. Wer bisher Formulare im WordPress-Editor pflegte, braucht eine neue Stelle dafür. Das behandelt meine Seite zu Redaktion und CMS für Hannover.

#So läuft ein Projekt bei mir

Sie schicken mir die Adresse der Website und eine Liste der Formulare. Ich antworte schriftlich mit Rückfragen: Wer erhält die Anfragen, was wird gespeichert, welcher Newsletter-Dienst ist im Einsatz. Danach erhalten Sie einen schriftlichen Umfang mit Annahmen. Die Umsetzung läuft auf einer Staging-Umgebung, auf der Sie jedes Formular selbst absenden. Erst nach Ihrer Abnahme schalte ich um. Wer die Seite danach laufend betreut haben möchte, findet das auf meiner Wartungsseite für Bonn.

Von Ihnen brauche ich Zugang zur bestehenden Seite, die Texte der Einwilligungen und Erklärungen und Ihre Entscheidung, welche Daten gespeichert werden.

#Häufige Fragen

#Brauche ich nach der Migration weiter ein Formular-Plugin?

Nein. In Astro übernimmt eine Action oder ein Endpunkt die Verarbeitung, in Next.js eine Server Action oder ein Route Handler. Das Formular bleibt normales HTML. Wohin die Anfrage geht, ob per Mail oder in eine Datenbank, halte ich vorher schriftlich mit Ihnen fest.

#Brauche ich für ein Kontaktformular in Astro einen Server?

Für die Verarbeitung ja. Nach der Astro-Dokumentation braucht eine Seite, die ein Formular per Action verarbeitet, das Rendering on demand und damit einen Adapter. Die übrigen Seiten bleiben statisch.

Nicht allein wegen des Formulars. § 25 TDDDG betrifft das Speichern auf dem Endgerät und das Auslesen von dort. Ein Formular, das nichts im Browser ablegt, fällt nicht darunter. Eingebettete Dienste Dritter prüfe ich einzeln.

#Ist Double-Opt-in gesetzlich vorgeschrieben?

Der Wortlaut von § 7 Abs. 2 Nr. 2 UWG verlangt eine vorherige ausdrückliche Einwilligung, nennt aber kein Verfahren. Ich baue Double-Opt-in, weil sich die Einwilligung damit belegen lässt. Die rechtliche Bewertung trifft Ihre Beratung.

#Wie schütze ich das Formular vor Spam, ohne Google reCAPTCHA?

Mit einem Honeypot-Feld, einer Prüfung der Absendezeit, serverseitiger Validierung und einer Begrenzung der Anfragen je Adresse. Nichts davon legt etwas im Browser ab und nichts lädt ein Skript von Dritten.

#Was ändert sich in der Datenschutzerklärung?

Weg fallen die Angaben zu den alten Plugins. Neu hinein gehören der Empfänger der Formularmails, die Speicherdauer der Anfragen und, falls vorhanden, der Newsletter-Dienstleister. Die LDI NRW stellt ein Muster für einfache Websites bereit.

#Was passiert mit den bisherigen Formulareinträgen?

Sie werden vor dem Umzug aus dem Plugin exportiert. Ob sie weiter aufbewahrt oder gelöscht werden, entscheiden Sie anhand Ihrer Speicherfristen.

#Ihre Anfrage

Schreiben Sie mir über das Kontaktformular. Nennen Sie die Adresse Ihrer Website, die Formulare und Newsletter, die heute laufen, Ihr Ziel und den gewünschten Termin. Die Antwort kommt an Werktagen schriftlich, die erste Einschätzung ist kostenlos.

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

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

Projekt beschreiben

Weitere WordPress-Dienste und Wissensbasis entdecken