how to actually read google search console
google search console is the only tool that tells you what google thinks of your site. it is free, it is authoritative in a way no third-party tool can be, and it is the first thing we connect on any seo engagement. it is also badly designed for people who open it twice a year, which is most business owners.
this is what the numbers mean, in the order worth reading them, plus three traps that make a working site look dead.
the four numbers on the front page
impressions — how many times a url from your site appeared in a result page someone looked at. this is your visibility. if impressions are zero, nothing else on the page matters, and the problem is upstream.
clicks — how many of those turned into a visit.
average ctr — clicks divided by impressions. this is the one number that is genuinely under your control through writing alone. a page ranking fourth with a dull title gets fewer clicks than one ranking sixth with a title that answers the question.
average position — where your pages ranked, averaged across every impression. treat this with suspicion. it averages a page ranking third for your brand name with the same page ranking eightieth for something irrelevant, and the result describes neither. always read position per query, never sitewide.
the order matters. zero impressions is a completely different problem from lots of impressions and no clicks, and the fixes have nothing in common. impressions with no clicks is a writing problem — titles and descriptions. no impressions at all is a crawling, indexing or competitiveness problem, and you need the coverage report to tell which.
trap one: the setting that hides your last three days
open the performance report and there is a small toggle most people never touch. search console has two data states:
- final — fully processed data, which lags roughly two to three days behind
- all (sometimes shown as "fresh") — includes recent, still-processing data
the default in several views is final. so you make a change on monday, check on wednesday, and see a flat line for the last two days — because those days are not in the dataset yet, not because nothing happened.
we have watched this convince people a fix did nothing. if you are checking within a few days of a change, make sure you are looking at fresh data, and know that fresh data is provisional and will shift slightly as it settles. anyone querying the search console api hits the same thing: dataState: 'final' is the default there too, and 'all' is the one you want for anything recent.
trap two: property type
when you add a site to search console you choose between:
- domain property — verified by dns, covers every host and protocol: apex, www, http, https, subdomains
- url-prefix property — verified by file or tag, covers exactly one prefix
if you have a url-prefix property for https://example.com/ and google is indexing https://www.example.com/, your reports are empty. not wrong — empty. the site is being indexed and ranked and you are looking at a property that contains none of it.
this compounds with the apex/www question, which we cover in apex vs www: how one redirect quietly splits your rankings. use a domain property unless you have a specific reason not to.
the same trap has an api version that cost us real time on our own site. the api addresses a domain property as sc-domain:example.com. give it https://example.com/ instead and it does not error — it returns an empty result set, which is indistinguishable from a site with no traffic. the whole story is in we broke our own seo.
trap three: submitting a sitemap is not the same as having one
the sitemaps section will tell you what has been submitted to this property. a great many sites have served a perfectly valid /sitemap.xml for years while search console has never been told it exists. ours was one of them.
check this section explicitly. if it says nothing has been submitted, submit it — it takes ten seconds and it is the single cheapest thing in seo. then check the discovered urls count against how many pages you think you have. a sitemap listing 103 urls for a site with 79 pages is telling you something.
the coverage report, which is the one that matters
under pages (or "indexing"), search console splits your urls into indexed and not indexed, with a reason for each. the reasons are the most useful text in the entire product. the ones worth recognising:
submitted and indexed — working as intended.
discovered — currently not indexed — google knows the url exists and has chosen not to fetch it. at small scale this usually means google is not convinced the page is worth the crawl. at large scale it can mean crawl budget. either way, google knows about the page, so the sitemap is doing its job and the problem is further along.
crawled — currently not indexed — google fetched it and decided not to index it. this is a quality judgement. adding more internal links or resubmitting will not change it; the page needs to be more substantial or more distinct.
duplicate without user-selected canonical — the page declared no canonical, so google picked one. it often picks correctly. relying on that is not a plan.
duplicate, google chose different canonical than user — you declared a canonical and google overrode it. this is worth investigating every time. it usually means two pages are more similar than you think they are.
alternate page with proper canonical tag — expected and fine. this is a duplicate you have correctly pointed at its original.
soft 404 — google fetched the url, got a 200 status, and decided from the content that the page is empty or missing. this is a bug in your site, not a judgement about your content. it is also the finding that turned out to be the entire problem on our own site: 24 urls in our sitemap returned http 200 with "not found" rendered on the page.
excluded by 'noindex' tag — sometimes deliberate (thank-you pages, login screens, internal search results), sometimes a staging setting that shipped to production. check the list. a noindex left on a template after launch is a classic and it is invisible from the front end.
the one distinction to take away
not indexed is a crawl problem. indexed with no impressions is a content problem.
the first is usually a bug and bugs get fixed. the second is a competitiveness judgement that no amount of configuration addresses, and being honest with yourself about which one you have saves months. we have seen both on our own properties — one site with nothing crawled at all, another indexed cleanly and ranking for nothing commercial. opposite diagnoses, opposite work.
url inspection: the tool worth learning
paste any url into the bar at the top and search console tells you, for that specific page: whether it is indexed, when it was last crawled, whether the crawl succeeded, and — the useful bit — the user-declared canonical next to the google-selected canonical.
when those two disagree, google has overridden you and you should know why.
totals hide the shape of a problem. inspect five urls individually — your homepage, two commercial pages, two deep pages — and you learn more than the coverage chart tells you in a month. "last crawl: never" across most of a site is the signal that outranks everything else in the report.
the inspection tool also has a request indexing button, limited to about ten a day. that limit is deliberate scarcity, not a bug. google has no api for requesting indexing of ordinary pages — the indexing api exists but is scoped to job postings and broadcast events, whatever blog posts tell you. spend those ten requests on commercial pages that are not indexed, never on pages that already are.
queries: read the ones that are not your brand name
sort the performance report by impressions and look at what you are actually appearing for.
almost every small site's top query is its own business name, and that is not a sign of health — it is the floor. you should own your own name outright; ranking third for it is a finding, not a win. the interesting rows are everything underneath.
read them in two buckets:
queries where you rank 5–20 — these are near misses, and near misses are the cheapest wins available. a page at position eleven is on page two, getting impressions and almost no clicks. improving an existing page that already ranks is far more reliable than writing a new one.
queries you rank for and do not want — if a chunk of your impressions come from people searching for a similarly-named company in another industry, that traffic is not going to convert and it is dragging your average position and ctr into meaninglessness. exclude it mentally before reading any sitewide number.
the pages report answers the complementary question: which of your urls earn anything at all. on most small business sites, a handful of pages earn nearly everything and the rest earn nothing, which is useful information about where to spend your writing time. for local businesses, that ranking usually starts with the pages covered in local seo for ottawa small businesses.
the discipline that makes any of this useful
fix one thing, then wait seven to ten days, then read.
search console lags. indexing lags. if you consolidate hosts, rewrite forty titles, restructure your urls and submit a sitemap in the same week, you will get a change in the numbers and no idea which change caused it. that is not a measurement, it is a coincidence with a graph.
check monthly rather than daily. daily variance in a small site's data is noise, and reacting to noise is how people end up rewriting pages that were working. and when the graph does move, look at the query table before concluding anything — a jump in impressions from a query you do not want is not growth.
if search console is showing you something you cannot interpret, or showing you nothing at all, that is usually a diagnosable state rather than a verdict on your business. see what our seo work covers, or start with technical seo basics every website owner should understand.