Your country

Tools that support it use your country for local currency, number formats, units and paper size. Your choice is saved only in this browser.

Type a name or a two-letter code. Use the up and down arrow keys to move through the countries, Enter to choose one and Escape to close.

SEO & Digital Marketing  Module 1 – Marketing and search foundations

How Google Search works: crawl, index, serve

Google's three stages, crawling, indexing and serving, what stops a page at each, the kinds of result including AI Overviews, and how to read ranking updates.

  • Beginner
  • 20 minutes
  • Examples run with Node.js 24.21.0, Python 3.14.8 and Pyodide 314.0.7
  • By MySmartCoPilot
Free lesson, Pro answers: 20 minutes
Free: the whole lesson. With a pass: the model answers to its 2 interview questions.

What you will learn

  • Explain Google's three stages, crawling, indexing and serving, and what can stop a page at each one
  • Diagnose where a missing page stopped from the reasons Search Console's Page indexing report gives
  • Recognise the main kinds of result on a results page, including AI Overviews and AI Mode
  • Read Google's update history and explain why a ranking change is not always caused by your own site
What you’ll learn

What you will learn

  • Explain Google's three stages, crawling, indexing and serving, and what can stop a page at each one
  • Diagnose where a missing page stopped from the reasons Search Console's Page indexing report gives
  • Recognise the main kinds of result on a results page, including AI Overviews and AI Mode
  • Read Google's update history and explain why a ranking change is not always caused by your own site
On this page

Pune Bakes’ clicks from Google fell by 45 % in one week, and the owner’s first thought was that Google had punished her. It had not: a theme update on her own site had told Google to drop every product page.

To find a cause like that in minutes, you need a picture of what Google does with a page. Google Search works in three stages, and a page can stop at any of them. By the end of this page you can name the three stages and what stops a page at each, read the reasons Search Console gives for a page that is missing, recognise the kinds of result a results page mixes, AI Overviews and AI Mode among them, and tell a drop that Google caused from one that you caused yourself.

Every page passes three stages, and none is guaranteed

Google describes the work in three stages, and not every page passes through all of them (how Search works):

  • crawling: The first stage of Google Search: Googlebot downloads a page whose address Google has found, from a link or a sitemap, and renders it by running its JavaScript.: Google “downloads text, images, and videos from pages it found on the internet” with automated programs; the main one is Googlebot: Google's main crawler, the program that downloads pages for Google Search. It reads a site's robots.txt rules before it fetches pages.. Before it can download a page, Google must learn that the address exists, from links on pages it already knows or from a sitemap. While crawling, it also renders the page: it runs the page’s JavaScript in a recent version of Chrome, as a browser would.
  • indexing: The second stage of Google Search: Google analyses a crawled page's text, images and tags, groups duplicates, picks a canonical and stores the result in its index.: Google analyses the text, the images and the videos of the page, along with key tags such as the title and alt attributes, and “stores the information in the Google index”, a large database. It also groups pages that are near-duplicates and picks one of each group as the canonical URL: The address Google picks as the most representative of a group of duplicate pages; it is the one that may be shown in results. A site's preferred canonical is a hint, not a rule., the one that may be shown in results.
  • serving: The third stage of Google Search: for each search, Google chooses the indexed pages it judges most relevant and useful, with factors such as the searcher's location, language and device.: when someone searches, Google picks the results it judges most relevant and of the highest quality for that query, from hundreds of factors that include the searcher’s location, language and device.

None of the three is promised. Google states that it doesn’t guarantee to crawl, index or serve a page, even one that follows its guidance, and that it “doesn’t accept payment to crawl a site more frequently, or rank it higher”. Step through one new page of the bakery and notice where each common failure would stop it:

Interactive · stage by stage One new page, from discovery to a results page Step through the bakery's new product page. Each step says what Google does at that stage, and what would stop the page there.
One new page, from discovery to a results page, step 6 of 6. Showing Discovery (found by link and sitemap), Crawling (allowed, 200 OK), Rendering (text and photos seen), Indexing (stored, one canonical), Serving (shown in Pune for the query). In focus: Crawling.crawled again laterDiscoveryfound by link and sitemapCrawlingallowed, 200 OKRenderingtext and photos seenIndexingstored, one canonicalServingshown in Pune for the querycrawled again later

The drawing shows the whole scene; its 6 steps are listed below.

Every step as text
  1. A new URL. The bakery adds a page for its eggless truffle cake. There is no central registry of web pages, so Google must find the address: here from a link on the home page and from the bakery's sitemap.
  2. Googlebot asks for it. Googlebot reads robots.txt first. Nothing blocks the URL, the server answers 200 and the page is downloaded. A Disallow rule for it would have stopped the page here, before Google ever saw its content.
  3. The page is rendered. Google runs the page's JavaScript in a recent version of Chrome, as a browser would, so text that a script adds is seen too.
  4. Analysed and clustered. Google analyses the text, the title and the image alt text. A second address, the same page with ?ref=insta added, is a duplicate, so Google clusters the two and picks one as canonical. A noindex rule would have stopped the page here.
  5. Chosen for a query. Someone in Pune searches eggless truffle cake. Google picks the results it judges most relevant and of the highest quality, with location, language and device among the factors, and this page can be one of them.
  6. Not a single pass. Google comes back to known pages to look for changes, so an edit, a new noindex or a block can change the page's fate at any stage later. Passing once guarantees nothing, and Google guarantees no stage at all.

