Google ranking drop or bad SERP data?
How to check the reading before you report a loss.

Your rank tracker says a page has disappeared. Before changing the page, changing the campaign or sending a report to a client, check the reading itself. A complete search-results page can still be an unreliable measurement of the query you intended to track.
The practical response is to preserve the evidence, repeat the collection under the same conditions, and look for agreement across independent signals. A single alarming position is a reason to investigate. It is not enough to diagnose the cause.
What a conflicting reading actually tells you
A ranking report and a manual search are separate observations. Google explains that search results depend on the time, place, device and recent history of the person searching. A disagreement needs context before it can support a conclusion about your site.
Keep the diagnosis open. A real ranking change, mismatched request settings and a collection or parsing error call for different responses. Work through the checks below instead of assigning a cause from one position value.
| What you have | What to check next |
|---|---|
| A different query, location or device setting | Match the request context before comparing positions. |
| An HTTP response without the expected result fields | Inspect the response and parsing rules before accepting the record. |
| Comparable readings that disagree | Preserve both, make a bounded repeat check and compare supporting traffic evidence. |
1. Preserve the reading before you retry
A retry can replace the most useful evidence with a fresh response. Save the original collection before doing anything else: the requested query, collection time in UTC, country or city setting, language, device setting, page or result depth, and the returned organic URLs with positions.
Keep the response body or a permitted diagnostic capture when your retention rules allow it. Record the request outcome separately from the extraction outcome. Avoid putting credentials, cookies or private account details into the report.
For a customer-facing incident, add a short note describing the actual symptom: “Our URL was absent from this top-ten reading” is more useful than “Google penalized us.” The first statement is something the saved response can support.
2. Make sure you are comparing the same search
Google documents that results vary with the time, place, device and recent history of the person searching. Search Console also groups performance by dimensions including query, country and device.
That makes an ordinary browser search a useful cross-check, but not a perfect control for an automated request. A person on a phone in London and a collector configured for desktop searches in the United States are not making the same observation.
| Field | Check |
|---|---|
| Query | Compare the exact query, including spelling, punctuation and any operators. |
| Location and language | Keep the requested market and language explicit in each saved record. |
| Device | Separate desktop and mobile readings. |
| Result depth | Compare the same page and the same definition of organic position. |
| Collection time | Use comparable time windows; keep the original timestamp. |
| Parsing rules | Check whether a parser update changed URL extraction or position assignment. |
3. Validate the record, not just the status code
HTTP 200 indicates a successful HTTP request. It does not certify that a response contains the business data your application wanted. Treat transport success and data validity as separate checks.
Start with things your own pipeline can test. Does the record contain the expected query? Are the organic URLs well formed? Did the parser capture a consent page or an error message? Are duplicate entries inflating positions? Did a change to how you count ads or result features move every organic position?
Compare both URLs and domains. Domains help identify broad changes in the set of sites returned. URLs reveal a different problem, such as the same publisher’s category page replacing a product page. Preserve the original URLs even if you make normalized copies for comparison.
4. Compare a known reference with the candidate
A small overlap check can make triage repeatable. Choose a saved reference that your team has reviewed, then count how many of its domains appear in the candidate. This is an original review aid. It flags a difference for investigation without diagnosing the cause.
How much of the reference remains?
These hand-authored records use reserved example domains. They are not live Google results.
Reviewed reference
Candidate
Most reference domains remain. Review the position changes and collection context.
In this article’s example, fewer than half of the reference domains remaining triggers manual review. That threshold is an illustrative operational choice. A reference can become stale, a genuine update can replace many sites, and a localized query can have a naturally unstable result set. Calibrate an alert against your own history.
The downloadable Python checker also refuses to compare records with different query, country, language or device settings. That catches a quieter source of false alarms before a percentage makes the result look authoritative.
A small, inspectable comparison script
Standard-library Python, two example records and a CSV incident checklist. The script reads local files and makes no network requests.
python serp_compare.py reference.json candidate.json
5. Check Search Console without expecting identical positions
Search Console’s average position is an aggregate of the topmost result for the relevant site or grouping. A tracker’s position is a separate observation under chosen settings. Google also warns that recent report data can be preliminary. Do not expect a one-to-one match.
Filter to the affected query, country, device and page where possible, and use a comparable date range. Look for corroborating changes in impressions and clicks rather than treating one aggregate number as a verdict.
A flat site-wide chart can hide a problem with a small set of queries. Conversely, a broad traffic fall can include changes in search demand. If the change persists, inspect the affected pages, indexing and recent site changes. Google’s traffic-drop guide provides a useful order for that investigation.
6. Report the evidence and the next check
Use a status that describes what you know. “Collection error” fits a failed request or invalid parse. “Uncorroborated reading” fits a large change without supporting evidence. “Sustained ranking change under investigation” fits repeated, comparable observations supported by other signals.
Choose a bounded recheck schedule appropriate to the workload. Retrying continuously adds cost and may not clarify a volatile search. Keep each result, including readings that contradict the initial alert.
A useful incident record contains the original observation, the comparison settings, a later reading, the Search Console filters used, and the reason for the current conclusion. Give the next person enough context to disagree with that conclusion if the evidence changes.
When evaluating a SERP API, ask what request context and raw evidence you can retain, how positions are defined, and how collection failures differ from empty or unusual results. Successful delivery and trustworthy measurement need separate checks.

