Average position, weighted
Search Console does not average your positions. It weights them by impressions. Paste rows from your own Queries export and see both averages side by side, then compare them with a measured 37 property cohort where the two figures differ by 41.87 minus 20.08 positions.
The calculator
Paste a Search Console Queries export, or plain lines of impressions and position. The calculator reports the impression weighted average beside the plain mean of the rows.
- Rows read
- Impressions
- Weighted averagewhat Search Console shows
- Plain meanunweighted row average
- Gapplain mean minus weighted
- Median row position
- Rows at 10 or better
- Impressions at 10 or better
- Rows beyond 20
- Impressions beyond 20
These are your own rows, computed by the documented formula. They are not verified API readings.
The example button loads the two query example from Google's help answer 7042828, one impression per query, and gives 2.5 on both measures. Raise the impressions on the first row and the weighted figure moves while the plain mean stays put.
An export omits anonymized queries, and the interface exports at most 1,000 rows (Google's post on the export), so the result can differ from the property total in the report.
What we measured across our own properties
Readings from one operator's own properties, 2026-08-18 to 2026-09-14. belikenative.com is the largest property. The three views read together show why the exclusion matters.
| Measure | All 37 properties | belikenative.com | Without it |
|---|---|---|---|
| Named query rows | 22,513 | 10,724 | 11,789 |
| Impressions on those rows | 215,987 | 160,481 | 55,506 |
| Impression weighted average position | 20.08 | 14.00 | 37.68 |
| Plain mean of row positions | 41.87 | 29.88 | 52.78 |
| Median row position | 42 | 25 | 57 |
| Rows at position 10 or better | 21.14% | 32.22% | 11.06% |
| Impressions at position 10 or better | 60.35% | 68.98% | 35.39% |
| Rows beyond position 20 | 69.59% | 54.06% | 83.71% |
| Impressions beyond position 20 | 28.43% | 18.64% | 56.71% |
| Named share of impressions | 49.86% | 52.48% | 43.58% |
The pooled view overstates depth
Most named rows sit beyond position 20, at 69.59%. Most impressions come from rows at position 10 or better, at 60.35%. The plain mean of 41.87 says pages rank far further down than the weighted figure of 20.08 shows.
Without the largest property the gap narrows
belikenative.com dominates the pool with 160,481 of the named row impressions. Remove it and the plain mean drops to 52.78 against a weighted 37.68. Every reading moves, which is why both views ship.
The plain mean was higher than the weighted average on 26 of the 37 properties and lower on 10. It does not go one way on every site.
The position Search Console reports also counts impressions from anonymized queries, which Google omits from query tables (Google's post on the export). The weighted figures here use named rows only, so the two cover different impressions. For the size of the anonymized share see our hidden queries page.
How we checked that Search Console weights by impressions
We compared each property's reported average position with its own daily rows.
The result
On 38 of 38 property selections with impressions on at least two days, the impression weighted average of daily positions matched the reported figure to within one billionth. The plain mean of the same rows missed by as much as 40.53 positions.
The exclusions
Days with no impressions come back with a placeholder position of 0. They are left out because they have no position. One selection, viryd.com, had impressions on several days but no named query row and was checked separately.
Google's help page describes averaging over all impressions. The check shows that weighting on real reports.
How we measured this
We measured these figures ourselves from the Google Search Analytics API. The window was 28 days, 2026-08-18 to 2026-09-14, final web data, aggregationType byProperty, fetched on 2026-09-18. The Search Analytics API reference documents the searchAnalytics.query method we called.
Routes queried and how they cross check
We queried four routes and cross checked them against each other.
- Property totals. Dimensions [].
- Daily totals. [date]. Reproduces every property's impressions, clicks and reported position.
- Named query rows. [query]. The primary route for this page.
- Query by device. [query, device]. Matches the query rows on every query and impression count, and on position to within floating point rounding. A few rows sitting exactly at position 10 or 20 can move across the cut, so cross check shares at those cuts differ in the second decimal.
An independent exact fraction recomputation of the primary routes agreed on every figure. All routes come from the same provider, so agreement cannot catch an upstream Google error.
Which selections were queried and which were left out
Queried in total were 43 property selections. 37 are in the cohort. Left out: tgtools-site.lipmichal.workers.dev and bestremotetools.com had no impressions in the window. viryd.com, securetoolsguide.com and chrometipsguide.com had a few impressions but no named query row. tg.zovo.one is a URL prefix property whose impressions already sit inside the zovo.one domain property.
Rounding and per property data
Positions are rounded to two decimals and percentages to two decimals. The per property file ships beside the page. Query text is never published.
What this cannot tell you
Not a benchmark
One operator's properties. A different window gives different numbers.
No ranking promise
Average position says nothing about clicks on its own. Google's help answer 7042828 notes a position for your specific search "might be different than the average because of many variables, such as your search history, location, and so on".
Conflict of interest
The operator sells the software described here and owns every site in the dataset.
Not independently checkable
Search Console is authenticated, so readers cannot recheck the private source readings without access. Figures are read on the stamped date and change as Search Console reprocesses data.