The page passed every stage, but it could have stopped at three places: a robots.txt block at crawling, a noindex rule at indexing, and a better answer from another site at serving. Google’s own rules for a site are gathered in Search Essentials, in three parts: technical requirements, spam policies and key best practices. Most of this track’s SEO lessons work on one of the three.

Checkpoint

Check: Crawling, indexing and serving

  1. Question 1 of 2 Google runs a page's JavaScript in a recent version of Chrome, as a browser would. Which stage is that part of?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: Crawling

    Crawling downloads the page and renders it, so text that JavaScript adds is seen too. Indexing then analyses and stores it, and serving chooses it, or not, for a query.

  2. Question 2 of 2 A seller offers "priority crawling" by Google for a monthly fee. What does Google say?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: Google doesn't accept payment to crawl a site more often or to rank it higher

    None of the three stages is guaranteed, and none is for sale: Google does not accept payment to crawl a site more frequently or to rank it higher.

Search Console names the stage where a page stopped

The technical requirements are the bare minimum a page needs to be eligible: Googlebot is not blocked (the page is neither behind a login nor disallowed in robots.txt), the page works, answering “200 (success)” rather than an error, and its content is in a format Google can index and breaks no spam policy (technical requirements). When Google does not index a page, for one of these failures or for another cause, Search Console’s Page indexing report: The Search Console report that lists a site's pages Google has and has not indexed, with a reason for each page left out, such as a robots.txt block, a noindex rule or a duplicate. gives the reason (Page indexing report). Each reason belongs to a stage:

Reason in the report Stage where the page stopped
URL blocked by robots.txt Crawling: Googlebot was told not to download it
Server error (5xx), Not found (404) Crawling: the download failed or found nothing
Discovered - currently not indexed Crawling: Google knows the address but has not crawled it yet
URL marked ‘noindex’ Indexing: the page asked to be left out
Duplicate, Google chose different canonical than user Indexing: another address of the page was chosen
Crawled - currently not indexed Indexing: read, but not kept for now

A page that is indexed but never shown for the words you expect has stopped at serving; Search Console’s Performance report, which shows the queries a page appears for, is where that shows. One reason sits outside the table: “Indexed, though blocked by robots.txt” means Google indexed an address it could not crawl, often because other pages link to it. That is why Google says robots.txt “is not a mechanism for keeping a web page out of Google” (robots.txt).

A noindex behind a robots.txt block

To keep a page out of results, a site blocks it in robots.txt: A file at the root of a site that tells crawlers which addresses they may fetch. It controls crawling, not indexing: a blocked address can still appear in results, and it keeps nothing private. and adds a noindex: A rule, in a robots meta tag or an X-Robots-Tag header, asking search engines not to index a page. It works only if the page can be crawled, so that the rule is read. rule as well. The noindex is never read: for it to work, the page “must not be blocked by a robots.txt file” (noindex), because Google has to crawl the page to see the rule. Let Googlebot crawl the page, and keep the noindex.

Indexability Checker Check a URL of your own site: its status, redirects, robots.txt for Googlebot, noindex tags and headers, and its canonical, with the reason it can or cannot be indexed.

Checkpoint

Check: Reasons a page is not indexed

  1. Question 1 of 2 A new post shows "Discovered - currently not indexed" in the Page indexing report. At which stage has it stopped?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: Crawling, because Google knows the address but has not downloaded the page yet

    Each reason belongs to a stage. "Discovered" stops before crawling is done; "Crawled - currently not indexed" stops at indexing; a page that is indexed but never shown has stopped at serving.

  2. Question 2 of 2 A site blocks /old-offers/ in robots.txt and also adds noindex to those pages, yet they still appear in results. Why?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: Googlebot cannot crawl the pages, so it never reads the noindex rule

    robots.txt is not a way to keep a page out of Google. To remove a page from results, let Googlebot crawl it and keep the noindex rule.

A results page mixes many kinds of result

Search for “eggless cake near me” and the page that comes back is not ten blue links. Google’s gallery of visual elements names the common kinds of result, and three more parts sit beside them:

