A Flat Line in Rank History Might Be a Gap

Most rank charts have no visual state for “no check happened”. The line is continuous because a continuous line looks finished, so a check that failed gets rendered as something else: the last known value held flat, a smooth slope drawn between the neighbours, or a fall to the bottom of the chart. Each of those is a fabricated observation, and each fools a different part of your workflow.

The series is only as trustworthy as its worst-rendered missing day, and you usually cannot see which days those are from the chart.

Three ways a missing check gets drawn

Carried forward. The previous value repeats until the next successful check. Produces a flat segment, which reads as stability — the single most reassuring possible rendering of an outage.

Interpolated. The gap is bridged between the two neighbouring observations, producing a clean slope that no retrieval ever supported. Worst on long gaps, where a two-week diagonal looks like a gradual decline or a steady climb.

Dumped to the floor. The missing check is treated as “not found”, so the point lands at the bottom of the tracked depth. Reads as a catastrophe, fires every alert, and is indistinguishable on the chart from an actual disappearance — when a keyword falls out of the top 100.

The honest rendering is a visible break in the line, and it is the rarest, because it makes the product look unreliable when the truth is that the surface being sampled is unreliable.

Why checks fail in the first place

A tracker’s job is to obtain a live result page for a specific location, device and language, repeatedly, on a schedule. That is a fragile errand and it fails routinely — a request that gets challenged, a queue that runs past its window, a location that was briefly unavailable, a quota exhausted mid-run, a keyword paused by someone else on the team, a tool-side outage. The structural reasons are in where a rank tracker’s data comes from.

Note that most of these produce silent failure. Nothing in the UI says the run was short; the row simply has a value from the wrong day. The same failure modes exist wherever a tool samples an ordering, usually with less tooling around them — rank tracking on surfaces that aren’t Google.

What the gaps do to your conclusions

Baselines understate spread. Flat segments are days of variance that never got recorded. A keyword whose history is a third carry-forward looks calmer than it is, and a noise floor computed from it will be too tight, so it over-fires later — you can’t read a position without a baseline.

Averages average guesses. Any mean position over a window that contains carried-forward values is partly a mean of repeated old observations. The figure still has a confident number of decimal places (average position is an average of what, exactly?).

Alerts fire on rendering. A floor-dumped null triggers a drop alert; a carry-forward suppresses one. Both are the tool’s display policy deciding your inbox.

A wait looks like a failure. If you are watching for a fix to take effect, a carried-forward flat line is exactly the shape of “nothing has happened yet”, and it will be read that way — what recovery looks like after you fix something.

Diagnosis goes wrong at the first step. A step change followed by a flat line is one of the classic shapes of a configuration or collection problem rather than a ranking one, and the flat part is the evidence — how to diagnose a ranking drop.

Finding the gaps in your own data

You cannot see this on the chart. You can see it in an export.

Count rows per date, not per keyword. If a date has fewer rows than the tracked-set size, that date is partial. This is the single fastest check and most teams have never run it.

Look for repeated identical values on keywords that never sit still. Three consecutive days at exactly the same position on an unsettled keyword is more likely a repeat than a coincidence.

Check whether flat spots share a date across keywords. A run of flat segments all starting the same day is a collection outage, not thirty keywords becoming stable at once.

Look for a check timestamp column. If the export carries the time of retrieval, a missing or duplicated timestamp identifies a filled value directly. If it does not carry one, that absence is itself worth knowing about.

Compare against your own impressions data. Impressions that continue while a position series sits flat suggest the flatness is yours, not Google’s — the comparison and its caveats are in rank tracker vs. Search Console.

What to ask a vendor for

A distinct no-data state, exposed in the export and not only in the chart. A per-check timestamp. A documented gap-filling policy, and ideally a setting to turn it off. Aggregates that exclude nulls rather than filling them.

You will not get all of that. Knowing which of it you don’t have is the point, because the workaround is to compute your own aggregates from raw rows and let the gaps be gaps.

What to actually do

  1. Count rows per date on your next export, and keep doing it monthly.
  2. Find out your tool’s gap policy — carry forward, interpolate, or floor — and write it in the same place as your reporting definitions.
  3. Exclude filled values from baselines and averages, rather than smoothing over them.
  4. Treat a flat segment on an unsettled keyword as suspect until you have confirmed a check happened.
  5. Annotate known collection outages on the series, the same as any other measurement change.