Analytics
How to track which blog posts generate leads in GA4

To track leads from blog posts in GA4, send a generate_lead event when a form is successfully submitted, mark it as a key event, then report key events by landing page for organic sessions. Add one exploration for readers who convert on a later visit, and you have working GA4 content attribution.
Most of the effort goes into the first step. Blog conversion tracking fails far more often because the lead event is unreliable than because the report is wrong. So we start there.
What you need before you start
- GA4 installed on every page, including the blog and the thank-you or confirmation step.
- A way to add tags: Google Tag Manager, or access to the site code.
- A lead action with a clear success moment: a form that confirms submission, a booking that completes, a thank-you page.
- Search Console linked to GA4, which is optional but useful; the steps are in connecting Search Console, GA4 and Google Ads.
Step 1: fire a generate_lead event on real submissions
generate_lead is one of Google's recommended events, documented in the GA4 recommended events reference. Using the recommended name rather than inventing one keeps your setup readable for anyone who inherits it, and the event accepts optional value and currency parameters if you assign a value to a lead.
The hard part is firing it only when a lead actually arrives. There are several ways to do that, and they are not equally reliable.
| Method | How it works | Reliability | Use when |
|---|---|---|---|
| Enhanced measurement form interactions | GA4 sends form_start and form_submit automatically | Low: can fire on attempts, misses many script-driven forms | A quick first look only |
| Thank-you page view | Each form redirects to a confirmation URL; the event fires on that page view | High, if every form redirects | Simple sites with few forms |
| Form plugin success event | The form tool announces success, for example Contact Form 7's wpcf7mailsent event, and a tag listens for it | High | WordPress forms that submit without reloading |
| Tag Manager Form Submission trigger | Built-in trigger with an option to check validation | Medium: many modern forms bypass it | Plain HTML forms |
| Booking or chat tool callback | The tool's own success callback or integration | Varies by tool | Calendly-style bookings, live chat |
Setting it up in Google Tag Manager
- Create a trigger for the success moment: a Page View trigger on the thank-you URL, or a Custom Event trigger on the event your form pushes to the data layer.
- Create a new tag of type Google Analytics: GA4 Event, enter your measurement ID, and set the event name to generate_lead.
- Add a parameter such as form_name if you have more than one form. Register it under Admin, Data display, Custom definitions if you want it in reports.
- Open Preview mode, submit a real test enquiry and confirm the tag fires once, only after success.
- Check GA4's DebugView (Admin, Data display, DebugView) to see the event arrive, then publish the container.
Step 2: mark generate_lead as a key event
GA4 renamed conversions to key events in 2024. In GA4 the term conversion now mostly refers to what Google Ads counts. To mark your event, go to Admin, Data display, Events, find generate_lead and mark it as a key event. If it has not fired yet, create it under Admin, Data display, Key events with the exact same name.
Key events are not retroactive. Reports count them from the moment you mark the event, so do this on day one rather than after a month of data.
How to track leads from blog posts: the reports to use
The Landing page report
Go to Reports, Engagement, Landing page. Add a filter for Session default channel group equals Organic Search. In the Key events column, pick generate_lead from the dropdown. You now have organic sessions and leads for each landing page, and you can sort by either.
This answers the direct question: which posts started a visit that ended in a lead. A post with plenty of sessions and no leads is not automatically a failure. It may be answering an early question. The ones to look at first are commercial-intent posts with traffic and no leads, which is usually the pattern described in why SEO traffic rises but leads do not.
A free form exploration for blog posts only
Under Explore, start a Free form exploration. Add the dimensions Landing page + query string and Session default channel group, and the metrics Sessions, Key events and Session key event rate. Filter landing pages to those containing /blog/ and the channel to Organic Search. Save it. This becomes your monthly blog report, and it is easier to share than the standard one.
Readers who convert on a later visit
Plenty of people read a post, leave, and come back days later by typing your address. The lead lands on a direct session to the home page, and the landing page report never credits the post. Two explorations help:
- A user segment of people who viewed any page with /blog/ in the URL. Compare their generate_lead count with everyone else. It will not name the post, but it shows how much the blog contributes overall.
- A path exploration that starts from the ending point. Set generate_lead as the end and step backwards to see which pages people viewed before converting.
Before you rely on these, check data retention under Admin, Data collection and modification, Data retention. Explorations only reach back as far as that setting allows, and new properties default to 2 months; switch it to 14.
More posts aimed at searches that convert
upRanker plans topics from your Search Console near-misses and, read-only, the Google Ads keywords that already convert, then writes and publishes them to WordPress on a schedule. GA4 then tells you which ones bring leads. 3-day free trial, no card needed.
Start FreeHow GA4 attribution credits a blog post
GA4 dimensions come in two kinds, and mixing them up causes most attribution confusion. Session-scoped dimensions, such as Session source / medium and Landing page, describe the session in which the key event happened. Event-scoped dimensions, such as Source, assign credit using the property's attribution model, which is data-driven by default.
Since late 2023 GA4 offers data-driven, paid and organic last click, and Google paid channels last click as models; the older rule-based models such as first click and linear were removed. For a closer look at which channels touched a lead before it converted, open the paths report under Advertising, Attribution, which splits touchpoints into early, mid and late. That is the nearest GA4 has to the old assisted conversions report.
UTM rules that keep blog attribution clean
- Tag every link you share outside search: newsletters, social posts, partner sites, PDFs. Use utm_source, utm_medium and utm_campaign, all lowercase.
- Never put UTM tags on internal links. A tagged internal link restarts attribution and overwrites the organic source of the visit.
- Keep a shared sheet of the values you use, so "Newsletter", "newsletter" and "email" do not become three sources.
- Watch for AI assistant referrals. ChatGPT links often arrive with utm_source=chatgpt.com, which makes them easy to separate in GA4.
What GA4 cannot tell you
GA4 counts leads, not good leads. A post that sends ten enquiries from students is worse than one that sends two from buyers, and GA4 cannot see the difference. For that you need lead quality from wherever leads end up, whether that is a CRM, a spreadsheet or your inbox.
Two cheap additions help. Capture the landing page in a hidden form field, so each enquiry carries the post it started on. And add an optional "How did you find us?" field; self-reported answers are messy, but they catch the cases analytics misses. Consent banners and ad blockers also mean GA4 will undercount, so treat its numbers as a trend.
If the posts generating leads share a pattern, such as cost questions or comparison terms, feed that back into planning. Your Google Ads search terms report is the quickest place to find more queries like them, and a monthly review of this data fits the routine in running SEO without an agency. Publishing on WordPress? Check the WordPress SEO checklist so new posts are indexable before you measure them.
Tracking blog leads in GA4: common questions
- How do I see which blog posts generate leads in GA4?
- Mark your lead event, usually generate_lead, as a key event. Then open Reports, Engagement, Landing page, filter Session default channel group to Organic Search, and choose generate_lead in the Key events column. Each row shows a landing page with its organic sessions and the leads from sessions that started there.
- What is the generate_lead event in GA4?
- generate_lead is one of Google's recommended GA4 events, intended for when someone submits a form or request for information. It accepts optional value and currency parameters. You send it yourself, usually through Google Tag Manager, and then mark it as a key event so GA4 reports it as a lead.
- Are key events the same as conversions in GA4?
- Key events are what GA4 used to call conversions; Google renamed them in 2024. In GA4 reports you now mark important events as key events. The word conversion is used mainly for the actions Google Ads counts and bids towards, such as key events you import into an Ads account.
- Does GA4 track form submissions automatically?
- Partly. Enhanced measurement includes form interactions, which sends form_start and form_submit events, but it can fire on attempts and misses many forms that submit with JavaScript. For lead tracking, fire your own generate_lead event on a confirmed success, such as a thank-you page view or the form tool's success event.
- Why does GA4 show leads but none from my blog posts?
- Often the reader converted on a later visit, so the lead sits on a direct or branded session rather than the blog landing page. Build a user segment of people who viewed /blog/ pages and compare their lead count, or use a path exploration ending at generate_lead to see which pages came before.
Set up the event properly once and the rest is a 15-minute monthly habit: open the saved exploration, note which posts produced leads, and write more like them. If you would rather the writing ran on a schedule, see what upRanker automates, and what it leaves to you.