Kind of result What it shows What decides it
Text result A title link, a snippet and an attribution: favicon, site name and visible URL Crawling, indexing and serving of the page
Rich result A text result with extra visual features The page, often with structured data that makes it eligible
Image and video results A thumbnail with its attribution The image or video and the page it sits on
Exploration features Related searches and related questions Searches related to yours
Business Profile listings Local businesses with hours, reviews and a map Relevance, distance and prominence
Ads Paid results in labelled ad sections The advertiser’s bid and the ad’s quality, among other factors
AI Overviews and AI Mode An answer built by Google’s AI, with links to sources Indexed pages that may be shown with a snippet

Two rows matter for money. For local listings, Google says “There’s no way to request or pay for a better local ranking on Google” (local ranking). For ads, Google sells only the ad space, so “no one can buy better placement in organic Search results” (Ads on Search).

The last row is the newest. AI Overviews give a quick answer to a complex question with links to explore; AI Mode suits questions that need comparisons and reasoning. Both may use query fan-out: How AI Overviews and AI Mode may build an answer: by running several related searches across subtopics and data sources, then linking to the pages they draw on., “issuing multiple related searches across subtopics and data sources”, to build an answer (AI features). To be shown as a supporting link, a page only needs to be indexed and eligible to be shown with a snippet: “There are no additional requirements to appear in AI Overviews or AI Mode, nor other special optimizations necessary.” Their traffic is counted in Search Console’s Performance report under the Web search type.

SERP Snippet Preview See how your title and snippet may look as a text result on desktop and mobile, cut where results would cut them.

Checkpoint

Check: Kinds of result, AI features included

  1. Question 1 of 2 What does a page need in order to be shown as a supporting link in AI Overviews or AI Mode?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: To be indexed and eligible to be shown in Google Search with a snippet; nothing more is required

    AI Overviews and AI Mode use pages that are indexed and may be shown with a snippet, and meet the technical requirements. The foundations of SEO apply to them as to the rest of Search.

  2. Question 2 of 2 The bakery wants to appear higher in the local results for "cake shop near me" by paying Google. What is possible?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: Nothing: there is no way to request or pay for a better local ranking; it can only buy ads, which are labelled

    Local results are ranked mainly by relevance, distance and prominence, and cannot be bought; ads are a separate, labelled space.

Ranking systems change, and Google publishes the big changes

Serving is done by many ranking systems working together. Google’s guide to its ranking systems names them: BERT, MUM and neural matching for understanding language, link analysis systems and PageRank, a reviews system, freshness systems, a site diversity system, original content systems and spam detection systems, among others. Some are retired: the helpful content system, announced in 2022, became part of the core ranking systems in 2024.

Google changes these systems all the time. Several times a year it makes a broad change to them, a core update: A broad change to Google's ranking systems, made several times a year and announced on the Search Status Dashboard with the days its rollout began and ended. It does not target particular sites., and announces it; smaller core updates run continuously and are not announced (core updates). Spam updates, notable improvements to the systems that detect spam, are announced the same way (spam updates). Each announced update appears on the Search Status Dashboard with the day its rollout began and the day it ended, and Google’s advice on reading one follows those dates:

Timeline · 6 events in order An announced update, phase by phase Walk through what happens from the day an update is announced to the day you can judge it, and what to do in each phase.
  1. Announcement

    Google lists the update on the dashboard

    Core updates are announced on Google's list of ranking updates and shown on the Search Status Dashboard, with the day the rollout begins. Smaller core updates also run all the time and are not announced.

  2. Rollout

    It rolls out over days or weeks

    In the dashboard's history of 2025 and 2026, core updates took about 11 to 18 days to roll out, and spam updates from under a day to almost four weeks. Google's advice is to confirm that the rollout has finished before you look, so a number read halfway through is not the result.

  3. Complete

    The dashboard marks it finished

    Note the day the rollout began and the day it ended. Until it has ended, change nothing on the site because of it.

  4. One week on

    Wait a full week Google's advice

    Google advises waiting at least a full week after the rollout has finished before you look at the effect in Search Console.

  5. Compare

    The week after against the week before

    Compare that week with the week before the rollout started. Look at your top pages and queries, and at web, image, video and news results separately, because an update may touch only one of them.

  6. Decide

    A small move or a large drop

    Falling from position 2 to 4 needs no drastic change. A fall from 4 to 29 calls for an honest look at the content. Google promises no recovery: some changes show in days, and some take months or the next core update.

The timeline has 6 events, from Announcement to Decide.

A core update does not single out sites: Google says core updates “don’t target specific sites or individual web pages”. When a page falls in one, other pages have been judged more relevant or more useful, which is why the advice is to wait, compare and review the content honestly rather than rush a quick fix.

Checkpoint

Check: Ranking systems and announced updates

  1. Question 1 of 2 A core update's rollout ended on a Wednesday. When does Google advise you to look at its effect, and against what?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: After at least a full week from the end, comparing that week with the week before the rollout began

    Note when the rollout began and ended, wait at least a full week after the end, and compare that week with the week before it began, looking at top pages and queries and each search type separately.

  2. Question 2 of 2 Do Google's core updates target specific sites?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: No: Google says core updates don't target specific sites or individual web pages

    Core updates change the ranking systems broadly and do not target sites, which is why the advice is to wait, compare and review the content honestly instead of rushing a fix.

