If you are asking why is my GA4 data wrong or missing traffic, the answer usually lies in a silent configuration error. Most Google Analytics 4 dashboards are quietly broken, meaning founders and marketers are making critical budget decisions based on partial or flat-out incorrect traffic data.
Unlike the old Universal Analytics, which worked reasonably well out of the box, GA4 is a blank slate. If you do not configure it precisely, it will omit traffic, misattribute conversions, and distort your entire marketing funnel.
After auditing dozens of setups, I have found that almost every broken dashboard suffers from the same handful of setup mistakes. Correcting these errors is the only way to turn your analytics back into a reliable source of truth.
Why GA4 is fundamentally easier to break
Universal Analytics was page-view centric. You pasted a script on your site, and it automatically understood page loads, sessions, and referrals with minimal intervention. GA4 is entirely event-based. Every interaction, from a page view to a button click, is treated as a standalone event.
This architectural shift gives you more flexibility, but it also removes the safety net. If a tag fires slightly out of order, or if a parameter is formatted incorrectly, GA4 simply drops the data without warning.
Furthermore, Google changed many of the default settings in GA4 to prioritize privacy and data control. While this is good for compliance, it means the default out-of-the-box configuration is intentionally limited. If you leave GA4 on its default settings, you are actively choosing to collect incomplete data.
1. Missing page-view tags and broken subdomains
The most basic reason your traffic is missing is that the GA4 configuration tag is not firing on every page. This is especially common on sites that use multiple platforms, such as a Webflow site for the main marketing pages and a separate platform like HubSpot or a custom portal for landing pages and subdomains.
If a visitor lands on a landing page that lacks the GA4 tag, they are invisible. If they then click a link to your main website where the tag is present, GA4 registers them as a brand-new visitor. This error does two things: it hides the initial visit entirely, and it attributes the subsequent pages to direct traffic rather than the actual referral source.
To fix this, you must ensure your Google Tag Manager container or the global gtag.js script is loaded in the header of every single page across all domains and subdomains you control. Do not rely on platform integrations to handle this automatically; verify the tag presence manually.
2. Misconfigured conversion events undercounting outcomes
In GA4, conversions are no longer set up using page destinations or duration goals. Instead, you must track a specific event first, wait for it to appear in your reports, and then manually toggle it as a conversion.
This multi-step process introduces several opportunities for error:
- Delayed activation: Toggling an event as a conversion only applies to data collected after the toggle is flipped. It does not retroactively mark past events as conversions.
- Non-unique events: If you mark a generic event like
clickas a conversion, GA4 will count every single click on the website as a conversion. You must create a custom event, such asgenerate_leadordemo_requested, and mark only that specific event. - Form submission failures: Many automated form integrations fire a generic form submission event even when the form validation fails. If a user enters an invalid email address and gets an error message, GA4 may still record a successful conversion.
If your conversion numbers look suspiciously high or low, you need to audit the exact trigger conditions in Google Tag Manager. I always recommend using custom event triggers that only fire when a form actually submits successfully to your database.
Want a website that turns visitors into customers, not just compliments?
Book a 15-min intro3. Self-referrals and missing referral exclusions
If you look at your acquisition reports and see your own domain listed as a top referral source, your attribution is broken. This is known as a self-referral.
Self-referrals occur when a user moves from one page of your site to another, and GA4 treats the transition as a brand-new session started by a referral from your own site. This completely wipes out the original traffic source. If a user originally came from a organic search, but triggers a self-referral before buying, Google will attribute the sale to your own domain instead of search.
The main causes of self-referrals are:
- Missing cross-domain tracking: If you send users from
mysite.comtocheckout.mysite.comwithout configuring cross-domain tracking, the session breaks. - Unconfigured third-party tools: If you use a third-party booking scheduler or payment gateway (like Stripe or PayPal), the user leaves your site to pay and then returns. Without an exclusion, GA4 attributes the conversion to the payment provider.
To resolve this, navigate to your GA4 Data Streams, select your web stream, click Configure Tag Settings, and then select List of Unwanted Referrals. Add your own domain and the domains of any third-party tools, booking engines, or payment processors you integrate with.
4. Unlinked Google Ads breaking attribution
If you run Google Ads but have not explicitly linked your Ads account to your GA4 property, your campaign data will not match.
Unlinked accounts cause GA4 to categorize your paid traffic as organic search or direct traffic. You lose the ability to see which campaigns, ad groups, or keywords drove specific actions on your site. You also lose the ability to inject GA4 conversions back into Google Ads to train your bidding algorithms.
Linking the accounts is simple, but it requires administrator access on both platforms. Once linked, enable auto-tagging in your Google Ads settings. Auto-tagging appends a unique identifier (the gclid parameter) to your destination URLs, allowing GA4 to automatically map the visitor to the correct campaign.
5. The default two-month data retention trap
This is the most critical default setting mistake in GA4. By default, Google sets the retention of user-level and event-level data to exactly two months.
This does not mean your standard aggregated reports will disappear after 60 days. It does mean that your custom explorations, funnel reports, and segmentations cannot look back further than two months. If you want to compare this quarter's user behavior to the same quarter last year using custom reports, you cannot do it under the default settings.
To fix this, go to your GA4 Admin panel, select Data Settings, click Data Retention, and change the Event Data Retention setting from two months to 14 months. Save the change immediately. This is not retroactive, so the sooner you change it, the more historical data you preserve.
How to audit your setup and trust your numbers
Do not wait for your monthly reporting cycle to discover that your tracking is broken. Run a structured audit using these steps:
- Verify with DebugView: Open GA4, navigate to Admin, and select DebugView. In a separate browser window, open your site using Google Tag Assistant. Click through your conversion funnel and verify that the events fire in real time with the correct parameters.
- Check the Realtime report: Open the site on your phone or a separate device and verify that a new active user appears in the Realtime report. If it does not, your configuration tag is either missing or blocked.
- Audit your referral list: Regularly check the Tech details and Traffic Acquisition reports for unexpected referrals. If you see payment processors or your own domains, add them to your exclusion list.
- Compare to backend database: Your analytics conversions will never match your database perfectly due to ad blockers and browser privacy features. However, they should be within 10-15% of your actual sales or signups. If the discrepancy is larger, your tracking is broken.
If you suspect your analytics setup is providing incomplete or misleading information, a systematic analytics audit can identify the specific gaps. Ensuring your data is clean is the absolute baseline for any optimization work. If you build on top of broken tracking, you are simply optimizing for the wrong numbers.