# Hochzeits-RSVP-Formular auf deiner eigenen Hochzeitswebsite

> Ein RSVP-Formular für eine selbst gebaute Hochzeitswebsite: eine Antwort pro Einladung, ein Menü pro Gast, eine Frist und eine Liste, wer noch nicht geantwortet hat.

Veröffentlicht am 2026-10-25 · https://ikiform.com/de/guides/event-registration/wedding-rsvp

Gib jeder Einladung einen eigenen RSVP-Link mit Einladungscode und den Namen der Gäste, und lass das Formular pro Gast einen Namen und eine Menüwahl anzeigen. Jede Antwort wird an Ikiform gesendet, du bekommst also für jede eine E-Mail und eine CSV für das Catering. Gleiche die Antworten in einer Tabelle mit deiner Gästeliste ab, um zu sehen, wer noch nicht geantwortet hat, und pausiere das Formular nach deiner Frist.

## Was bei einer Hochzeit anders ist

Ein Meetup zählt Fremde. Eine Hochzeit zählt eine Gästeliste, die du schon hast, Einladung für Einladung. Daraus folgen vier Dinge:

- **Eine Antwort pro Einladung, nicht pro Person.** Ein Paar oder eine Familie antwortet gemeinsam.
- **Namentliche Gäste statt einer Gästezahl.** Du hast Ada und Sam eingeladen, nicht `2`. Begleitpersonen stehen auf der Einladung oder eben nicht.
- **Ein Menü pro Person.** Das Catering braucht die Summen für Fisch, Rind und vegetarisch, plus Kinderteller.
- **Eine feste Frist und eine Nachfassliste.** Die Location will die Zahlen bis zu einem Datum, und die nützliche Liste ist die, wer noch nicht geantwortet hat.

Hochzeitswebsite-Dienste wie Zola, The Knot und Joy haben RSVP-Tools, die auf einer Gästeliste aufbauen, mit Suche nach Namen. Wenn du einen davon für deine Site nutzt, nimm dessen RSVP. Diese Seite ist für eine Hochzeitsseite, die du selbst gebaut hast, auf Squarespace, Carrd, Framer oder mit einfachem HTML, bei der die Rückmeldung auf deiner eigenen Seite stattfinden soll.

Ikiform hat keine Gästelisten-Suche und keine sich wiederholenden Feldgruppen, das Formular kann also nicht von selbst wissen, wer zu einer Einladung gehört. Der Trick ist, dieses Wissen in den Link zu packen.

Diagramm: Von der Gästeliste zu den Zahlen fürs Catering, mit persönlichen RSVP-Links

1. Deine Gästelisten-Tabelle hat eine Zeile pro Einladung: einen kurzen Code, den Namen des Haushalts und die Namen der Gäste.
2. Eine Formel macht aus jeder Zeile einen persönlichen RSVP-Link mit Code und Namen.
3. Du druckst den Link als QR-Code auf die Einladung oder schickst ihn in einer Nachricht.
4. Die RSVP-Seite liest den Link, zeigt pro Gast einen Namen und eine Menüwahl und sendet dann an Ikiform.
5. Du exportierst die Antworten als CSV und importierst sie neben die Gästeliste.
6. Der Abgleich der Codes zeigt, welche Einladungen noch nicht geantwortet haben, damit du weißt, bei wem du nachhaken musst.
7. Zählst du jedes Menü über alle Antworten, ergeben sich die Summen fürs Catering.

Die Gästeliste bleibt in deiner Tabelle. Der Link trägt nur so viel davon, wie nötig ist, um das Formular persönlich zu machen.

## Einen Link pro Einladung erstellen

Trage in deiner Gästelisten-Tabelle einen kurzen Code in Spalte A ein, etwa `okafor` oder `nguyen-family`, den Haushalt in B und die Vornamen der Gäste in C, durch Kommas getrennt. Diese Formel in D baut den Link:

`Gästeliste, Spalte D`:

```text
="https://ada-and-sam.example/rsvp?party=" & A2 & "&names=" & ENCODEURL(C2)
```