A drop in clicks has more than one cause

Google’s guide to traffic drops lists six causes: an algorithmic update, technical issues, security issues, spam issues, seasonality and changing interests, and site moves. Only the first is a change Google makes to its ranking. The program below lines up 35 weeks of the bakery’s web search clicks with the dashboard’s dates and the bakery’s own change log, which sits at the top of the program, and for each week that fell by 15 % or more it names the likeliest cause. The clicks are invented; the update dates are the dashboard’s. Run it, then press Edit, move the theme update in SITE_CHANGES to 2026-03-25, while the March core update was rolling out, and run it again to see which cause the program now names first:

Four drops in clicks, lined up with updates, changes and last year Python · drop-check/drop_check.py
"""Find the weeks when organic clicks fell, and line each one up with Google's updates and the site's own changes.

weekly_clicks.csv: 35 weeks of a fictional bakery's clicks from Google web search, and the same week a year before
(invented data, shaped like a Search Console export). ranking_updates.json: Google's announced ranking updates from
the Search Status Dashboard. SITE_CHANGES below: what the bakery changed on its site, and when; move a day and run
the program again to see the verdicts follow the dates.
A week counts as a drop when clicks fell 15 % or more from the week before. Discover updates are left out, because
this export counts web search only.
"""
import csv
import json
from datetime import date, timedelta

DROP = -0.15
# The bakery's own log of changes to punebakes.example: the day, and what changed.
SITE_CHANGES = [
    ("2026-02-02", "New photos on the ten best-selling product pages"),
    ("2026-07-08", "A theme update added a noindex tag to every product page"),
    ("2026-07-15", "The noindex tag removed, and recrawls requested with URL Inspection"),
]

with open("weekly_clicks.csv", encoding="utf-8") as f:
    weeks = [(date.fromisoformat(r["week"]), int(r["clicks"]), int(r["same_week_last_year"])) for r in csv.DictReader(f)]
with open("ranking_updates.json", encoding="utf-8") as f:
    updates = [u for u in json.load(f)["updates"] if "Discover" not in u["name"]]

clicks_in = {start: clicks for start, clicks, _ in weeks}


def monday(day):
    return day - timedelta(days=day.weekday())


print(f"{len(weeks)} weeks of web search clicks. Weeks that fell 15 % or more from the week before:\n")
for (start0, clicks0, last0), (start, clicks, last) in zip(weeks, weeks[1:]):
    change = clicks / clicks0 - 1
    if change > DROP:
        continue
    before_year = last / last0 - 1
    print(f"week of {start}: {clicks0:,} -> {clicks:,} clicks ({change:+.0%}); a year before: {before_year:+.0%}")
    window = (start0, start + timedelta(days=6))  # this week and the week before
    mine = [(day, what) for day, what in SITE_CHANGES if window[0] <= date.fromisoformat(day) <= window[1]]
    rolling = [u for u in updates if date.fromisoformat(u["begin"]) <= window[1] and date.fromisoformat(u["end"]) >= window[0]]
    for day, what in mine:
        print(f"  site change on {day}: {what}")
    for u in rolling:
        print(f"  rolling out: {u['name']}, {u['begin']} to {u['end']}")
    if mine:
        print("  -> look at your own change first")
    elif before_year <= DROP:
        print("  -> seasonal: the same week fell as much a year before")
    elif rolling:
        last_one = max(rolling, key=lambda u: u["end"])
        begin, end = date.fromisoformat(last_one["begin"]), date.fromisoformat(last_one["end"])
        before = monday(begin) - timedelta(days=7)  # the full week before the rollout began
        after = monday(end + timedelta(days=7)) + timedelta(days=7)  # a full week, a week after it ended
        b, a = clicks_in[before], clicks_in.get(after)
        print(f"  -> an update was rolling out: wait a full week after it ends on {end}, then compare")
        if a is not None:
            print(f"     week of {before}: {b:,} clicks; week of {after}: {a:,} clicks ({a / b - 1:+.0%})")
    else:
        print("  -> no update, no change, not seasonal: check Search Console's reports for errors")
    print()

Output

35 weeks of web search clicks. Weeks that fell 15 % or more from the week before:

week of 2026-02-16: 1,420 -> 1,080 clicks (-24%); a year before: -25%
  -> seasonal: the same week fell as much a year before

week of 2026-03-30: 1,120 -> 905 clicks (-19%); a year before: +1%
  rolling out: March 2026 spam update, 2026-03-24 to 2026-03-25
  rolling out: March 2026 core update, 2026-03-27 to 2026-04-08
  -> an update was rolling out: wait a full week after it ends on 2026-04-08, then compare
     week of 2026-03-16: 1,110 clicks; week of 2026-04-20: 910 clicks (-18%)

