How to Track Outbound Links in GA4 (And the Easier Way)
GA4 can track outbound link clicks automatically through Enhanced Measurement. No code required. But the default setup has gaps: no link text, no dedicated report, and inflated counts from mailto: and tel: links. This guide covers the quick method, the GTM method for full control, and a one-line alternative that skips both.
- GA4's Enhanced Measurement tracks outbound clicks automatically but does not capture the link text. You see where visitors went, not what they clicked on.
- There is no dedicated outbound links report in GA4. You must build a custom Exploration or register link_url as a custom dimension first. Data only appears from the moment you register it.
- Enhanced Measurement counts mailto: and tel: links as outbound clicks. Sites with contact pages see inflated counts that drown out real external link data.
- The GTM method gives you link text and filtering control but requires 5 setup steps and adds 100ms+ to page load time.
- Cookieless analytics tools like Clickport track outbound clicks with full link text, zero configuration, and no consent requirements.
In this article
What GA4 tracks by default
Enhanced Measurement fires a click event with outbound: true whenever a visitor clicks an <a> element pointing to a different domain. It runs automatically on all GA4 properties with Enhanced Measurement enabled (the default since GA4 launched).
The event captures five parameters: link_url (full destination URL), link_domain, link_classes, link_id, and the outbound flag. That sounds comprehensive until you notice what is missing.
GA4 does not capture link_text for outbound clicks. The anchor text, the words the visitor actually read before clicking, is stripped out. This is not a configuration issue. GA4 captures link_text for file download events but deliberately omits it for outbound clicks. The parameter exists in GA4's schema. It is simply never populated by Enhanced Measurement for this event type.
The practical impact: you can see that 47 visitors clicked a link to amazon.com, but you cannot tell whether they clicked "Buy on Amazon," "Check the reviews," or "See pricing." For affiliate sites and content publishers, this makes the data nearly useless.
Where to find outbound click data in GA4
GA4 has no dedicated outbound links report. The data exists, but finding it requires manual work.
Method 1: Exploration report. Go to Explore > Blank exploration. Import dimensions: Event name, Link URL (or Link domain). Import metrics: Event count, Total users. Add a filter: Event name = "click" AND Outbound = "true." This is the recommended approach and the only way to see link-level detail without additional configuration.
Method 2: Custom dimension. Go to Admin > Custom definitions > Create custom dimension. Set the scope to "Event," the event parameter to link_url. Once registered, link URLs appear in standard reports. The catch: data only flows from the moment you create the custom dimension. It is not retroactive. If you have been running GA4 for six months without this dimension registered, those six months of outbound click URLs are invisible in standard reports.
Method 3: Standard Events report. Go to Reports > Engagement > Events, filter for the click event. You see the total count of outbound clicks, but no URL breakdown. To get URLs, you need Method 1 or 2.
Three methods, none of them obvious, all requiring configuration that GA4 does not prompt you to do. Google's own tutorial for measuring outbound clicks is sparse and does not cover Explorations or custom dimensions at all.
The false positives problem
Enhanced Measurement counts any click where the link's domain differs from your site's domain. That definition catches more than outbound links.
mailto: links (mailto:info@example.com) have no domain match. GA4 counts them as outbound clicks. tel: links (tel:+1234567890) get the same treatment. On a contact page with an email address and phone number, every click on those elements shows up in your outbound click data alongside legitimate external links.
javascript:void(0) anchors, used by many JavaScript frameworks and WordPress themes for UI interactions, also trigger the event. Users report these appearing as the top "outbound clicks" in their GA4 Explorations, pushing real data below the fold.
Cross-domain links go the other direction. Any domain you add to GA4's cross-domain measurement settings is excluded from outbound click tracking. If you added your payment gateway or partner portal to cross-domain tracking, clicks to those sites silently disappear from your outbound data. You are filtering out links you configured for sessions, not for click reporting.
The net effect: your outbound click numbers are simultaneously inflated (false positives) and incomplete (cross-domain exclusions). Cleaning this up requires either GTM or BigQuery. Enhanced Measurement provides no filtering options.
The GTM method for full control
If you need link text and want to filter out the noise, Google Tag Manager is GA4's answer. The setup requires five steps.
Step 1: In GTM, go to Variables > Configure Built-In Variables. Enable Click URL, Click Text, Click Classes, and Click ID.
Step 2: Create a new trigger. Type: Click, Just Links. Fire on: Some Link Clicks. Condition: Click URL does not contain your domain AND Click URL does not match mailto:|tel:|javascript:.
Step 3: Create a GA4 Event tag. Event name: outbound_click. Add parameters: link_url = {{Click URL}}, link_text = {{Click Text}}, link_domain = extract via regex or lookup table.
Step 4: Disable the Enhanced Measurement outbound click toggle (Admin > Data Streams > Enhanced Measurement gear icon > toggle off "Outbound clicks"). If you skip this, you get duplicate events: one from Enhanced Measurement and one from your GTM tag.
Step 5: Use GTM Preview mode to test. Verify events appear in GA4 DebugView. Publish the container.
You now have link text, filtered data, and custom parameters. The tradeoff: five manual steps, one more tool to maintain, and a performance cost. An empty GTM container adds roughly 100ms to page load. With 8 tracking tags on a Fast 3G connection, that grows to 3 seconds. On every page load, for every visitor.
What both methods still miss
Even with a perfect GTM setup, GA4 outbound click tracking has structural blind spots.
JavaScript-triggered navigation. If a button calls window.open() or a React component uses navigate() to open an external URL, no <a> element is clicked. GA4 and GTM only listen for native click events on anchor tags. Links opened programmatically are invisible.
Same-domain redirects. Affiliate sites commonly use internal redirect paths like /go/amazon or /out/partner. The link's href points to your own domain, so GA4 never fires an outbound event. The visitor ends up on an external site, but GA4 recorded it as an internal click.
Links inside iframes. Cross-origin iframes cannot be instrumented from the parent page. If you embed a widget, form, or partner content in an iframe, clicks inside it are untrackable by GA4 or GTM.
Consent-denied visitors. An Orbit Media study found GA4 captured only 55.6% of traffic compared to a cookieless tool when a consent banner was present. The rest vanished. GA4 in Basic Consent Mode collects zero data from visitors who deny consent. Their outbound clicks do not exist in any report.
Ad-blocked visitors. Roughly 32% of internet users run ad-blocking tools. uBlock Origin blocks GA4 and GTM by default. For developer audiences, the rate hits 72% (Censuswide/Ghostery, 2024). These visitors click your outbound links. GA4 never knows.
Outbound link tracking without the complexity
Clickport tracks outbound clicks automatically. No configuration, no GTM, no custom dimensions to register.
The tracker attaches a single click listener to the document in the capture phase. When a visitor clicks any <a> element pointing to a different domain, it captures the full URL, the anchor text (link_text), and the page it happened on. The data is sent as a fire-and-forget beacon using fetch with keepalive: true, so the request completes even as the browser navigates away.
Register link_url as custom dimension
Build Exploration report manually
Filter out mailto: / tel: / javascript:
Cross-reference with page_location
Wait 24-48 hours for data
Link text: not available
Done
Link text: captured automatically
The dashboard shows outbound links sorted by unique visitors, with the full URL, anchor text, and click count. Click any row to cross-filter the entire dashboard: see which pages drive the most outbound clicks, which traffic sources produce the most clickers, and which sessions included that specific click.
No cookies, so no consent banner and no EU data loss. The script is served from Clickport's domain (not Google's), so it avoids the third-party blocklists that target google-analytics.com and googletagmanager.com.
Start your free 30-day trial. No credit card. One script tag. Data in 30 seconds.
Frequently asked questions
Does GA4 automatically track outbound links?
Yes, if Enhanced Measurement is enabled (it is by default). GA4 fires a click event with outbound: true when visitors click links to external domains. But the data does not appear in a dedicated report. You need to build an Exploration or register link_url as a custom dimension to see individual URLs.
Why is my outbound click data not showing in GA4?
The most common cause: you have not registered link_url as a custom dimension (Admin > Custom Definitions). Without it, standard reports show total click counts but no URL breakdown. Other causes: Enhanced Measurement's outbound toggle is disabled (check the gear icon in Data Streams settings), cross-domain measurement is excluding the links, or GA4's 24-48 hour processing delay has not completed yet.
Does GA4 track link text for outbound clicks?
No. Enhanced Measurement captures link_text for file download events but not for outbound click events. The parameter exists in GA4's data model but is never populated for this event type. The only workaround is implementing outbound click tracking through GTM, where you can map the Click Text variable to a custom parameter.
How do I track affiliate link clicks in GA4?
If your affiliate links point directly to external domains (e.g., amazon.com), Enhanced Measurement captures them automatically (without link text). If you use same-domain redirect paths like /go/amazon, GA4 sees an internal click, not an outbound one. You would need a GTM trigger specifically matching your redirect path pattern, or switch to an analytics tool that detects same-domain affiliate redirects automatically.
What counts as an outbound click in GA4?
Any click on an <a> element where the link's domain differs from the current page's domain. This includes legitimate external links but also mailto: links, tel: links, and javascript:void(0) anchors. Domains configured in cross-domain measurement are excluded. The definition is domain-based, not intent-based, which is why false positives are common.

Comments
Loading comments...
Leave a comment