Druck jeden Link als QR-Code auf die Einladung oder füge ihn in eine Nachricht ein. Schreib Codes klein und mit Bindestrichen; das Pattern des Felds lehnt alles andere ab, wodurch ein vertippter Code früh auffällt.

## Das Formular

Füge das in deine Hochzeitsseite ein oder in einen Embed-Block in einem Baukasten. Es liest `party` und `names` aus dem Link, fügt pro Gast eine Zeile mit Name und Menü hinzu, bis zu vier, und blendet sich nach der Frist aus. Ohne Namen im Link zeigt es eine einzelne Zeile zum Ausfüllen.

`rsvp.html`:

```html
<form id="rsvp" action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="post">
  <input type="hidden" name="party" id="party">
  <div id="guests"></div>
  <label>Email for updates <input name="email" type="email" autocomplete="email" required></label>
  <label>A song that gets you dancing <input name="song" maxlength="120"></label>
  <label>Anything we should know? <textarea name="note" rows="3" maxlength="1000"></textarea></label>
  <input type="hidden" name="_redirect" value="https://ada-and-sam.example/thank-you">
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden>
  <button type="submit">Send our RSVP</button>
</form>
<p id="closed" hidden>RSVPs closed on 1 May. Message us if your plans have changed.</p>

<template id="guest-row">
  <fieldset>
    <legend></legend>
    <label>Name <input data-part="name" maxlength="80" autocomplete="off"></label>
    <label>Meal
      <select data-part="meal">
        <option value="beef">Beef</option>
        <option value="fish">Fish</option>
        <option value="vegetarian">Vegetarian</option>
        <option value="child">Child's menu</option>
        <option value="not_coming">Can't come</option>
      </select>
    </label>
  </fieldset>
</template>

<script>
  const DEADLINE = new Date("2027-05-01T23:59:00+01:00");
  const params = new URLSearchParams(location.search);
  const party = (params.get("party") ?? "").toLowerCase();
  const names = (params.get("names") ?? "").split(",").map((name) => name.trim()).filter(Boolean).slice(0, 4);
  const rsvp = document.getElementById("rsvp");

  if (Date.now() > DEADLINE.getTime()) {
    rsvp.hidden = true;
    document.getElementById("closed").hidden = false;
  } else {
    document.getElementById("party").value = party;
    const rows = names.length ? names : [""];
    rows.forEach((name, index) => {
      const n = index + 1;
      const row = document.getElementById("guest-row").content.cloneNode(true);
      row.querySelector("legend").textContent = name || "Your name";
      const input = row.querySelector('[data-part="name"]');
      input.name = `guest_${n}_name`;
      input.value = name;
      input.required = n === 1;
      row.querySelector('[data-part="meal"]').name = `guest_${n}_meal`;
      document.getElementById("guests").append(row);
    });
  }
</script>
```

- Das Menü jedes Gastes enthält `Can't come`, sodass ein Haushalt, in dem eine Person nicht kommen kann, trotzdem eine einzige Antwort sendet.
- Die Namensfelder sind vorausgefüllt, aber bearbeitbar, damit ein Gast eine Schreibweise korrigieren oder ein Kind eintragen kann.
- Das Formular sendet auf klassischem Weg und landet über `_redirect` auf deiner Dankeseite. Schreib Datum, Ort und einen Kalenderlink dorthin; Ikiform schickt deinen Gästen keine E-Mails.
- Die Frist blendet das Formular nur im Browser aus. Wähle zum Stichtag auch in Ikiform **Pause form**, damit ein gespeicherter Tab nichts mehr senden kann. Pausierte Formulare antworten mit `403 form_paused`.

Füge diese Definition im Tab **Fields** des Formulars ein. Probier es aus: Ein Einladungscode mit Großbuchstabe oder Leerzeichen scheitert am Pattern, mit der Meldung, die du festgelegt hast.

Formular: Wedding RSVP