week of 2026-05-11: 1,210 -> 930 clicks (-23%); a year before: -19%
  -> seasonal: the same week fell as much a year before

week of 2026-07-13: 1,020 -> 560 clicks (-45%); a year before: +0%
  site change on 2026-07-08: A theme update added a noindex tag to every product page
  site change on 2026-07-15: The noindex tag removed, and recrawls requested with URL Inspection
  -> look at your own change first

Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 drop_check.py

weekly_clicks.csv: 35 weeks of clicks, and the same weeks a year before CSV · drop-check/weekly_clicks.csv
week,clicks,same_week_last_year
2026-01-05,980,900
2026-01-12,1000,910
2026-01-19,1010,905
2026-01-26,1030,930
2026-02-02,1060,960
2026-02-09,1420,1300
2026-02-16,1080,980
2026-02-23,1070,970
2026-03-02,1090,990
2026-03-09,1100,1000
2026-03-16,1110,1010
2026-03-23,1120,1005
2026-03-30,905,1015
2026-04-06,890,1020
2026-04-13,900,1030
2026-04-20,910,1035
2026-04-27,920,1040
2026-05-04,1210,1300
2026-05-11,930,1050
2026-05-18,940,1045
2026-05-25,975,1050
2026-06-01,990,1060
2026-06-08,1000,1065
2026-06-15,1005,1070
2026-06-22,1010,1080
2026-06-29,1015,1085
2026-07-06,1020,1090
2026-07-13,560,1095
2026-07-20,640,1100
2026-07-27,860,1110
2026-08-03,990,1105
2026-08-10,1015,1110
2026-08-17,1030,1120
2026-08-24,1035,1125
2026-08-31,1040,1130
ranking_updates.json: announced updates, from the Search Status Dashboard JSON · drop-check/ranking_updates.json
{
  "source": "Google Search Status Dashboard, its published history of ranking updates (https://status.search.google.com/incidents.json): the name and the first and last day of each rollout, in UTC",
  "updates": [
    {
      "name": "December 2025 core update",
      "begin": "2025-12-11",
      "end": "2025-12-29"
    },
    {
      "name": "February 2026 Discover update",
      "begin": "2026-02-05",
      "end": "2026-02-27"
    },
    {
      "name": "March 2026 spam update",
      "begin": "2026-03-24",
      "end": "2026-03-25"
    },
    {
      "name": "March 2026 core update",
      "begin": "2026-03-27",
      "end": "2026-04-08"
    },
    {
      "name": "May 2026 core update",
      "begin": "2026-05-21",
      "end": "2026-06-02"
    },
    {
      "name": "June 2026 spam update",
      "begin": "2026-06-24",
      "end": "2026-06-26"
    },
    {
      "name": "August 2026 spam update",
      "begin": "2026-08-18",
      "end": "2026-08-21"
    },
    {
      "name": "September 2026 spam update",
      "begin": "2026-09-24",
      "end": "2026-10-08"
    }
  ]
}

Four weeks fell, for three different reasons. Two drops, of 24 % and 23 %, came the week after a peak in demand, and the same weeks fell by 25 % and 19 % a year before: seasonality, which nothing on the site can fix. One fall, of 19 %, came while a core update and a spam update were rolling out; a full week after the core update ended, clicks were still 18 % below the week before it began, so the update did cost the bakery traffic, and the answer is a review of its pages, not a panic. The largest fall, 45 %, came the week after the bakery’s own theme update added noindex to every product page, with no update running: the cause was the bakery’s own, and the fix was in its hands.

Key idea

Before you change anything after a drop, line it up with three sets of dates: Google’s announced updates, your own changes to the site, and the same weeks a year before.

Checkpoint

Check: The causes of a drop in clicks

  1. Question 1 of 2 Clicks fell by 45 % the week after a theme update added noindex to every product page, and no update was rolling out. What comes first?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: Look at the site's own change, and remove the noindex from the product pages

    Line the drop up with your own changes first. A noindex on every product page tells Google to drop them, and removing it, then asking for recrawls, is the fix.

  2. Question 2 of 2 Clicks fell by 23 % the week after a festive peak. The same week a year before fell by 19 %, and no update or change lines up. What is the likeliest cause?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: Seasonality: interest drops after the festival every year

    Seasonality and changing interests are one of Google's six causes of drops. Comparing the same weeks a year before is how to see it, as the program does.

Practise: find where each page stopped

The exercise gives you eight things that went wrong on eight sites, from a noindex tag on a working page to a fall during a core update. For each, choose the stage where the page stopped and the first check you would make; the sample tests check both:

Exercise · Easy · Python

Find the stage where each page stopped, and the first check

Eight things went wrong on eight sites. For each, decide in diagnosis.py the stage where the problem stops the page, "crawl", "index" or "serve", and the first check you would make, from CHECKS. diagnose() returns one pair (stage, check) per scenario id.

