Renumber 12 existing skills to new ranges: - SEO: 11→13, 12→18, 13→16, 14→17, 15→14, 16→15, 17→29, 18→30, 19→12 - GTM: 20→60, 21→61, 22→62 Update cross-references in gateway architect/builder skills, GTM guardian README, CLAUDE.md (skill tables + directory layout), and AGENTS.md (domain routing ranges). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
158 lines
3.2 KiB
Markdown
158 lines
3.2 KiB
Markdown
# Form Tracking Reference
|
|
|
|
## GA4 Form Events
|
|
|
|
### form_start
|
|
Fires on first interaction with form field.
|
|
|
|
```javascript
|
|
dataLayer.push({
|
|
event: "form_start",
|
|
form_id: "contact-form",
|
|
form_name: "Contact Us",
|
|
form_destination: "/submit-contact"
|
|
});
|
|
```
|
|
|
|
### form_submit
|
|
Fires on successful form submission.
|
|
|
|
```javascript
|
|
dataLayer.push({
|
|
event: "form_submit",
|
|
form_id: "contact-form",
|
|
form_name: "Contact Us",
|
|
form_destination: "/submit-contact",
|
|
form_submit_text: "Send Message"
|
|
});
|
|
```
|
|
|
|
### generate_lead
|
|
Fires when form generates a qualified lead.
|
|
|
|
```javascript
|
|
dataLayer.push({
|
|
event: "generate_lead",
|
|
currency: "USD",
|
|
value: 100, // Estimated lead value
|
|
form_id: "quote-request"
|
|
});
|
|
```
|
|
|
|
## Form Field Events (Custom)
|
|
|
|
### field_focus
|
|
```javascript
|
|
dataLayer.push({
|
|
event: "field_focus",
|
|
form_id: "signup-form",
|
|
field_name: "email",
|
|
field_type: "email"
|
|
});
|
|
```
|
|
|
|
### field_complete
|
|
```javascript
|
|
dataLayer.push({
|
|
event: "field_complete",
|
|
form_id: "signup-form",
|
|
field_name: "email",
|
|
field_type: "email",
|
|
is_valid: true
|
|
});
|
|
```
|
|
|
|
### field_error
|
|
```javascript
|
|
dataLayer.push({
|
|
event: "field_error",
|
|
form_id: "signup-form",
|
|
field_name: "email",
|
|
error_message: "Invalid email format"
|
|
});
|
|
```
|
|
|
|
## Form Abandonment Tracking
|
|
|
|
### Detecting Abandonment
|
|
Track when user leaves form without submitting:
|
|
|
|
```javascript
|
|
// Track form start
|
|
let formStarted = false;
|
|
document.querySelectorAll('form input, form select, form textarea')
|
|
.forEach(field => {
|
|
field.addEventListener('focus', function() {
|
|
if (!formStarted) {
|
|
formStarted = true;
|
|
dataLayer.push({ event: 'form_start', form_id: this.form.id });
|
|
}
|
|
});
|
|
});
|
|
|
|
// Track abandonment on page leave
|
|
window.addEventListener('beforeunload', function() {
|
|
if (formStarted && !formSubmitted) {
|
|
dataLayer.push({
|
|
event: 'form_abandon',
|
|
form_id: 'contact-form',
|
|
last_field: lastFocusedField,
|
|
fields_completed: completedFieldCount
|
|
});
|
|
}
|
|
});
|
|
```
|
|
|
|
## GTM Trigger Configuration
|
|
|
|
### Form Submission Trigger
|
|
| Setting | Value |
|
|
|---------|-------|
|
|
| Trigger Type | Form Submission |
|
|
| Wait for Tags | Check (if AJAX form) |
|
|
| Check Validation | Check |
|
|
| Form ID | equals `contact-form` |
|
|
|
|
### Form Start Trigger (Custom Event)
|
|
| Setting | Value |
|
|
|---------|-------|
|
|
| Trigger Type | Custom Event |
|
|
| Event Name | form_start |
|
|
| Fire On | All Custom Events |
|
|
|
|
## Common Form Types & Tracking
|
|
|
|
### Contact Forms
|
|
Events: `form_start`, `form_submit`, `generate_lead`
|
|
|
|
### Newsletter Signup
|
|
Events: `form_start`, `form_submit`, `sign_up`
|
|
|
|
### Login Forms
|
|
Events: `form_start`, `login`
|
|
|
|
### Search Forms
|
|
Events: `search` (with search_term parameter)
|
|
|
|
### Multi-Step Forms
|
|
Track each step:
|
|
```javascript
|
|
dataLayer.push({
|
|
event: "form_step",
|
|
form_id: "checkout-form",
|
|
step_number: 2,
|
|
step_name: "Shipping Address"
|
|
});
|
|
```
|
|
|
|
## Validation Checklist
|
|
|
|
- [ ] Form has id or name attribute
|
|
- [ ] All required fields have names
|
|
- [ ] Submit button identifiable
|
|
- [ ] form_start fires on first interaction
|
|
- [ ] form_submit fires only on success
|
|
- [ ] generate_lead has value parameter
|
|
- [ ] Error events track validation failures
|
|
- [ ] Abandonment tracking implemented (optional)
|