Web Analytics with Google Analytics 4Measurement strategy before tools · Lesson 2 of 20

Designing a tracking plan and naming conventions

Article · 11 min · 8 min lecture

Video lecture

Designing a tracking plan and naming conventions

15 chapters · about 8 min · full transcript

Coming soon

Chapter 1 of 15

Tracking plans and naming

  • The tracking plan as a contract
  • Recommended events first
  • Naming that scales
  • What not to track
  • Automatic linting

The narrated lecture is in production

Every chapter is scripted and ready. Browse the chapters and read the full transcript now — the video will appear here when it’s published.

Chapters

From measurement plan to tracking plan

A measurement plan says what matters. A tracking plan (sometimes called an event specification or solution design) says exactly what data will be collected, when, with which details, and who implements it. It is the contract between marketers, analysts and developers.

Without one, you get Signup, sign_up, signup_complete and form-submit-2 all describing the same action — and reports nobody trusts.

The anatomy of a tracking plan row

Each row describes one event:

FieldPurposeExample
Event nameStable machine namegenerate_lead
TriggerPrecisely when it firesServer confirms form submission succeeded
ParametersContext sent with the eventform_id, service, value, currency
Parameter valuesAllowed values or formatservice: seo, paid_social, web_design
Key event?Counts as success?Yes
KPI supportedLink back to the measurement planForm submission rate
Owner / statusAccountabilityDev team — live in production
PlatformsWhere it is sentGA4, ad platforms via tag manager

Keep the plan in a shared spreadsheet or documentation tool with version history. Treat changes like code changes: proposed, reviewed, implemented, tested, then marked live.

GA4 has recommended events with predefined names and parameters for common actions — for example login, sign_up, generate_lead, search, view_item, add_to_cart, begin_checkout and purchase. Using them has real benefits:

  • Some reports and features (notably e-commerce reports) expect those exact names and parameters.
  • Future features are more likely to support them.
  • New team members recognize them instantly.

Only create a custom event when no recommended event fits. Check Google's current recommended-events documentation when planning, as the list evolves.

Naming conventions that scale

Agree conventions once and write them at the top of the plan:

Event names:      snake_case, verb_object, lowercase     e.g. download_brochure
Parameter names:  snake_case, noun                        e.g. file_name, plan_tier
Values:           lowercase, no spaces, controlled lists  e.g. plan_tier = pro
Avoid:            PII (emails, phone numbers, names), free text, dates in names,
                  version numbers in names (signup_v2), page names in event names

A classic anti-pattern is encoding context into the event name: click_pricing_button_homepage, click_pricing_button_blog. Instead, use one event with parameters: select_plan with location: homepage. Fewer names, richer analysis, and you stay well within GA4's limits on distinct event names and registered custom dimensions.

Worked example: a SaaS free trial

A project-management SaaS selling in the UK, UAE and Saudi Arabia plans its trial funnel:

EventTriggerKey parametersKey event
view_pricing (custom)Pricing page loadsbilling_periodNo
select_plan (custom)Plan button clickedplan_tier, billing_period, locationNo
sign_up (recommended)Account created (server confirmed)methodYes
tutorial_complete (recommended)Onboarding finishedsteps_completedNo
purchase (recommended)Payment capturedtransaction_id, value, currency, itemsYes

With this in place, the team can build a funnel from pricing to purchase, segment by plan and billing period, and compare markets — without adding new event names each time.

Deciding what not to track

Every event has a cost: implementation time, QA, documentation and cognitive load in reports. Ask for each proposed event:

  1. Which KPI or decision does it inform?
  2. Would we act differently if this number doubled or halved?
  3. Does enhanced measurement or an existing event already capture it?

If the answers are weak, leave it out. You can always add it later.

GA4 collection limits worth knowing

Design names within GA4's documented limits (check the current "collection and configuration limits" page, as they can change): event names up to 40 characters, parameter names up to 40 characters, parameter values up to 100 characters for standard properties, and up to 25 event parameters per event. Names are case-sensitive, must start with a letter, and some prefixes (such as ga_, google_, firebase_) are reserved.

Hands-on: lint your tracking plan automatically

Export the plan as CSV (event_name,parameters,trigger,key_event,owner) and run a quick check before developers see it:

import csv, re

NAME = re.compile(r"^[a-z][a-z0-9_]{0,39}$")          # snake_case, <= 40 chars
RESERVED = ("ga_", "google_", "firebase_")
PII_HINTS = ("email", "phone", "name", "address", "dob", "passport", "cnic", "iqama")

problems = []
with open("tracking_plan.csv", newline="", encoding="utf-8") as f:
    for row in csv.DictReader(f):
        ev = row["event_name"].strip()
        if not NAME.match(ev) or ev.startswith(RESERVED):
            problems.append(f"bad event name: {ev}")
        params = [p.strip() for p in row["parameters"].split(";") if p.strip()]
        if len(params) > 25:
            problems.append(f"{ev}: more than 25 parameters")
        for p in params:
            if not NAME.match(p):
                problems.append(f"{ev}: bad parameter name {p}")
            if any(h in p.lower() for h in PII_HINTS):
                problems.append(f"{ev}: possible PII parameter {p}")
        if not row["owner"].strip():
            problems.append(f"{ev}: no owner")

print("\n".join(problems) or "plan looks clean")

The PII list includes regional identifiers (Pakistan's CNIC, Saudi Arabia's iqama numbers) because they leak into forms and URLs more often than people expect.

Second worked example: an agency standardizing across clients

A Manchester agency manages twenty GA4 properties with twenty naming styles. It publishes one house convention (verb_object events, noun parameters, controlled values), a template plan with recommended events pre-filled for e-commerce, lead-gen and SaaS, and runs the lint script in every onboarding. Cross-client benchmarks become possible for the first time, and new analysts ramp up in days rather than weeks.

Common mistakes

  • Firing on the button click rather than on success. A generate_lead that fires when "Submit" is clicked counts failed validations. Fire on confirmed success.
  • Inconsistent casing. GA4 event names are case-sensitive; Sign_Up and sign_up are different events.
  • Sending personal data. Email addresses in parameters or URLs breach Google's policies and often privacy law.
  • No owner. Plans without owners rot as the site changes.

Tracking-plan quality checklist

Key takeaways

  • A tracking plan is the contract between marketing, analytics and development.
  • Prefer GA4 recommended events; create custom events only when nothing fits.
  • Use one event with parameters instead of many near-duplicate event names.
  • Fire success events on confirmed success, never on the attempt.

Check your understanding

Quick questions to lock in the lesson. They don’t count towards your certificate.

  1. You need to track clicks on the pricing button in three page locations. What is the best design?
  2. A generate_lead event fires when users click Submit, even if the form shows an error. What is wrong?
  3. Which parameter would break both good practice and Google's policies?

Put it into practice

Draft a tracking plan with at least six rows for a site you know, using recommended events where possible, and mark which events are key events.

Enrol for free to save your progress

Reading is always free. Enrol to keep your place, take the final assessment and earn a verifiable certificate.