| id | What you see | | --- | --- | | noindex-200 | A product page answers 200 OK, but its HTML carries a robots meta tag with noindex. | | blocked-but-linked | A page is blocked in robots.txt, yet it shows in results with no description, because the home page links to it. | | server-5xx | The Page indexing report lists 40 pages under "Server error (5xx)". | | discovered-not-indexed | A new post shows "Discovered - currently not indexed" a week after it went up; no other page links to it. | | duplicate-canonical | Page indexing says "Duplicate, Google chose different canonical than user" for a page with ?ref=insta at the end. | | crawled-not-indexed | A tag page that lists two posts shows "Crawled - currently not indexed". | | indexed-no-impressions | URL Inspection says the page is on Google, but the Performance report shows no impressions for the product's name. | | drop-during-update | Clicks fell by a fifth in a week while a core update was rolling out, and nothing changed on the site. |

The sample tests check the stage of every scenario and the first check of each. A first check is the one that tells you the most for the least work, before you change anything on the site.

Starter code · diagnosis.py

STAGES = {"crawl", "index", "serve"}
CHECKS = {
    "robots-txt",  # read the site's robots.txt rules for that URL
    "server-logs",  # read the server's logs and errors for Googlebot's requests
    "internal-links",  # find which pages link to it, and whether the sitemap lists it
    "url-inspection",  # inspect the URL in Search Console: indexing allowed, canonical, last crawl
    "content-review",  # ask honestly whether the page is useful and different from others
    "performance-report",  # see which queries the page gets impressions for, if any
    "status-dashboard",  # see when Google's updates began and ended
}

SCENARIOS = [
    "noindex-200", "blocked-but-linked", "server-5xx", "discovered-not-indexed",
    "duplicate-canonical", "crawled-not-indexed", "indexed-no-impressions", "drop-during-update",
]


def diagnose():
    """Return {scenario id: (stage, first check)} for the eight scenarios in the prompt."""
    # For example "noindex-200": ("index", "url-inspection").
    return {}
The sample tests · test_diagnosis.py
from diagnosis import CHECKS, SCENARIOS, STAGES, diagnose


def test_every_scenario_is_answered():
    """answers all eight scenarios with a known stage and a known check"""
    answers = diagnose()
    assert set(answers) == set(SCENARIOS)
    for scenario, (stage, check) in answers.items():
        assert stage in STAGES, scenario
        assert check in CHECKS, scenario


def test_stages():
    """puts each problem at the stage where it stops the page"""
    stage = {s: a[0] for s, a in diagnose().items()}
    assert {s for s in SCENARIOS if stage[s] == "crawl"} == {"blocked-but-linked", "server-5xx", "discovered-not-indexed"}
    assert {s for s in SCENARIOS if stage[s] == "index"} == {"noindex-200", "duplicate-canonical", "crawled-not-indexed"}
    assert {s for s in SCENARIOS if stage[s] == "serve"} == {"indexed-no-impressions", "drop-during-update"}


def test_first_checks_for_crawling():
    """starts a crawling problem where the crawler was stopped or never sent"""
    check = {s: a[1] for s, a in diagnose().items()}
    assert check["blocked-but-linked"] == "robots-txt"
    assert check["server-5xx"] == "server-logs"
    assert check["discovered-not-indexed"] == "internal-links"


def test_first_checks_for_indexing_and_serving():
    """reads what Google saw before changing the page, and the dates before blaming the page"""
    check = {s: a[1] for s, a in diagnose().items()}
    assert check["noindex-200"] == "url-inspection"
    assert check["duplicate-canonical"] == "url-inspection"
    assert check["crawled-not-indexed"] == "content-review"
    assert check["indexed-no-impressions"] == "performance-report"
    assert check["drop-during-update"] == "status-dashboard"
A hint

Ask how far the page got. If Googlebot never downloaded it (a robots.txt block, a server error, a URL it only knows of), the problem is at crawling. If Google read it but did not keep it (a noindex rule, a duplicate, a page judged not worth indexing), it is at indexing. If the page is in the index but does not show, or shows less, it is at serving.

The sample tests run on this device, in your browser (Pyodide): nothing is sent to mysmartcopilot.com. The first run downloads Python (about 13.5 MB), which is kept for the next runs. A check in your browser is feedback for you, not proof that the code is right for every input.

Finally, practise the five ideas of the page, weakest first, as your answers show it:

Practice that adapts to you

Practise this lesson