- **Einladungscode** (`party`, text, Pflichtfeld)
- **E-Mail für Neuigkeiten** (`email`, email, Pflichtfeld)
- **Name Gast 1** (`guest_1_name`, text, Pflichtfeld)
- **Menü Gast 1** (`guest_1_meal`, select, Pflichtfeld)
- **Name Gast 2** (`guest_2_name`, text)
- **Menü Gast 2** (`guest_2_meal`, select)
- **Name Gast 3** (`guest_3_name`, text)
- **Menü Gast 3** (`guest_3_meal`, select)
- **Name Gast 4** (`guest_4_name`, text)
- **Menü Gast 4** (`guest_4_meal`, select)
- **Ein Song, bei dem du tanzen musst** (`song`, text)
- **Sollten wir noch etwas wissen?** (`note`, textarea)

Die Felder folgen der Reihenfolge auf der Einladung, daher steht in der CSV hinter dem Namen jedes Gastes sein Menü. Nur der erste Gast ist Pflicht.

## Wer noch nicht geantwortet hat und was zu bestellen ist

1. Exportiere die Rückmeldungen unter **Submissions** als CSV und importiere sie in einen Tab namens `Replies` in der Gästelisten-Tabelle.
2. Hat eine Einladung zweimal geantwortet, behalte ihre neueste Zeile: Sortiere nach `created_at`, neueste zuerst, und entferne Duplikate in der Spalte `party`.
3. Liste die Einladungen ohne Antwort auf, mit den Codes in Spalte A der Gästeliste und `party` in Spalte E von Replies:

`Nicht geantwortet`:

```text
=FILTER(A2:C, A2:A <> "", ISNA(MATCH(A2:A, Replies!E2:E, 0)))
```

Zähle dann jedes Menü für das Catering. Namen entsprechen nie einem Menüwert, daher funktioniert ein Bereich über alle Gästespalten:

`Fischteller`:

```text
=COUNTIF(Replies!G2:N, "fish")
```

| Zahl | Wie |
| --- | --- |
| Personen, die kommen | Addiere die Zahlen für `beef`, `fish`, `vegetarian` und `child` |
| Kann nicht kommen | `COUNTIF` über denselben Bereich für `not_coming` |
| Kinderteller | `COUNTIF` für `child`, was die meisten Caterer separat berechnen |
| Hinweise zur Ernährung | Lies die Spalte `note`. Dort verstecken sich Allergien |

> Benachrichtigungs-E-Mails kommen mit der E-Mail-Adresse des jeweiligen Gastes als Reply-To an, sodass du Fragen direkt aus deinem Postfach beantworten kannst. Ikiform schickt E-Mails an dich und deinen Partner, nicht an deine Gäste.

## Bevor du die Einladungen verschickst

- Setze **Allowed domains** auf die Domain deiner Hochzeitsseite und, während du testest, auf die Staging-Domain des Baukastens.
- Ikiform führt wiederholte Einsendungen per E-Mail-Adresse weder zusammen noch lehnt es sie ab. Eine identische Wiederholung innerhalb von 24 Stunden erhöht nur den Spam-Score. Dedupliziere dort, wo die Liste liegt, oder beim Export. Die neueste Antwort pro Code ist die gültige.
- Jeder mit einem Link kann dessen Code oder Namen ändern. Für eine Hochzeit ist das in Ordnung; deine Tabelle entscheidet, wer eingeladen war, und die Liste der fehlenden Antworten zeigt alles Ungewöhnliche.
- Ältere Verwandte nutzen das Formular vielleicht gar nicht. Trag Antworten per Telefon oder auf Papier in deine Tabelle ein, damit die Zahlen vollständig bleiben.

## Vor dem Versand der Einladungen prüfen

1. Öffne deinen eigenen Einladungslink auf dem Handy. Die Namen werden angezeigt, jeweils mit Menüwahl.
2. Wähle bei einem Gast `Can't come`, sende ab und lande auf deiner Dankeseite.
3. Öffne **Submissions** im Dashboard. Die neue Einsendung ist da, mit jedem Feld, das du gesendet hast.
4. Prüfe das Postfach jedes Benachrichtigungsempfängers. Jeder bekommt eine E-Mail mit den Feldern, und **Reply** geht an den Absender, wenn das Formular ein `email`-Feld hat.
5. Importiere die CSV und prüfe, ob die Liste der fehlenden Antworten deinen Code nicht mehr zeigt.
6. Setze die Frist in einer Testkopie auf gestern und prüfe, ob sich das Formular ausblendet.

