The problem: you are paying for marketing you cannot see
Here is a conversation that happens in dental practices every month.
The practice owner asks the marketing company how things are going. The marketing company sends a report. The report has traffic on it, and impressions, and a line about rankings improving. The owner looks at it, cannot connect any of it to the patients who actually walked through the door, and files it. Next month the same thing happens.
Nobody is lying in that exchange. The problem is that the report is measuring the wrong thing, and the reason it is measuring the wrong thing is that the right thing was never set up.
The right thing is simple to state. When someone finds your practice online and tries to reach you, that moment should be recorded. Not the visit. Not the pageview. The moment they tap your phone number, or submit your booking form, or click your email address. That is the only event in the entire funnel that has a direct relationship with revenue, and in most practices it is completely invisible.
That first number is the one worth sitting with. More than half of local business websites have no conversion tracking at all. Not badly configured tracking. None. Which means those businesses have been making marketing decisions for years based on a traffic number that tells them nothing about whether the phone rang.
For a dental practice this is worse than average, because the dominant way patients reach a dental practice is the telephone. Invoca surveyed healthcare consumers in May 2026 and found that 44 percent prefer to call when they need help, the highest of any channel they tested, and 85 percent will switch to a faster competitor if reaching you is slow.
So the single most important patient action is a phone tap, and Google Analytics does not record phone taps unless you build that yourself. This guide is how you build it.
What you are building
Four pieces, in order. Each one depends on the one before it.
Most practices have the first link and the last link and nothing in between. Something happens, and eventually somebody makes a report, and the report is built out of whatever Google happened to record for free. The middle two links are the work, and the middle two links are where all the value is.
Here is what each piece actually does, in plain terms.
Google Analytics 4
The database. It stores every recorded action on your website and lets you ask questions about them later. It is free, it is the industry default, and it will happily run for years collecting data you never configured properly.
Google Tag Manager
The control panel. Instead of asking your web developer to add code every time you want to measure something new, you install Tag Manager once and then configure everything through a web interface. This is the piece most practices skip, and skipping it is why their tracking never improves after month one.
Google Search Console
The other half of the picture. Analytics tells you what people did once they arrived. Search Console tells you what they searched for before they arrived, what position you appeared in, and how often anyone clicked. These are two completely different datasets and you need both.
Bing Webmaster Tools
Smaller, but it takes fifteen minutes and it feeds Microsoft Copilot and several AI answer tools. There is no argument for not doing it.
Looker Studio
The report. Free, made by Google, connects to all of the above, and produces a single page that a practice owner will actually read. This is covered as a bonus section at the end.
Step one: Google Analytics 4
If a previous agency already set up a GA4 property for your site, use theirs. Do not create a second one. Two properties measuring the same website is the fastest route to two sets of numbers that disagree, and there is no way to merge them later. Ask for access instead.
If there is nothing there, here is the sequence.
- Go to analytics.google.com and sign in with the account you want to own this long term. Not a staff member who might leave. Ideally a practice email address that more than one person can access.
- Choose Admin, then Create, then Property. Name it something obvious like the practice name. Set the reporting timezone and currency correctly, because these cannot be changed later without consequences.
- Work through the business details screens. Industry category, business size, intended use. None of these affect measurement. Answer them and move on.
- Under Data collection and modification, choose Data Streams, then Add stream, then Web. Enter the site URL and a stream name.
- Leave Enhanced measurement turned on. It gives you scroll depth, outbound clicks, file downloads and site search for free.
- Open the stream you just made. Under Stream details there is a Measurement ID beginning with G dash. Copy it. This is the only value you carry forward.
Google says data collection begins within about thirty minutes of the tag going live. If you look at Realtime and see nothing after an hour, the tag is not on the page, which we will come back to.
What Enhanced measurement does and does not cover
This matters more than anything else in this guide, so it gets its own table.
| Patient action | Tracked automatically? | What you have to do |
|---|---|---|
| Page views | Yes | Nothing |
| Scrolling to 90% of a page | Yes | Nothing |
| Clicking a link to another website | Yes | Nothing |
| File downloads (new patient forms) | Yes | Nothing |
| Tapping the phone number | No | Build a Just Links trigger in Tag Manager |
| Clicking the email address | No | Build a Just Links trigger in Tag Manager |
| Submitting the booking form | Not reliably | Push a custom event on form success |
| A call that actually connects | No | Call tracking software, not analytics |
Read the bolded rows again. Every free automatic measurement Google gives you is about browsing behaviour. Every action that represents a patient trying to reach you has to be built by hand.
There is a technical reason for the phone number gap that is worth understanding, because it explains why so many practices assume they are covered when they are not. Google defines an outbound click as a click on a link that leads away from your domain to another website. A tel: link does not lead to another website. It hands off to the phone application. So it does not qualify, and enhanced measurement ignores it entirely.
Step two: Google Tag Manager
Tag Manager is a container you install once. After that, every new thing you want to measure is configured in a web interface instead of in your website code. If you only take one structural decision from this guide, take this one.
The alternative, which is what most practices end up with, is a website with four or five tracking snippets pasted in by different people over several years, none of whom documented what they did. Nobody knows what is firing. Nobody wants to remove anything in case it breaks something. That is the state Tag Manager exists to prevent.
On Webflow specifically
Site settings, then Custom code. The first block goes in Head code, the second in Body code. Note that custom code fields require a paid site plan or a paid Workspace plan. If those fields are greyed out, that is why.
On WordPress specifically
Either a header and footer scripts plugin, or your theme settings if it has a custom code area. Avoid pasting directly into theme files, because a theme update will wipe it out.
Step three: connect Analytics through Tag Manager
You now have two things installed. The next step is to have Tag Manager fire Analytics, rather than having Analytics installed separately.
Then go and remove the other one
This is the part people skip, and it is the single most common cause of wrong numbers in small business analytics.
- GA4 snippet hardcoded in the head
- and Tag Manager also firing GA4
- Sessions inflated
- Bounce rate halved
- Every conversion counted twice
- Tag Manager snippet only
- GA4 fired as a tag inside Tag Manager
- One pageview per pageview
- Reports you can act on
- Room to add new tracking later
Webflow makes this particularly easy to get wrong, because there are two entirely separate places to put the same Measurement ID. There is a dedicated Google Analytics field under Integrations, and there is the Head code custom code box. If the ID is in both, or if it is in the Integrations field while Tag Manager is also firing GA4, you are double tagged.
Webflow warns about this directly in their own documentation: add the tag in one place only.
How to check whether you are double tagged
- Open your website. Right click and choose View page source.
- Press Ctrl+F or Cmd+F and search for your Measurement ID, the value beginning with G dash.
- If it appears in the page source at all while Tag Manager is also firing it, you have a duplicate. Remove the hardcoded one.
- One exception: if your site uses the Google Site Kit plugin for WordPress, the ID will not appear as a G dash value. Site Kit deploys a unified tag with a GT prefix instead. Check in Analytics Realtime rather than in the page source.
Step four: Search Console and Bing Webmaster Tools
Analytics tells you what happened after someone arrived. Search Console tells you what happened before. Which queries you appeared for, what position you held, how many people saw you, and how many clicked. It is the only free source of that data and there is no substitute for it.
Choose the property type before you do anything else
Search Console offers two kinds of property and the choice has consequences you cannot undo easily.
- Covers exactly one prefix
- https:// and http:// are separate
- www and non‑www are separate
- Half your data silently goes missing
- Verified by file upload or meta tag
- Covers every subdomain and protocol
- Survives a www redirect change
- Survives an https migration
- One property, complete data
- Verified by a DNS record only
Use a Domain property. The reason is simple. A URL prefix property reports on exactly one address form. If your site is reachable at both the www and the non-www version, or if it ever moves from http to https, a URL prefix property will silently report on only part of your traffic and give you no warning that it is doing so.
The catch is that a Domain property can only be verified by adding a DNS record at your domain registrar. There is no file upload option and no meta tag option. So before you start, work out who controls the domain. If it is your web developer, ask them for the record to be added, and give them the exact value Google shows you.
Submit the sitemap
Once verified, find your sitemap. On most sites it is at yoursite.com/sitemap.xml. Webflow generates one automatically. Submit it under the Sitemaps report.
Also add a line to your robots.txt file pointing at it. Belt and braces, and it costs nothing.
Sitemap: https://www.yourpractice.com/sitemap.xml
Be realistic about what this achieves. Google is explicit that submitting a sitemap is a hint, not an instruction, and does not guarantee that anything gets crawled or indexed. It helps. It is not magic.
Bing takes fifteen minutes because you import it
Bing is roughly a tenth of Google by volume in most markets, so on its own it is a small prize. The reason to do it is that Bing powers Microsoft Copilot and feeds several AI answer tools, and that surface is growing. BrightLocal found in their 2026 consumer survey that the share of consumers using AI tools to find local businesses rose from 6 percent to 45 percent in a single year, while Google usage fell from 83 percent to 71 percent.
That is one survey and one year, and it should be read as a direction rather than a forecast. But fifteen minutes to be present on that surface is a reasonable trade regardless.
Step five: the event logic, which is the actual work
Everything up to this point was installation. This section is the part that separates a practice that knows its cost per patient from a practice that does not.
The question to answer first is not technical. It is this: what does a patient do on your website that is worth money to you?
For a dental practice the honest answer is short.
Understanding the logic before the clicks
A GA4 event has a name and, optionally, some parameters. That is it. The skill is not in the configuration, it is in deciding what to name and what to ignore.
The mistake practices make is measuring too much. They end up with forty events, thirty-five of which are noise, and the five that matter are buried. Three well built events beat forty badly built ones every time, because you will actually look at three.
Why a phone tap is the most valuable event you will build
BrightLocal analysed 45,264 business profiles across 36 industries and published per-industry benchmarks. For dentists specifically, the average listing generated 39 calls and 46 website clicks per month. Those two numbers are almost the same size.
That study is from 2019 and should be read with that in mind. But the structural point holds and has held since: for a dental practice, calls and website visits are comparable in volume, and only one of them is being measured in a default analytics install.
Building the phone tap trigger
Step by step, so there is no ambiguity.
- In Tag Manager, go to Variables, then Configure under Built-In Variables. Tick Click URL. If you skip this the condition below will never match, and this is the most common reason a phone trigger does not work.
- Go to Triggers, then New. Choose trigger type Click, then Just Links.
- Select Some Link Clicks. Set the condition to Click URL contains tel:
- Name it something obvious like Click - Phone number. Save.
- Go to Tags, then New. Tag type Google Analytics: GA4 Event. Select your GA4 configuration. Event name: call_click
- Attach the trigger you just built. Save.
- Press Preview. On the debug panel, open your site on a phone, tap the number, and confirm the tag fires.
- Only once you have seen it fire, press Submit and Publish.
The email click trigger
Identical process. Just Links trigger, condition Click URL contains mailto:, event name email_click. Two minutes.
Lower volume than calls, but the intent behind an email to a dental practice is usually high. Somebody writing out a question about implants has already decided they want implants.
The form submission, which is where it gets interesting
Tag Manager has a built-in Form Submission trigger. On a plain HTML form it works perfectly. On a modern website it usually does not, and the reason is worth understanding.
- Built‑in Form Submission trigger
- Relies on the browser's native submit event
- Webflow, and most modern builders, intercept that event
- The form succeeds, the trigger never fires
- Or: track the /thank‑you page instead
- A dataLayer.push on the form success state
- A Custom Event trigger listening for that name
- Fires whether or not the page navigates
- Works with AJAX forms, chat widgets, pop‑ups
- No thank‑you page needed
Here is what happens. Webflow, and most modern site builders, do not actually submit the form in the traditional sense. They intercept the submit, send the data in the background, and swap the form for a success message without ever reloading the page. From the browser's point of view, no submission happened. So the built-in trigger never fires.
The fix is to announce the success yourself.
dataLayer.push({ 'event': 'form_submit_success' });
That one line, fired when the form shows its success state, gives Tag Manager something unambiguous to listen for. Then you build a Custom Event trigger with the event name form_submit_success, attach a GA4 Event tag to it, and you are done.
Your web developer will understand that line immediately. If you are on Webflow, it goes in the page or site custom code with a small listener on the form's success state. It is a five minute job for someone who has done it before.
The thank-you page shortcut, and why to avoid it
There is an easier route that people reach for. Redirect the form to a /thank-you page, and count views of that page as conversions. It works, in the narrow sense that it produces a number.
- Misses every AJAX form success
- Misses every phone tap
- Misses every chat submission
- Double counts a refresh or a bookmark
- The page is indexable and can be landed on from search
- Fires on the actual success state
- Covers calls, emails and forms alike
- Fires once, per real submission
- Nothing to accidentally index
- Works the same on every form on the site
The problem is everything it misses and everything it double counts. If you keep a thank-you page because it is good for the patient experience, keep it. Just add a noindex tag so it does not show up in search results, and do not make it your only measurement.
Step six: mark them as key events
Events are recorded. Key events are the ones Google treats as your business outcomes, and they are what appear in the reports you will actually read.
| Event name | Count | Mark as key event |
|---|---|---|
| call_click | 61 | On |
| form_submit_success | 24 | On |
| email_click | 9 | On |
| page_view | 4,180 | Off |
| scroll | 2,905 | Off |
The path is Admin, then Data display, then Events. Find your event in the list and turn on the Mark as key event toggle. Note that the event has to have fired at least once before it appears in this list, which is a small chicken and egg problem the first time. Fire it yourself from your phone, wait a few minutes, then come back.
Key events are not conversions any more
Google changed this terminology and it causes real confusion, so it is worth being precise.
- A key event is an important business action you analyse inside Analytics.
- A conversion is now specifically an action you send to Google Ads to optimise bidding.
- Marking the toggle in Analytics does not send anything to Google Ads.
If you run Google Ads, importing these as conversions is a separate step. It lives in Analytics under Advertising, then Tools, then Conversion management. It requires the Analytics and Ads accounts to be linked and auto-tagging to be enabled in Ads first.
Step seven: the five settings that quietly ruin the data
Everything above is now installed and firing. This section is about the things that will silently corrupt your numbers over the following months if you do not fix them now.
Excluding internal traffic, in detail
This one is underrated. A practice with five staff, a front desk that pulls up the site several times a day, and a practice owner who checks the blog, can easily generate twenty to forty percent of its own recorded traffic. On a site doing two thousand sessions a month, that is not a rounding error.
- Admin, Data streams, select your stream, Configure tag settings, Show more, Define internal traffic, Create.
- Leave the traffic_type value as internal. Add your practice IP address. Your IT provider or a quick search for what is my IP will give it to you.
- Admin, Data filters, Create Filter, Internal Traffic, Exclude.
- Set the filter state to Active. Not Testing.
Google notes that filters take twenty-four to thirty-six hours to take effect, and they are not retroactive. Data that arrived before the filter was active stays in your reports forever.
The booking system problem
This is the defining measurement failure for dental practices, and it is worth a paragraph of its own.
If your online booking, patient portal or payment page lives on a different domain than your website, and most do, then without configuration GA4 treats a patient who books as two separate people having two separate sessions. Worse, when they come back to your site afterwards, your booking vendor appears as a referral source and takes credit for the conversion that organic search actually produced.
There are two fixes, and which one you use depends on whether you can put your tag on the other domain.
If you can tag the other domain: cross-domain measurement
Admin, Data streams, Web, select the stream, Configure tag settings, Configure your domains. Add both domains. The requirement is that every page across both domains uses the same Measurement ID from the same web data stream.
If you cannot: referral exclusion
Admin, Data streams, Web, select the stream, Configure tag settings, Show all, List unwanted referrals. Add the booking domain. GA4 will then stop treating it as a traffic source. Up to fifty domains per stream.
Google's own stated use case for this setting is almost exactly the dental scenario: a site that uses a third-party payment processor where users return after checking out on the other domain.
Step eight: what to actually look at
You now have clean data. The next mistake is drowning in it.
The four numbers
For a dental practice, four numbers answer almost every question worth asking.
| Number | Where it lives | What it tells you |
|---|---|---|
| Organic sessions | GA4, Traffic acquisition | Is search finding you at all |
| Key events | GA4, Key events report | Did anyone try to reach you |
| Average position | Search Console, Performance | Are you moving up or standing still |
| Queries at position 11 to 20 | Search Console, Performance, filtered | Where the next wins are hiding |
The position eleven to twenty trick
This is the highest return ten minutes in Search Console and almost nobody does it.
Open the Performance report. Add a filter on average position, greater than 10 and less than 21. Sort by impressions. What you are looking at is every query where you are on page two, being seen but not clicked.
Those pages already rank. They already have some authority with Google for that topic. Moving one of them from position 14 to position 8 is a far smaller job than creating a new page from nothing, and the traffic difference is enormous.
Backlinko analysed twelve million search queries and found the top three organic results take 54.4 percent of all clicks, while page two results receive 0.63 percent. The cliff between page one and page two is not gradual.
In practice this means the page two queries in your Search Console are the shortest path you have to more patients, and they are sitting there waiting for someone to look at them.
Bonus: building a dashboard your practice owner will actually read
Everything so far produces data. This section produces a report.
The distinction matters. Google Analytics is an excellent database and a poor report. Nobody who runs a dental practice wants to learn the GA4 interface, and they should not have to. What they want is one page, opened once a month, that answers whether the marketing worked.
Looker Studio is Google's free reporting tool and it does exactly this.
That is roughly what a finished one looks like. Four numbers across the top, each with a comparison to the previous period. Channel breakdown below. Everything else further down, for the months when somebody wants to dig.
How to build it
The Search Console detail that trips people up
When you connect Search Console, it asks you to pick a table. There are two: Site Impression and URL Impression. Site Impression gives you query level data. URL Impression gives you page level data. A single data source can only use one of them.
So if you want both in one report, and you do, create two separate Search Console data sources and add both to the same report. This is not obvious and it is not explained well anywhere in the interface.
Design rules that make a dashboard get read
- Four numbers at the top, no more. Sessions, calls, form submissions, average position.
- Every number gets a comparison to the previous period. An absolute number on its own is meaningless.
- One page. If it scrolls past two screens, split it into two reports rather than making one longer.
- Label everything in plain language. Key events becomes Patient enquiries. Sessions becomes Website visits.
- Put the date range control at the top where it is visible, so nobody misreads a fortnight as a month.
Schedule it
Looker Studio will email the report as a PDF on a schedule. Set it for the first of the month. A report that requires somebody to remember to log in is a report that gets looked at twice and then never again.
The complete checklist
Everything in this guide, in one place. Work down it, and when every line is ticked you have a measurement setup better than the majority of dental practices in your market.
And the honest caveat
None of this tells you whether a tracked phone tap became a booked appointment. It tells you somebody tapped. The gap between those two things is real and it is where practices lose the thread.
Closing that gap means either call tracking software, which costs money, or a front desk habit of asking every new patient how they found you and writing it down, which costs discipline. Both work. Neither is free. Anyone who tells you analytics alone closes that loop is selling you something.
What this setup does give you is the truth about everything up to that point, which is more than most practices have ever had, and it is enough to make good decisions with.
Next in this series: how to build a keyword strategy that tells you exactly which pages to create, using SEMrush and the free alternatives that get you most of the way there.