15 questions about 5 ideas of this lesson. Each answer is explained at once, and what you get right is kept in this browser.

  1. Question 1 of 15 In which order does a page pass Google's stages?

    Choose one answer.

    Show the answer: Question 1 of 15

    Answer: Crawling, then indexing, then serving

    Crawling (with discovery and rendering), indexing (analysis, clustering, the canonical) and serving (choosing results for a query), in that order.

  2. Question 2 of 15 The bakery's prices are added to its pages by JavaScript after they load. Can Google see them?

    Choose one answer.

    Show the answer: Question 2 of 15

    Answer: It can, because Google renders pages with a recent version of Chrome while crawling

    Rendering is part of crawling: Google runs the page's JavaScript in a recent Chrome. Later lessons of this track look at what can still go wrong with pages that depend on scripts.

  3. Question 3 of 15 The same product page exists at /cakes/truffle and at /cakes/truffle?ref=insta. What does Google usually do with the two addresses?

    Choose one answer.

    Show the answer: Question 3 of 15

    Answer: Clusters them as duplicates and picks one as the canonical, the one that may be shown in results

    Canonicalization picks one address from a group of duplicates. Google may choose a different one than the site prefers, which the report shows as "Duplicate, Google chose different canonical than user".

  4. Question 4 of 15 In the Page indexing report, "URL marked 'noindex'" means the page stopped at which stage?

    Choose one answer.

    Show the answer: Question 4 of 15

    Answer: Indexing

    A noindex rule is read while indexing, so the page must be crawlable for it to work.

  5. Question 5 of 15 Forty pages show "Server error (5xx)" in the Page indexing report. Which stage failed, and what do you read first?

    Choose one answer.

    Show the answer: Question 5 of 15

    Answer: Crawling; read the server's logs and errors for Googlebot's requests

    The technical requirements include a page that works, answering 200 rather than an error. A 5xx stops the page at crawling.

  6. Question 6 of 15 A members' price list shows "Indexed, though blocked by robots.txt", and the owner wants it out of results and out of reach of strangers. What should she do?

    Choose one answer.

    Show the answer: Question 6 of 15

    Answer: Put it behind a login, because robots.txt only controls crawling and a blocked address can still be indexed

    robots.txt is not a way to keep a page out of Google, and it protects nothing. For privacy, require a login; to keep a public page out of results, let it be crawled with a noindex rule.

  7. Question 7 of 15 What is query fan-out in AI Overviews and AI Mode?

    Choose one answer.

    Show the answer: Question 7 of 15

    Answer: Running several related searches across subtopics and data sources to build one answer

    AI Overviews and AI Mode may issue multiple related searches across subtopics and data sources to develop a response, which can surface more relevant pages.

  8. Question 8 of 15 A consultant says the bakery needs a special AI file and new markup before it can appear in AI Overviews. Is that right?

    Choose one answer.

    Show the answer: Question 8 of 15

    Answer: No: Google says no additional requirements or special optimizations are needed beyond being indexed and snippet-eligible

    To be eligible as a supporting link, a page must be indexed and eligible to be shown with a snippet, and meet the technical requirements. Nothing more is required.

  9. Question 9 of 15 The bakery spends more on ads. What happens to its place in the unpaid results?

    Choose one answer.

    Show the answer: Question 9 of 15

    Answer: Nothing: Google sells only ad space, so no one can buy better placement in the unpaid results

    Ads and unpaid results are separate: ads are labelled, and the unpaid results are ranked by Google's systems without regard to who advertises.

  10. Question 10 of 15 Where can you see the day an announced core or spam update began and the day it ended?

    Choose one answer.

    Show the answer: Question 10 of 15

    Answer: On Google's Search Status Dashboard

    Announced updates appear on the Search Status Dashboard, which the drop check program reads; smaller core updates run all the time without an announcement.

  11. Question 11 of 15 After a core update, a page moved from position 2 to position 4 for its main query. What does Google's advice suggest?

    Choose one answer.

    Show the answer: Question 11 of 15

    Answer: No drastic change: a small move like that needs no radical action

    A small move needs no drastic change; a large drop, such as from 4 to 29, calls for an honest assessment of the content.

  12. Question 12 of 15 A blog post says sites must now prepare for "the next helpful content update". What does Google's ranking systems guide say?

    Choose one answer.

    Show the answer: Question 12 of 15

    Answer: The helpful content system is retired as a separate system: it became part of the core ranking systems in 2024

    Read Google's own list of ranking systems before acting on news about them; retired systems are listed with what became of them.

  13. Question 13 of 15 Which of these are among the causes of traffic drops in Google's guide? Choose every one.

    Choose every answer that is right.

    Show the answer: Question 13 of 15

    Answer:

    • Technical issues
    • Seasonality and changing interests
    • Site moves and migrations

    Google lists six causes: an algorithmic update, technical issues, security issues, spam issues, seasonality and changing interests, and site moves and migrations.

  14. Question 14 of 15 In the drop check's output, the week before the March core update began had 1,110 clicks, and the week a full week after it ended had 910. By how many percent did clicks change? Give a negative number for a fall.

    Type a number.

    A hint

    Divide the week after by the week before, then subtract 1.

    Show the answer: Question 14 of 15

    Answer: -18 % (anything from -18.5 to -17.5 counts)

    910 ÷ 1,110 − 1 = −0.18, a fall of 18 %. Measured the way Google advises, the update did cost the bakery traffic, so its pages deserve an honest review.

  15. Question 15 of 15 Clicks fell by 30 % in a week. No update was rolling out, nothing changed on the site, and the same week a year before was flat. What next?

    Choose one answer.

    Show the answer: Question 15 of 15

    Answer: Check Search Console's reports, such as Page indexing, for errors and pages that dropped out

    The program's last verdict is exactly this case: when updates, your own changes and seasonality are ruled out, look for errors in Search Console's reports.