## Stolperfallen

| Problem | Was zu tun ist |
| --- | --- |
| `422` mit `party: Use the link from your invitation` | Der Code enthält Großbuchstaben, Leerzeichen oder andere Zeichen. Korrigiere den Code in der Tabelle oder lass den Gast seinen Link verwenden. |
| Ein Gast sieht eine leere Zeile statt Namen | Der Link hat seinen `names`-Teil verloren, oft weil eine Messenger-App ihn gekürzt hat. Schick den vollständigen Link oder den QR-Code. |
| `422 validation_failed` | Der Post passt nicht zur Felddefinition des Formulars. `error.fields` nennt jedes Feld und den Grund. Gleiche den `name` des Eingabefelds an die Feld-ID an. |
| `403 origin_not_allowed`, oder jeder Post landet im Spam | Die Domain der Seite steht nicht unter **Allowed domains** des Formulars. Füge sie hinzu, plus `localhost` für lokale Tests. Subdomains einer eingetragenen Domain sind erlaubt. |
| Der Browser landet auf der Dankeseite von Ikiform statt auf deiner | `_redirect` wird ignoriert, außer seine Domain steht unter **Allowed domains** und es ist eine `https:`-URL. Füge die Domain hinzu oder setze stattdessen **Redirect after submit** in den Einstellungen des Formulars. |

## Fragen

### Können Gäste sehen, wer sonst noch kommt?

Nein. Rückmeldungen gehen in dein Ikiform-Dashboard und in dein Postfach. Nichts wird auf der Site veröffentlicht.

### Kann das Formular den Gästen eine Bestätigungs-E-Mail schicken?

Nicht über Ikiform, das nur dir E-Mails schickt. Zeig die Details auf der Dankeseite oder schick jede Antwort per Webhook an ein E-Mail-Tool und versende die Bestätigung von dort.

### Wie stoppe ich Rückmeldungen nach der Frist?

Blende das Formular nach dem Datum auf der Seite aus, wie es das Beispiel tut, und wähle in Ikiform Pause form. Ein pausiertes Formular lehnt neue Posts mit 403 form_paused ab.

### Was, wenn ein Gast zweimal antwortet?

Beide Antworten werden gespeichert. Behalte beim Zählen die neueste pro Einladungscode, indem du neueste zuerst sortierst und Duplikate beim Code entfernst.

### Ist Ikiform kostenlos?

Nein, es gibt keinen kostenlosen Tarif. Testen ist kostenlos: Du kannst 50 Testeinsendungen pro Monat von localhost senden, bevor du zahlst. Für den Livebetrieb startet Pro bei $6/Monat für 500 Einsendungen, oder du zahlst einmalig 10.000 Einsendungen für $49 oder 50.000 Einsendungen für $149, mit Guthaben, das nie verfällt.

## Weitere Anleitungen

- [Eventanmeldung](https://ikiform.com/de/guides/event-registration.md): Nimm Zusagen auf deiner eigenen Eventseite entgegen: Formular, Begleitpersonen-Limit, ehrliche Teilnehmerzahl, Schließen bei voller Kapazität und Check-in-Liste, ohne Ticketing-App.
- [Ohne Eventbrite](https://ikiform.com/de/guides/event-registration/without-eventbrite.md): Nimm Anmeldungen für ein kostenloses Community-Event auf deiner eigenen Site entgegen: Sessionwahl, Bestätigungsmail aus deinem eigenen Tool, Raumzahlen und Check-in-Liste.
- [Helferanmeldung](https://ikiform.com/de/guides/event-registration/volunteer-signup.md): Ein Anmeldeformular für Helfer, in dem man Schichten wählt, mit Telefonnummer für den Tag, und ein Skript, das unterbesetzte Schichten zeigt und den Dienstplan erstellt.
