The formula never changes: CTR = (clicks / impressions) x 100. What changes is which clicks and which impressions a tool decides to count, and that is the entire source of the "why does my CTR not match" question.
The exact formula
Click-through rate is: divide clicks by impressions, then multiply by 100 to get a percentage. If an ad was shown 1,000 times and clicked 25 times, CTR is 25 / 1,000 x 100, which is 2.5%. That part is universal, nobody disputes the arithmetic. The disagreement starts one step earlier, at what counts as a click and what counts as an impression in the first place.
Why the same traffic produces a different CTR in every tool
An impression can mean an ad request sent to the server, an ad actually rendered in the browser, or an ad that was rendered and sat in the visible part of the screen for a minimum amount of time, which is what the industry calls a viewable impression. Those three counts are never identical. The gap between them is usually where a CTR discrepancy lives, not in the click count.
Clicks have their own version of this problem. Some platforms count every click event, including a second click from someone who already clicked once. Others deduplicate to a single click per person per time window, the same distinction covered in unique clicks vs total clicks. Meta goes further and ships two separate CTR numbers on the same ad: "CTR (all)", which counts every click including likes, comments, and shares, and "CTR (link click-through rate)", which counts only clicks that actually went to a destination URL. Pull the wrong one into a report and it will look like performance changed when nothing did.
| Platform or channel | What counts as the denominator | What counts as a click |
|---|---|---|
| Google Ads | Ad impressions served, including some that were never scrolled into view | Every registered click, adjusted after the fact by invalid click filtering |
| Meta Ads | Impressions served | CTR (all) includes likes, comments and shares; CTR (link) counts only outbound link clicks |
| Google Search Console | Times a page appeared anywhere in results, including buried positions never scrolled to | Clicks into the site from that search result |
| Email service providers | Emails delivered, for CTR. Emails opened, for click-to-open rate, a different metric entirely | Link clicks inside the email, usually deduplicated per recipient |
| Instagram bio link (native Insights) | Profile visits | External link taps, shown as its own metric on professional accounts |
CTR meaning by channel
The word means the same thing everywhere, an interest rate. What differs is what generated the impression and what counts as satisfying that interest. A search ad's impression happens because someone typed a query, so its click-through rate is really measuring how well the ad matched intent that already existed. A display ad faces harder odds. It interrupts someone doing something else entirely, and its CTR reflects whether that interruption worked. Comparing a search CTR to a display CTR and concluding one campaign beat the other is comparing two different jobs and calling it one.
How to calculate CTR from your own numbers
Pull two numbers from whatever platform you are looking at: total impressions over the period, and total clicks over the same period, ideally using the same click definition the platform itself reports so all-clicks and link-clicks are not mixed together. Divide clicks by impressions, multiply by 100. Do this per link or per ad rather than as one blended average across a whole account, because a blended CTR hides which specific piece of creative or copy is actually working. If you are tracking a link independently of the platform that served it, for example a bio link handed out across several posts, you need a click tracking layer that logs the click itself, since the originating platform will not hand you a combined number across posts on its own.
What counts as a good CTR
There is no single good CTR. Any number quoted without naming the channel is not useful. A search ad triggered by someone who typed your exact product name will almost always outperform a cold display ad shown to someone scrolling a news site, because the two are capturing completely different levels of existing intent. The only comparison worth trusting is a link or ad against its own past performance on the same channel, same audience, same click definition. If this month's CTR has dropped compared to last month's version of the same ad, that is a real signal worth chasing down. A number that just looks low next to something someone quoted from a different channel usually is not.
CTR on a link in bio
This is where CTR gets genuinely hard to calculate, because "impressions" for a bio link is not a number most platforms hand over cleanly. Instagram's own Insights for professional accounts does show profile visits and, separately, external link taps, which gives you a rough way to estimate CTR for a single link in a bio without pulling in a third-party tool. What it will not tell you is which post, story, or caption sent someone to your profile in the first place, only that they arrived and then tapped, or did not. Raydar logs the other half: every click on every link with the referrer, UTM parameters, and first and last touch data attached, so once someone does tap through you can see exactly what campaign, post, or channel actually produced that click rather than a single blended profile-level number.
Where CTR runs out as a metric
CTR measures interest in the click itself, nothing past it. A high CTR feeding a page that does not convert is not a win. It points at a problem with the destination page, not the link or the ad. Pair it with what happens after the click, covered in cost per click and how to calculate ROAS, before deciding a high CTR alone means a campaign is working.