Interview questions

Warm-up (fresher to 2–5 years): how are crawling, indexing and serving different?

Crawling is Google downloading a page with Googlebot, after it has learned the address from a link or a sitemap; it includes rendering the page’s JavaScript. Indexing is Google analysing what it downloaded, the text, images, title and other tags, grouping duplicates, choosing a canonical and storing the result in its index. Serving is choosing, for each search, the indexed pages that are most relevant and useful for that searcher. A page can stop at any stage: a robots.txt block stops crawling, a noindex rule stops indexing, and a better answer elsewhere stops serving. Google guarantees none of the three, and no payment buys any of them.

Two more questions follow, about a page that never appeared and a fall in clicks. Make the first decision of each before you open it:

Checkpoint

Your first decision

  1. Question 1 of 2 Interview brief: a client's new service page has not appeared in Google after three weeks. What do you look at first?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: Search Console's URL Inspection and Page indexing report for that URL, to see which stage it stopped at

    Start with what Google saw: whether the URL is known, crawled, indexed and chosen as canonical. Only then decide whether the problem is a block, a rule, a duplicate or the content.

  2. Question 2 of 2 Interview brief: traffic fell by a fifth during a core update, and the client wants to change every page now. What do you advise first?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: Check the dates, wait until a full week after the rollout ends, then compare before deciding what to change

    Line the drop up with the update's dates, rule out your own changes and seasonality, wait, compare, and then review the content honestly. Recovery is not guaranteed and may take months.

Model answers open with any pass: ₹79 for 1 week ($2.99), one payment that never renews.

  1. Fresher to mid

    A client's new service page has not appeared in Google three weeks after it went live. How do you work out why, and what would you do at each stage?

    Model answer, Pro. Model answers open with any pass; prices are in the notice on this page. First step and follow-ups

  2. Mid to senior

    Organic clicks fell by a fifth in the week a core update began, and the client wants every page rewritten now. What do you do, and how do you decide whether the update caused the fall?

    Model answer, Pro. First step and follow-ups

Key takeaways

  • Google Search works in three stages, crawling, indexing and serving, and Google guarantees none of them and sells none of them.
  • Search Console’s Page indexing report gives a reason for each page left out, and each reason belongs to a stage; robots.txt controls crawling, not whether an address can appear.
  • A results page mixes text and rich results, images, videos, exploration features, Business Profile listings, labelled ads and AI features, and AI Overviews and AI Mode need no more than an indexed page that may show a snippet.
  • Ranking systems change all the time; core and spam updates are announced on the Search Status Dashboard, and an update is judged a full week after it ends against the week before it began.
  • A drop in clicks has several possible causes, so line it up with Google’s updates, your own changes and last year’s same weeks before you change anything.

Terms in this lesson

canonical URL
The address Google picks as the most representative of a group of duplicate pages; it is the one that may be shown in results. A site's preferred canonical is a hint, not a rule.
core update
A broad change to Google's ranking systems, made several times a year and announced on the Search Status Dashboard with the days its rollout began and ended. It does not target particular sites.
crawling
The first stage of Google Search: Googlebot downloads a page whose address Google has found, from a link or a sitemap, and renders it by running its JavaScript.
Googlebot
Google's main crawler, the program that downloads pages for Google Search. It reads a site's robots.txt rules before it fetches pages.
indexing
The second stage of Google Search: Google analyses a crawled page's text, images and tags, groups duplicates, picks a canonical and stores the result in its index.
noindex
A rule, in a robots meta tag or an X-Robots-Tag header, asking search engines not to index a page. It works only if the page can be crawled, so that the rule is read.
Page indexing report
The Search Console report that lists a site's pages Google has and has not indexed, with a reason for each page left out, such as a robots.txt block, a noindex rule or a duplicate.
query fan-out
How AI Overviews and AI Mode may build an answer: by running several related searches across subtopics and data sources, then linking to the pages they draw on.
robots.txt
A file at the root of a site that tells crawlers which addresses they may fetch. It controls crawling, not indexing: a blocked address can still appear in results, and it keeps nothing private.
serving
The third stage of Google Search: for each search, Google chooses the indexed pages it judges most relevant and useful, with factors such as the searcher's location, language and device.

References

Related tools

Report a problem with this lesson

Quick answers and tool search

Type to search tools or to get a quick answer, for example 18% of 2500. Use the up and down arrow keys to move through the results, Enter to choose, and Escape to close.