Zweck und Zielgruppe
Die CapCorn Buchungsmaschine (CapBooking PRO) bindet auf Wunsch Ihren Google Tag Manager (GTM) ein und übergibt fünf E-Commerce-Events an den dataLayer. Diese Anleitung richtet sich an Hotels und an die betreuende Online-Agentur, die den GTM-Container konfiguriert.
Neu gegenüber Version 1:
- Übersicht, welche Seite der Buchungsstrecke welches Event auslöst
- Genaue Bedeutung der übergebenen Werte (Preise, IDs, Währung)
- Neue Felder
booking_type,arrival_dateundnights purchasewird pro Reservierung nur noch einmal gesendet- Neues Format für
item_id(Kategorie bzw. Pauschale statt Zimmernummer) unditem_namewie für den Gast sichtbar - Hinweise zu Domain, Cross-Domain-Tracking und Online-Zahlung
- Klare Aussage zur Cookie-Einwilligung im GTM-Modus
- Einrichtungs-Checkliste für Agenturen
Aktivierung im CapCorn-Wartungsportal
Die Aktivierung erfolgt im Wartungsportal und wirkt nach dem nächsten Datenabgleich.
- Im Wartungsportal den Menüpunkt Allgemein → Google Analytics Einstellungen öffnen.
- Die Option Google Tag Manager verwenden wählen.
- Die Container-ID im Format
GTM-XXXXXXXeintragen und speichern. - Einen Datenabgleich durchführen, damit die Änderung freigegeben wird.
Das Feld Domain für Cross Domain Tracking wirkt nur bei Google Analytics 4 direkt. Im GTM-Modus wird Cross-Domain-Tracking im Container eingerichtet (siehe nächster Abschnitt).
Danach bindet die Buchungsmaschine auf jeder Seite automatisch ein:
- das GTM-Script im
<head> - das Noscript-iframe direkt nach dem öffnenden
<body>-Tag - die E-Commerce-Events (siehe Event-Referenz)
Wichtig: GA4 direkt und GTM schließen sich aus. Beide Varianten nutzen dasselbe ID-Feld. Wer den Tag Manager verwendet, richtet Google Analytics 4 und alle weiteren Dienste (Google Ads, Meta Pixel usw.) im GTM-Container ein. Eine zusätzliche GA4-Mess-ID kann in der Buchungsmaschine nicht hinterlegt werden.
Auf welcher Domain läuft die Buchungsstrecke?
Die Buchungsmaschine läuft standardmäßig auf einer CapCorn-Domain (z. B. www.capcorn.net), nicht auf der Hotel-Website. Je nach Einbindung gilt:
| Betriebsart | Domain im Browser | Was die Agentur beachten muss |
|---|---|---|
| Standard (Link auf die Buchungsmaschine) | capcorn.net | Cross-Domain-Tracking zwischen Hotel-Website und capcorn.net einrichten; eigenes Consent-Tool im GTM-Container nötig |
Unter eigener Domain via Reverse-Proxy, z. B. www.hotel.at/booking/ (ab Winter 26/27 verfügbar) | Hotel-Domain | Kein Cross-Domain-Tracking nötig; das Consent-Tool der Hotel-Website kann weiterverwendet werden. Einrichtung in Abstimmung mit CapCorn |
Cross-Domain: Im GA4-Tag (bzw. in der GA4-Verwaltung unter Datenstreams → Tag-Einstellungen → Domains konfigurieren) die Hotel-Domain und capcorn.net eintragen. Nur dann wird der Linker-Parameter _gl beim Wechsel auf die Buchungsmaschine übergeben und die Session bleibt erhalten. Im GTM-Modus setzt die Buchungsmaschine selbst keine Linker-Einstellungen.
Welche Seite löst welches Event aus?
Vier Seiten senden Events: Ergebnisliste, Buchungsübersicht, Buchungsbestätigung und die Bestätigungsseite des Anfrageformulars.
Die Code-Positionen beziehen sich auf den Abschnitt „Eigene Tracking-Codes“. Die Online-Zahlung (Datatrans) ist nur Teil der Strecke, wenn der Betrieb eine Anzahlung per Online-Zahlung verlangt; sonst folgt die Bestätigung direkt auf die Übersicht.
Event-Referenz
Alle Events folgen dem GA4-E-Commerce-Schema und werden per dataLayer.push() übergeben. Im GTM reicht je Event ein Trigger vom Typ Benutzerdefiniertes Ereignis mit dem Event-Namen.
| Event | Ausgelöst | value | Items |
|---|---|---|---|
add_to_cart | Klick auf „Buchen“ bei einem Zimmer in der Ergebnisliste (nur beim ersten Hinzufügen) | Angezeigter Preis des Zimmers für den gesamten Aufenthalt | 1 Zimmer |
remove_from_cart | Entfernen eines Zimmers aus der Auswahl; nur im Mehrzimmer-Modus, in dem mehrere Zimmer gesammelt werden | wie add_to_cart | 1 Zimmer |
begin_checkout | Laden der Buchungsübersicht mit Gastdateneingabe | Gesamtsumme der Buchung | alle Zimmer + gewählte Zusatzleistungen |
purchase | Laden der Buchungsbestätigung; bei Online-Zahlung erst nach Rückkehr von der Zahlseite | Gesamtsumme der Buchung | alle Zimmer + gewählte Zusatzleistungen |
generate_lead | Laden der Bestätigungsseite nach Absenden des Anfrageformulars | – | – |
Felder in ecommerce
| Feld | Inhalt | Beispiel |
|---|---|---|
currency | immer EUR | EUR |
value | Betrag in Euro als Zahl, Punkt als Dezimaltrennzeichen, brutto | 1245.00 |
transaction_id | CapCorn-Reservierungsnummer (nur purchase) | 4711 |
items[].item_id | Zimmer: MB-[Betriebsnr]_KAT-[Kategorienr]; Pauschale: MB-[Betriebsnr]_PAK-[Pauschalennr]; Zusatzleistung: MB-[Betriebsnr]_ZUIDX-[Leistungsnr]. Die ID bleibt von add_to_cart bis purchase gleich, auch wenn bei der Buchung ein anderes Zimmer derselben Kategorie zugeteilt wird. | MB-1234_KAT-12 |
items[].item_name | Name, wie er dem Gast in der Buchungsmaschine angezeigt wird (Zimmer, Pauschale bzw. Zusatzleistung), in der Sprache der Buchung | Doppelzimmer "Superior" |
items[].item_category | room (Zimmer und Pauschalen) oder add-on (Zusatzleistungen, Rabatte) | room |
items[].price | Zimmer bzw. Pauschale: Preis für den gesamten Aufenthalt ohne Zu-/Abschläge. Zusatzleistung: Gesamtbetrag; Abschläge/Rabatte sind negativ | -50.00 |
items[].quantity | immer 1 (Preis ist bereits der Gesamtbetrag) | 1 |
Zusätzliche Felder auf Event-Ebene
Diese Felder stehen neben event, nicht im ecommerce-Block. Im GTM werden sie über Datenschicht-Variablen ausgelesen und als Ereignisparameter an GA4 übergeben.
| Feld | Event | Inhalt | Beispiel |
|---|---|---|---|
booking_type | purchase, generate_lead | booking bei Online-Buchung, request bei Anfrage über das Anfrageformular | booking |
arrival_date | purchase | Anreisedatum im Format JJJJ-MM-TT | 2027-01-12 |
nights | purchase | Anzahl der Nächte als Zahl | 5 |
Vor jedem E-Commerce-Event sendet die Buchungsmaschine { ecommerce: null }. So vermischen sich Items aufeinanderfolgender Events nicht (Empfehlung von Google).
Beispiel purchase
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: 'purchase',
booking_type: 'booking',
arrival_date: '2027-01-12',
nights: 5,
ecommerce: {
transaction_id: '4711',
value: 1245.00,
currency: 'EUR',
items: [
{ item_id: 'MB-1234_KAT-12', item_name: 'Doppelzimmer "Superior"', item_category: 'room', price: 1180.00, quantity: 1 },
{ item_id: 'MB-1234_ZUIDX-3', item_name: 'Stellplatz in Tiefgarage', item_category: 'add-on', price: 115.00, quantity: 1 },
{ item_id: 'MB-1234_ZUIDX-34', item_name: 'Frühbucherbonus', item_category: 'add-on', price: -50.00, quantity: 1 }
]
}
});
generate_lead hat keinen ecommerce-Block, sondern nur lead_type: 'room_request' und booking_type: 'request'.
Besonderheiten, die Auswertungen beeinflussen
- Online-Zahlung: Während der Weiterleitung zur Zahlseite (Datatrans) wird kein
purchasegesendet. Das Event kommt erst, wenn der Gast nach erfolgreicher Zahlung auf die Bestätigung zurückkehrt. Bricht er die Zahlung ab, gibt es keinpurchase. - Verweis-Ausschluss: Die Rückkehr von der Zahlseite erzeugt einen Verweis von
datatrans.com. Tragen Siedatatrans.comundcapcorn.netin GA4 unter Unerwünschte Verweise ein, sonst wird die Buchung dem Zahlungsanbieter als Quelle zugeordnet. - Duplikate:
purchasewird pro Reservierung nur einmal gesendet, auch wenn der Gast die Bestätigungsseite neu lädt oder zurück navigiert. Die Buchungsmaschine merkt sich dazu die Reservierungsnummer imsessionStoragedes Browser-Tabs. Öffnet der Gast die Seite in einem neuen Tab oder ist der Speicher blockiert, kann ein weiterespurchaseentstehen. Verwenden Sie daher zusätzlich die Reservierungsnummer als Transaktions- bzw. Deduplizierungs-ID (GA4 macht das automatisch übertransaction_id). - Anfragen: Anfragen sind nur über das Anfrageformular möglich und lösen
generate_leadaus. Ein Neuladen der Bestätigungsseite sendetgenerate_leaderneut. - Preise: Alle Beträge sind Bruttopreise in Euro.
- Rabatte: Abschläge und Rabatte erscheinen als eigene Items mit negativem Preis (
item_category: 'add-on').valueist bereits der Endbetrag. - Zeitpunkt:
begin_checkout,purchaseundgenerate_leadwerden gesendet, sobald die Seite fertig geladen ist.add_to_cartundremove_from_cartwerden beim Klick gesendet.
Cookie-Einwilligung und DSGVO
Im GTM-Modus zeigt die Buchungsmaschine keinen eigenen Cookie-Banner und setzt keine Consent-Voreinstellung. Der GTM-Container wird sofort geladen, die Events werden immer in den dataLayer geschrieben. Ob und wann Tags feuern, steuert allein die Konfiguration im Container.
Die Einhaltung der DSGVO liegt beim Hotel bzw. der betreuenden Agentur. Konkret heißt das:
- Ein Consent-Tool (CMP) im GTM-Container ausspielen, z. B. über die GTM-Vorlagen von Cookiebot, Usercentrics oder consentmanager, mit Trigger Consent Initialization – All Pages.
- Google Consent Mode v2 verwenden: Voreinstellung
deniedfürad_storage,ad_user_data,ad_personalization,analytics_storage; Update erst nach Einwilligung. - Alle nicht-Google-Tags (Meta Pixel usw.) nur mit Einwilligung feuern lassen (zusätzliche Einwilligungsprüfung im Tag oder eigener Trigger).
- Die Datenschutzerklärung des Hotels um die eingesetzten Dienste ergänzen.
Warum der Banner der Hotel-Website nicht reicht: Die Buchungsmaschine läuft auf capcorn.net. Eine auf der Hotel-Website erteilte Einwilligung ist dort nicht bekannt. Der Gast muss auf der Buchungsmaschine erneut gefragt werden, außer das CMP unterstützt domainübergreifende Einwilligung oder die Buchungsmaschine läuft per Reverse-Proxy unter der Hotel-Domain (ab Winter 26/27 verfügbar).
Einrichtungs-Checkliste für Agenturen
Mit diesen Schritten ist das E-Commerce-Tracking in GA4 vollständig eingerichtet.
- GTM-Container-ID an das Hotel geben; Hotel trägt sie im Wartungsportal ein und führt den Datenabgleich durch
- Consent-Tool im Container einrichten (Consent Initialization, Consent Mode v2)
- Google-Tag (GA4-Konfiguration) mit Trigger Initialization – All Pages anlegen
- Fünf Trigger vom Typ Benutzerdefiniertes Ereignis anlegen:
add_to_cart,remove_from_cart,begin_checkout,purchase,generate_lead - GA4-Event-Tags je Trigger anlegen, Ereignisname =
{{Event}}, Option E-Commerce-Daten senden mit Datenquelle Data Layer - Datenschicht-Variablen für
booking_type,arrival_dateundnightsanlegen und als Ereignisparameter mitsenden; in GA4 bei Bedarf als benutzerdefinierte Dimension bzw. Messwert registrieren - Cross-Domain: Hotel-Domain und
capcorn.netin GA4 unter Domains konfigurieren eintragen datatrans.comundcapcorn.netunter Unerwünschte Verweise eintragen- Optional: Google Ads Conversion bzw. Meta Pixel auf
purchaseundgenerate_lead, mit Reservierungsnummer als Transaktions-ID purchaseundgenerate_leadin GA4 als Schlüsselereignis markieren- Test mit GTM-Vorschau (Tag Assistant) auf der Buchungsmaschinen-URL: Suche → Zimmer wählen → Übersicht → Testbuchung; prüfen, dass alle Events mit
ecommerce-Daten ankommen und Tags erst nach Einwilligung feuern - Testbuchung danach beim Hotel stornieren lassen
Eigene Tracking-Codes und Snippets
Zusätzlich zum GTM können eigene JavaScript- oder HTML-Codes an 7 Seiten und je 3 Stellen eingebaut werden. Meist ist das nicht nötig: Tags im GTM-Container sind einfacher zu pflegen und unterliegen der Einwilligungssteuerung.
| Position | Seite | Hinweis |
|---|---|---|
| 1 | Suche und Kalender | |
| 2 | Ergebnisliste | wird auch auf der Fehlerseite ausgegeben |
| 3 | Zusatzleistungen | |
| 4 | Buchungsübersicht mit Gastdaten | |
| 5 | Buchungsbestätigung | Conversion-Seite für Online-Buchungen |
| 6 | Anfrageformular | |
| 7 | Anfrage gesendet | Conversion-Seite für Anfragen |
Je Position stehen drei Stellen zur Verfügung: a im <head>, b direkt nach dem öffnenden <body>-Tag, c direkt vor dem schließenden </body>-Tag.
Eigene Codes werden nicht automatisch von der Cookie-Einwilligung gesteuert. Der Code muss die Einwilligung selbst prüfen.
Aus Sicherheitsgründen bauen wir eigene Codes ein. Bitte senden Sie den Code mit Angabe von Position und Stelle (z. B. „5c“) an office@capcorn.at.