Spam im Kontaktformular stoppen6 Min. Lesezeit
reCAPTCHA-Alternativen für Website-Formulare
Vergleiche reCAPTCHA-Alternativen für Formulare, von Turnstile und hCaptcha bis Proof-of-Work und ganz ohne Captcha, und wechsle mit einer kleinen, sicheren Änderung.
Cloudflare Turnstile ist der naheliegendste Ersatz für reCAPTCHA: Es ist meist unsichtbar, nutzt dasselbe Muster aus Site Key und Secret Key, und seine Serverprüfung nimmt dieselben Parameter. hCaptcha passt zu Sites, die Bild-Challenges von jemand anderem als Google wollen, und Proof-of-Work-Tools wie ALTCHA laufen ganz ohne Drittanbieter. Bei vielen Kontaktformularen machen Honeypot, Inhaltsbewertung und Rate-Limit ein Captcha überflüssig.
Warum Leute von reCAPTCHA wegwechseln
reCAPTCHA funktioniert noch. Die Gründe für einen Ersatz drehen sich meist um die Kosten für Besucher und für dich. Version 2 zeigt manchen Besuchern Bilderrätsel, was auf dem Handy langsam und für Screenreader-Nutzer schwierig ist. Version 3 ist unsichtbar, liefert aber einen Score, für den du selbst die Schwelle setzen musst, ohne Challenge als Rückfallebene. Und reCAPTCHA ist jetzt ein Google-Cloud-Produkt: Googles Abrechnungsdokumentation nennt ein kostenloses Kontingent von 10.000 Assessments pro Monat, mit kostenpflichtigen Stufen darüber.
Manche Teams wollen außerdem weniger Drittanbieter-Skripte auf ihren Seiten. Ob das für deine Datenschutzpflichten relevant ist, ist eine Frage für deine eigene rechtliche Prüfung; diese Seite vergleicht nur, wie die Tools funktionieren.
Die Alternativen im Vergleich
| Option | Was Besucher sehen | Wer verifiziert | Gut zu wissen |
|---|---|---|---|
| reCAPTCHA v2 | Eine Checkbox, manchmal Bilderrätsel | Dein Server, bei Google | Vertraut. Die Rätsel sind der Hauptkritikpunkt |
| reCAPTCHA v3 | Nichts | Dein Server, bei Google | Liefert einen Score von 0,0 bis 1,0. Du wählst die Grenze und kümmerst dich um die Grauzone |
| Cloudflare Turnstile | Meist nichts, manchmal eine Checkbox | Dein Server, bei Cloudflare | Keine Bilderrätsel. Kostenlos für bis zu 20 Widgets |
| hCaptcha | Eine Checkbox, manchmal Bilderrätsel | Dein Server, bei hCaptcha | Vom Aufbau her ähnlich wie reCAPTCHA v2, von einem anderen Unternehmen. Ein kostenloser Basic-Tarif, mit kostenpflichtigen Pro- und Enterprise-Tarifen |
| Friendly Captcha | Ein kleines Widget, das im Hintergrund ein Rätsel löst | Dein Server, bei Friendly Captcha | Proof-of-Work statt Tracking-Signalen. Kostenlos für kleine nicht kommerzielle Sites, kostenpflichtige Tarife für alle anderen |
| ALTCHA | Ein kleines Widget, das im Hintergrund ein Rätsel löst | Nur dein eigener Server | Open Source und selbst gehostet, also ohne Drittanbieter. Du betreibst und pflegst es |
| No captcha | Nichts | Dein Server | Honeypot, signiertes Timing, Inhaltsbewertung und Rate-Limits. Stoppt die meisten Bots, nicht alle |
Jede Option außer der letzten hängt weiterhin von einer serverseitigen Prüfung ab. Ein Widget allein stoppt nichts, weil ein Bot an deinen Endpunkt senden kann, ohne die Seite zu laden.
Was jede Option von Menschen verlangt
Beurteile jede Option nach dem Besucher, der sich damit am schwersten tut. Bilderrätsel sind auf dem Handy langsam und für jemanden, der schlecht sieht, schwer oder unmöglich; Audio-Alternativen helfen manchen und frustrieren andere. Unsichtbare Prüfungen wie der übliche Modus von Turnstile, reCAPTCHA v3 und Proof-of-Work-Widgets verlangen von den meisten Besuchern nichts, können aber bei Leuten mit datenschutzorientierten Browsern, strengen Netzwerken oder alten Geräten trotzdem scheitern. Wenn das passiert, braucht die Person einen Ausweg: eine sichtbare Checkbox, eine klare Meldung oder eine E-Mail-Adresse, an die sie stattdessen schreiben kann. Ein Formular, das still scheitert, verliert genau die Nachrichten, von denen du nie erfährst.
In zwei Fragen entscheiden
- Frag zuerst, ob Bots an unsichtbaren Prüfungen vorbeikommen. Wenn nicht, bleib ohne Captcha, mit Honeypot, Bewertung und Rate-Limit.
- Wenn doch, frag, ob du Servercode ausführen kannst. Wenn ja, wähle ein Widget wie Turnstile, hCaptcha oder ALTCHA und verifiziere es auf deinem Server.
- Ohne Server sende das Formular an ein Backend, das deine Turnstile-Schlüssel für dich verifiziert, oder nutze eine verwaltete Prüfung, die keine Schlüssel braucht.
Von reCAPTCHA zu Turnstile wechseln
Die beiden sind sich so ähnlich, dass der Wechsel auf jeder Seite nur ein paar Zeilen umfasst. Leg im Cloudflare-Dashboard ein Turnstile-Widget für dieselben Hostnamen an und ändere dann Markup und Serverprüfung gemeinsam.
| Teil | reCAPTCHA v2 | Turnstile |
|---|---|---|
| Skript | https://www.google.com/recaptcha/api.js | https://challenges.cloudflare.com/turnstile/v0/api.js |
| Element | <div class="g-recaptcha" data-sitekey> | <div class="cf-turnstile" data-sitekey> |
| Token-Feld | g-recaptcha-response | cf-turnstile-response |
| Verifizierungs-URL | https://www.google.com/recaptcha/api/siteverify | https://challenges.cloudflare.com/turnstile/v0/siteverify |
| Verifizierungsparameter | secret, response, remoteip | secret, response, remoteip, idempotency_key |
<form action="/api/contact" method="POST">
<input name="email" type="email" required />
<textarea name="message" required></textarea>
<div class="g-recaptcha" data-sitekey="RECAPTCHA_SITE_KEY"></div>
<button>Send</button>
</form>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>const form = await request.formData();
const body = new URLSearchParams({
secret: process.env.RECAPTCHA_SECRET_KEY!,
response: String(form.get("g-recaptcha-response") ?? ""),
});
const check = await fetch("https://www.google.com/recaptcha/api/siteverify", { method: "POST", body });
const { success } = (await check.json()) as { success: boolean };- Das gilt für klassische reCAPTCHA-Schlüssel, die bei
siteverifyverifiziert werden. In Google Cloud erstellte Schlüssel werden stattdessen über die Assessments-API von reCAPTCHA Enterprise geprüft; die Turnstile-Seite ist dieselbe. - Wenn du v3 genutzt hast, entferne deine Score-Schwelle. Turnstile antwortet mit bestanden oder nicht bestanden; prüfe stattdessen
actionin seiner Antwort. - Aktualisiere deine Content Security Policy: Erlaube
https://challenges.cloudflare.cominscript-srcundframe-srcund entferne die Google-Einträge, sobald nichts sie mehr nutzt. - Liefere Markup und Serveränderung im selben Deployment aus. Eine Seite mit dem neuen Widget, die an einen Server sendet, der noch
g-recaptcha-responseerwartet, lässt jede Einsendung scheitern.
reCAPTCHA durch Ikiform ersetzen
Wenn dein Formular an Ikiform sendet, entferne das reCAPTCHA-Widget komplett. Ikiform verifiziert keine reCAPTCHA- oder hCaptcha-Tokens. Der übrig gebliebene Wert g-recaptcha-response käme als zusätzliches Feld an oder würde mit 422 validation_failed als unbekanntes Feld scheitern, wenn du die Felder des Formulars definiert hast. Wähle dann, was es ersetzt:
- Nichts weiter. Honeypot, Inhaltsbewertung und Rate-Limits laufen bei jedem Formular. Viele Kontaktformulare brauchen nicht mehr.
- Spamprüfung auf Ikiform. Cloudflare Turnstile, von Ikiform ausgeführt, ohne Konto oder Schlüssel. Ein einfacher HTML-Post bekommt eine kurze Prüfseite;
fetch-Code ruftchallenge()aus@ikiform/sdkauf. - Eigene Turnstile-Schlüssel. Behalte dein eigenes Widget auf der Seite, füge die Schlüssel in die Einstellungen des Formulars ein, und Ikiform verifiziert das Token.
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="POST">
<input name="email" type="email" required />
<textarea name="message" required></textarea>
<input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
<button>Send</button>
</form>Dieses Formular hat gar kein Widget. Mit Spam check auf Ikiform findet die Menschlichkeitsprüfung nach dem Post auf ikiform.com statt, deine Seite lädt also kein Captcha-Skript. Die Spam-Dokumentation behandelt jeden Modus.
Prüfen, ob es funktioniert
- Sende das Formular nach dem Wechsel ab. Der Post wird angenommen, und du hast höchstens eine Checkbox gesehen.
- Sende mit curl ohne Token an den Endpunkt. Er wird abgelehnt, was beweist, dass der Server das neue Token prüft.
- Durchsuche deine Seiten nach
g-recaptchaundrecaptcha/api.js. Nichts ist übrig. - Öffne Submissions im Dashboard. Die neue Einsendung ist da, mit jedem Feld, das du gesendet hast.
- Nichts angekommen? Stell den Statusfilter im Dashboard auf Spam. Spam bekommt dieselbe Erfolgsantwort wie eine echte Einsendung.
Stolperfallen
- Baukasten-Einstellungen. Website-Baukästen mit eingebauter reCAPTCHA-Einstellung verlangen das Element eventuell in jedem Formular, solange sie aktiv ist. Schalte die Einstellung aus, bevor du die Elemente entfernst.
- Gecachte Seiten. Besucher mit einer alten gecachten Seite senden nach dem Deployment noch eine Weile
g-recaptcha-response. Rechne mit ein paar Fehlschlägen oder akzeptiere einen Tag lang beide Tokens. - v3-Scores in Berichten. Wenn Dashboards oder Alerts den reCAPTCHA-Score lesen, verstummen sie nach dem Wechsel. Aktualisiere sie.
Fragen
Für die meisten Formulare Cloudflare Turnstile: Es ist meist unsichtbar, kostet in kleinem Umfang nichts und verifiziert mit denselben Parametern secret und response. Wenn du gar keinen Drittanbieter willst, funktioniert ein selbst gehostetes Proof-of-Work-Tool wie ALTCHA. Viele Kontaktformulare brauchen kein Captcha, sobald Honeypot, Bewertung und Rate-Limit vorhanden sind.
Googles Abrechnungsdokumentation nennt ein kostenloses Kontingent von 10.000 Assessments pro Monat, mit kostenpflichtigen Stufen darüber. Prüfe die aktuellen Preise von Google, bevor du darauf planst.
Nein. Ikiform verifiziert nur Cloudflare Turnstile, entweder mit seiner eigenen verwalteten Prüfung oder mit deinen eigenen Turnstile-Schlüsseln. Entferne andere Captcha-Widgets aus Formularen, die an Ikiform senden.
Meist nicht. Du änderst die Skript-URL, die Klasse des Elements, den Namen des Token-Felds und die Verifizierungs-URL und behältst dieselben Parameter secret und response. Deploye Seite und Serveränderung gemeinsam.
Hängst du bei einem Schritt fest oder willst eine Anleitung für deinen Fall? Schreib an hello@ikiform.com.