Reading SEO results
Positions, visibility, movers and cannibalization — and what the numbers do not say.
Scope first
Every results page is scoped to the domain in the header switcher, and — when a domain has more than one scan — to a selected scan. A national scan and a local scan measure different things; mixing them would produce an average of two unrelated questions. You can also filter by label.
Positions
Three distinct states, kept distinct everywhere:
- A number — where you appeared.
- Not in the top 50 — measured, and you were not there. Shown as such, never as 0 or 101.
- Not measured yet — no scan has covered it. Different again.
We do not fill the gaps with invented numbers. An average that quietly treats "not found" as 100 turns a bad month into a catastrophe on the chart; treating it as 0 does the opposite. Both would be easier to draw and neither would be true.
Visibility over time
A weighted score: ranking first for something people search for a lot counts more than ranking first for something nobody searches for. It is a relative measure — useful for direction and comparison, not a quantity of traffic. Where Search Console is connected, real click data is used in preference to modelled figures.
Movers
Biggest gains and losses versus the previous period. Read them with the position in mind: 45 → 30 is real progress that changes no traffic, while 4 → 6 barely moves on the chart and can cost a great deal. The tables are ordered by materiality rather than by raw movement for exactly this reason.
The SERP panel
Expanding a keyword shows the actual results page: who ranked, in what order, with your domain and your competitors highlighted. It also shows the features present — local pack, shopping, AI overview, people-also-ask — which explains a great deal of otherwise baffling traffic. Position 3 below a full local pack and a shopping row is a very different position 3 from one at the top of a plain page.
The local (map) pack
For a local business the map pack is frequently the result. Organic position 4 beneath a three-entry pack is a completely different position 4 from one at the top of a plain page, and the Local pack card on SEO results shows where you actually sat in it.
Three states, deliberately kept apart:
- A position — you were in the pack, there.
- "Not in the pack" — a pack appeared and you were not in it. That is a competitive loss worth acting on.
- Nothing recorded — the page had no pack at all. There was no contest. Reading this as the previous case would send you chasing competition that does not exist, so we never merge the two.
How you were matched matters. Most map entries carry no website link, so a business that ranks
first can be invisible to a website-based match. Where the entry links to your site we match on that
(website); otherwise we match on your confirmed business name (name, shown with the name
we matched). A name match is a judgement, so it is labelled — check it looks right before acting on the position.
Competitors are matched on their website only: we hold no confirmed identity for them, and guessing one from a
business name is not something we will assert.
This costs nothing extra. The pack arrives in the same search result we already fetch for your organic rankings — it simply used to be discarded.
Over the API: GET /v1/results/local-pack.
Cannibalization
When several of your own pages compete for one keyword, they split the signal and typically all rank worse than one strong page would. PicoRank detects this from rank history — noticing when the URL ranking for a keyword keeps changing between your own pages — and flags it with the pages involved.
URL drift
When the page that ranks for a keyword changes, that is usually worth knowing: a redirect, a template change, or Google deciding a different page answers the query better. Drift is reported with both URLs and the date.
What results cannot tell you
- Position is not traffic. Click-through estimates are modelled from a published industry curve — clearly labelled as estimates, and superseded by Search Console figures wherever those exist.
- One measurement is not a trend. Weekly sampling means a single move may be noise. Look across several weeks.
- Your results are not everyone's. Personalisation and location mean the page we fetch is a consistent, comparable sample — not the literal page every user sees.