Every messy GA4 property I have ever audited had the same root disease: three naming conventions living in one property. Not zero conventions. Three. Each one was somebody's good idea, each was half-applied, and together they turned the event list into a junk drawer where generate_lead, Lead, and form_submit_new all mean the same thing and no report can be trusted without a forensic session first.
So here is the convention I apply on client properties. It is not clever. That is the point.
The rules
- snake_case, always. GA4 event names are case sensitive:
sign_upandSign_Upare two different events that will split your data. Lowercase with underscores removes the entire class of error. - English, always. Even if your team speaks Hungarian or German internally. Mixed-language properties age terribly and confuse every future contractor.
- Verb first, present tense:
view_pricing,select_plan,submit_lead_form,start_trial. The verb answers "what did the user do", which is the question every report starts with. - Reuse Google's recommended events before inventing your own.
purchase,add_to_cart,generate_lead,loginand the rest come with built-in reporting and, in some cases, machine learning benefits. Invent a synonym and you lose that for nothing. - No redundant prefixes. Not
click_button_cta_click. The event's parameters carry the context; the name carries the action. - Parameters are snake_case too, and every custom one is documented: name, type, example value, which events send it. Parameters are where naming chaos hides after you clean up the event names.
- One shared document, one owner. The convention that lives in someone's head is not a convention. It is a preference, and it leaves when they do.
Why these exact choices
Case sensitivity is the quiet killer, so rule one does the most work. The verb-first order is for sorting: when your event list is alphabetical, all the view_ events cluster together, all the submit_ events cluster together, and gaps become visible. You notice you track submit_lead_form but never view_lead_form, and that asymmetry is usually a measurement plan bug.
Reusing recommended events matters more than people think. GA4 treats certain names as meaningful: purchase populates e-commerce reporting, generate_lead feeds lead reporting. A custom synonym is invisible to all of it. Check Google's current list of recommended events before you name anything; it grows over time, and the current version is always in their documentation.
And know the hard limits: event names have a length cap, there are quotas on distinct custom events and on custom dimensions you can register, and both are documented by Google. I am deliberately not quoting the exact numbers here because Google adjusts them; look them up the week you implement. The convention above keeps you comfortably inside every quota I have met in practice, because it produces fewer, better events.
The part everyone skips: enforcement
A convention document that nothing enforces converges on chaos at the speed of your hiring. Three mechanisms actually work:
- Code review. Any pull request that touches
dataLayer.pushgets checked against the spec. This catches drift at the cheapest possible moment, before it ships. - A quarterly event audit. Open the GA4 events report, sort by name, and hunt for near-duplicates and orphans. Thirty minutes, four times a year, keeps the property honest.
- A gatekeeper for new events. Not a committee. One person who approves names before they exist. The bar is low; the consistency is the value.
What to do with the existing mess
Do not rename historical events for cosmetics. GA4 does not retroactively merge them; you would just add a third name to the pile and break every comparison with last year. Instead:
- Write the convention first, as if the property were new.
- Apply it to all new events from today.
- Migrate old events only when you touch them anyway, and run old and new in parallel for a full reporting cycle before deleting the old push.
- Keep a mapping table (old name, new name, switch date) in the spec so future-you can read a year-over-year report without guessing.
Steal it and move on
Naming is a solved problem. The convention above is free, takes an afternoon to adopt, and pays back every week in reports you do not have to decode. The harder question is usually whether the events themselves are the right ones, and whether they actually fire with the right values on the pages your customers use. That is a verification problem, not a naming problem, and I wrote up the exact procedure in how to check if your GA4 tracking actually works. If the audit turns up more wrong than you have capacity to fix, that is the moment to bring in outside help for a week, not a quarter.