Pengiriman formulir HTML6 menit baca
Redirect ke halaman terima kasih setelah submit formulir
Arahkan pengunjung ke halaman terima kasih Anda sendiri setelah formulir terkirim: redirect 303, field _redirect, domain mana yang diizinkan, dan apa efek refresh.
Formulir tidak bisa me-redirect dirinya sendiri; server yang menerima post menjawab 303 See Other dengan header Location, dan browser memuat halaman itu. Dengan Ikiform, atur Redirect after submit di pengaturan formulir, atau tambahkan input _redirect tersembunyi dengan URL https: di salah satu Allowed domains formulir. Tanpa keduanya, pengunjung mendarat di halaman terima kasih hosted milik Ikiform.
Contohnya adalah formulir permintaan demo yang halaman terima kasihnya sebenarnya langkah berikutnya: halaman itu meminta pengunjung memilih waktu. Itu membuat tujuan redirect lebih penting dari biasanya, dan memunculkan pertanyaan yang menjadi inti halaman ini: siapa yang boleh menentukan ke mana formulir mengirim orang.
Apa yang berbeda di sini
HTML tidak punya atribut untuk "pergi ke sini setelah submit". action adalah tujuan data, dan halaman sesudahnya adalah apa pun yang dijawab server. Jadi redirect selalu menjadi keputusan server penerima. Saat server itu adalah Ikiform, ada tepat dua cara untuk memengaruhinya, dan tingkat kepercayaannya tidak sama.
| Item | Pengaturan Redirect after submit | Input tersembunyi _redirect |
|---|---|---|
| Siapa yang mengaturnya | Anggota workspace Anda, di dashboard | Siapa pun yang bisa mengedit HTML halaman, atau browser pengunjung |
| Tujuan yang diizinkan | URL http: atau https: apa pun | Hanya https:, di domain yang diizinkan atau subdomainnya |
| Cakupan | Satu tujuan untuk seluruh formulir | Satu per halaman, jadi per bahasa atau per kampanye |
| Saat keduanya diatur | Menang | Diabaikan |
Aturan ketat pada _redirect ada karena nilainya datang bersama post. Tanpa aturan itu, siapa pun bisa menaruh URL formulir Anda di tautan yang mengirim lalu melempar pengunjung ke halaman phishing, itulah yang disebut open redirect.
- Jika formulir punya URL Redirect after submit di pengaturannya, Ikiform menjawab dengan 303 ke sana dan tidak mencari lagi.
- Jika tidak, dan post punya field _redirect, atau _next, berupa URL https di domain yang diizinkan tanpa port atau kredensial, Ikiform me-redirect ke sana.
- Jika tidak, Ikiform me-redirect ke halaman terima kasih hosted-nya, yang menautkan kembali ke halaman Anda jika post datang dari halaman https di domain yang diizinkan.
Formulirnya
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
<label for="email">Work email</label>
<input id="email" name="email" type="email" autocomplete="email" required />
<label for="company">Company</label>
<input id="company" name="company" autocomplete="organization" required />
<label for="team_size">Team size</label>
<select id="team_size" name="team_size">
<option value="1-10">1 to 10</option>
<option value="11-50">11 to 50</option>
<option value="51+">51 or more</option>
</select>
<input type="hidden" name="_redirect" value="https://example.com/demo/next-step" />
<input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
<button>Request a demo</button>
</form>Tambahkan example.com di Allowed domains formulir dan formulir ini mengirim, mendapat 303, dan mendarat di /demo/next-step. Halaman terima kasih adalah HTML biasa di situs Anda:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="robots" content="noindex" />
<title>Thanks, pick a time</title>
</head>
<body>
<h1>Thanks. One more step.</h1>
<p>Pick a time for your demo. You'll get a calendar invite right away.</p>
<p><a href="https://cal.example.com/acme/demo">Choose a time</a></p>
</body>
</html>noindexmenjauhkannya dari hasil pencarian. Tidak ada yang seharusnya mendarat di sana dari Google, dan halaman terima kasih yang muncul sebagai halaman masuk di analytics adalah tanda ada yang menautkannya.- Refresh aman. Karena Ikiform menjawab dengan
303, browser memuat halaman ini dengan GET, dan memuat ulangnya tidak mengirim apa pun lagi. - Jika Anda menghitung konversi di halaman ini, hitung sekali per sesi. Refresh atau bookmark memuatnya ulang, dan dashboard Ikiform adalah hitungan yang sebenarnya.
Redirect ke situs lain
Misalkan Anda ingin melewati halaman Anda sendiri dan langsung mengirim orang ke alat booking di domain lain, seperti cal.example.com atau domain layanan penjadwalan. Dengan _redirect, domain itu harus ada di Allowed domains, dan daftar itu punya tugas kedua: menentukan situs mana yang boleh mengirim ke formulir. Menambahkan domain layanan penjadwalan berarti halaman di domain itu juga bisa mengirim ke formulir Anda.
Gunakan Redirect after submit di pengaturan formulir. Pengaturan ini menerima URL apa pun, karena hanya workspace Anda yang bisa mengaturnya, dan membuat Allowed domains hanya mencantumkan situs Anda sendiri.
Halaman berbeda untuk formulir berbeda
Pengaturan dashboard berupa satu URL per formulir. Saat satu formulir muncul di beberapa halaman yang butuh halaman terima kasih berbeda, kosongkan pengaturan itu dan beri setiap halaman _redirect-nya sendiri. Halaman berbahasa Jerman mengirim pengunjung ke halaman terima kasih berbahasa Jerman:
<input type="hidden" name="_redirect" value="https://example.com/de/demo/danke" />Menambahkan nilai ke redirect
Query string di _redirect dipertahankan, jadi Anda bisa meneruskan pilihan pengunjung ke halaman terima kasih. Atur nilainya di listener submit, yang berjalan setelah validasi browser dan sebelum formulir di-encode:
const form = document.querySelector("form");
const redirect = form.elements.namedItem("_redirect");
form.addEventListener("submit", () => {
const size = form.elements.namedItem("team_size").value;
const next = new URL("https://example.com/demo/next-step");
next.searchParams.set("size", size);
redirect.value = next.href;
});Pengunjung tiba di /demo/next-step?size=11-50, dan halaman bisa menampilkan tautan booking yang tepat untuk ukuran tim itu. Batasi pada nilai yang tidak bersifat pribadi: query string tersimpan di riwayat browser, log server, dan analytics.
Redirect setelah submit dengan fetch
Panggilan fetch mendapat JSON, bukan redirect, jadi aturan redirect Ikiform tidak berlaku. Navigasikan sendiri saat jawabannya ok:
const response = await fetch(form.action, {
method: "POST",
headers: { Accept: "application/json" },
body: new FormData(form),
});
const result = await response.json();
if (result.ok) location.assign("/demo/next-step");Gunakan location.assign alih-alih location.replace jika tombol back seharusnya kembali ke formulir. Panduan tanpa reload berisi handler lengkap dengan error dan status loading.
Pastikan berfungsi
- Di Allowed domains formulir, tambahkan domain situs Anda, ditambah
localhostselama pengembangan. Biarkan kosong untuk menerima kiriman dari mana saja. - Kirim formulir dari halaman live Anda. Address bar menampilkan halaman terima kasih Anda, dan panel Network menunjukkan post dijawab dengan
303. - Tekan refresh di halaman terima kasih. Browser tidak meminta kirim ulang, dan dashboard tetap menampilkan satu kiriman.
- Ubah
_redirectke alamat di domain yang tidak diizinkan lalu kirim. Anda mendarat di halaman terima kasih hosted milik Ikiform, tanpa error. - Buka Submissions di dashboard. Kiriman baru ada di sana dengan setiap field yang Anda kirim.
Hal yang sering menjebak
| Masalah | Penyebab dan solusi |
|---|---|
_redirect diabaikan meski domainnya diizinkan | Redirect after submit diatur di pengaturan formulir, dan pengaturan itu selalu menang. Kosongkan untuk memakai redirect per halaman |
Berfungsi di produksi, tidak di localhost | _redirect harus https: tanpa port, jadi http://localhost:3000/thanks tidak pernah lolos. Uji di preview deploy, atau terima halaman hosted saat lokal |
| Halaman terima kasih hosted tidak punya tautan kembali ke situs Anda | Halaman itu hanya menautkan kembali jika post datang dari halaman https: di salah satu domain yang diizinkan formulir. Tambahkan domainnya, atau redirect ke halaman Anda sendiri |
| Browser mendarat di halaman terima kasih Ikiform, bukan halaman Anda | _redirect diabaikan kecuali domainnya ada di Allowed domains dan berupa URL https:. Tambahkan domainnya, atau atur Redirect after submit di pengaturan formulir sebagai gantinya. |
| Halaman terima kasih muncul di hasil pencarian | Tambahkan <meta name="robots" content="noindex"> ke halaman itu, dan jangan menautkannya dari navigasi Anda |
Aturan persisnya, dengan contoh URL yang lolos dan gagal, ada di formulir HTML. Ringkasan menjelaskan mengapa jawabannya 303 dan bukan 302 atau 200.
Pertanyaan
Server yang menerima formulir menjawab dengan redirect 303 ke halaman itu. Dengan Ikiform, atur Redirect after submit di pengaturan formulir, atau tambahkan input _redirect tersembunyi dengan URL https di salah satu domain yang diizinkan formulir.
Entah pengaturan Redirect after submit formulir sudah diatur, yang selalu menang, atau URL-nya gagal memenuhi aturan: harus https, di domain yang diizinkan atau subdomainnya, tanpa port, username, atau password. Formulir tanpa allowed domains mengabaikan _redirect.
Bisa. Taruh URL di pengaturan Redirect after submit formulir, yang menerima URL http atau https apa pun. Memakai _redirect justru berarti menambahkan situs itu ke allowed domains Anda, yang juga mengizinkannya mengirim ke formulir Anda.
Tidak dari redirect Ikiform, yang memakai URL persis seperti yang diberikan. Anda bisa menambahkan nilai yang tidak bersifat pribadi ke URL _redirect di listener submit, atau menampilkan pesan dari script Anda sendiri setelah submit dengan fetch.
Mentok di salah satu langkah, atau ingin panduan untuk situasi Anda? Email hello@ikiform.com.