Before touching anything: what you need to be clear about
Measuring a page’s traffic doesn’t start with installing a script, but with deciding what you want to count. A blog that lives off ads needs pageview and time-on-page figures; a store with a checkout needs purchase events; a local website with a contact form needs to know how many calls or submissions come in. If you don’t define those questions beforehand, you’ll end up with a dashboard full of data that nobody uses.
In practice, 90% of projects solve this with Google Analytics 4 (GA4) or with a lightweight alternative like Plausible or Matomo. GA4 is free and integrates with Search Console and Google Ads, but its event-based data model and its sampling in standard reports make it harder to read if you’re coming from Universal Analytics. Keep that in mind before promising exact metrics to the client.
Step 1. Create the property and the data stream in GA4
Go to analytics.google.com with the account that will administer the site, create a new property, and add a web data stream with the full URL (include https and the domain without www if that’s how you serve it). Copy the measurement ID, in the format G-XXXXXXX. Don’t confuse that identifier with the old UA-: if you paste a UA into a GA4 tag, you won’t collect anything.
A detail that often goes unnoticed: if your website has active subdomains (blog.yourdomain.com, store.yourdomain.com), decide from the start whether you want to measure them as a single stream or as several. Changing it later means losing historical continuity in the reports.
Step 2. Install the tag without duplicating it
You have three usual routes: the gtag.js snippet pasted into the <head>, Google Tag Manager, or a CMS plugin. The practical rule is a single installation source. I’ve seen sites with the GA4 plugin active and also a GTM container firing the same tag: the result is duplicated sessions and a bounce rate that doesn’t match reality. Before publishing, open the page in an incognito window, check the source code, or use the official Google Tag Assistant extension to confirm that only one tag is active.
If you use GTM, place the base tag on “All Pages” with high priority and fire the custom events afterward. If your website is an SPA built with React or Vue, the basic snippet doesn’t detect route changes: you need to send manual page_view events or use the router integration, something many tutorials omit.
Step 3. Verify that the data is arriving
In GA4, open Reports → Realtime and browse your website from another device. You should see at least one active user and the page_view event. If nothing appears, check in this order: ad blockers in your browser, console errors from a mistyped ID, and consent rules that prevent the tag from loading until cookies are accepted. This last point is common on European websites with a CMP: real traffic exists, but it isn’t recorded until the user consents.
Step 4. Configure the events that really matter
GA4 measures clicks automatically, but the key events (form submission, phone click, purchase) have to be marked. You can do this with enhanced events from the stream settings or with custom events via GTM. Mark each one as a conversion so they appear in the acquisition reports.
A concrete example: a dental clinic that measured “clicks on the appointment button” was getting hundreds of events, but when they cross-referenced with the CRM they discovered that most were people clicking two or three times because the form was slow to load. They added a real appointment confirmation event and the useful figure dropped drastically. Measuring the click isn’t measuring the conversion.
Step 5. Connect Search Console and filter out internal traffic
Link the GA4 property with Search Console from Admin → Product links. That way you can see search queries alongside behavior in the same interface. Then create a filter to exclude traffic from your own IP and from the office, and another to exclude referral domains from payment gateways, which otherwise pollute the acquisition reports with hundreds of sessions that were never real visits.
Limits worth acknowledging
GA4 is not an accounting tool. According to Google’s official documentation, data can have latency of up to 48 hours in some reports, and sampling appears in queries with many dimensions. Attribution between channels is never perfect: a user who arrives via organic search, comes back via email, and buys directly can be split in different ways depending on the model. If you need exact business figures, cross-reference with your CRM or with server data (logs), not just with the interface.
It also doesn’t work well for measuring mobile apps from the same web stream or for tracking interactions inside third-party iframes. And if your main traffic is blocked by privacy extensions, the absolute numbers will be an estimate, not a census.
With this minimal setup you’ll have a solid foundation for answering real questions: which pages attract visits, where they come from, and what users do when they arrive.