Tutorial12 min read

What Is a Web Crawler?

Short answer

A web crawler, also called a spider or a bot, is a program that finds and downloads web pages automatically: it starts from URLs it already knows (a seed list, pages from earlier crawls and the XML sitemaps sites publish), fetches each page, extracts its links and adds the new ones to a queue, checking each site's robots.txt before it fetches (MDN: Crawler; Google: how Search works). Crawling only finds and fetches pages; indexing is the separate next step, in which a search engine analyzes a page and decides whether to store it, so a crawled page is not always indexed. If you run your own crawler at volume, ProxyField rotating residential proxies give each request a new IP; start with the Easy Trial, 1 GB for $2.95.

residential IPs
412M+
from, traffic never expires
$1.95/GB
Easy Trial
1 GB for $2.95
At a glance
QuestionShort answer
How does a crawler find pages?From seed URLs, sitemaps and every link on the pages it fetches; a page with no inbound links and no sitemap entry is hard to find
What must it respect?robots.txt (RFC 9309: longest match wins, refresh at least every 24 hours), the site's rate signals (429 or 503 with Retry-After), logins and technical blocks
Crawling vs indexing?Crawling fetches the page; indexing analyzes and stores it; serving shows it for a query. Each step can stop a page
On this page 9 sections
  1. What is a web crawler?
  2. How a web crawler finds and visits pages
  3. Types of web crawlers
  4. What a web crawler should respect on other people's sites
  5. Crawling vs indexing
  6. Web crawler vs web scraper
  7. How to identify a web crawler in your logs
  8. Running your own crawler at scale
  9. What Is a Web Crawler? FAQ

What is a web crawler?

A web crawler is software that browses the web by following links, to find and download pages. "Crawling" is what it does: moving from page to page the way a spider moves along its web. The crawler itself does not decide what a page means; it collects pages, and other software indexes, analyzes or extracts data from them. In computing, "crawler" almost always means a web crawler (the word also names cranes, tracked vehicles and TV news tickers).

Every crawler has the same 6 parts:

PartWhat it does
SeedsThe URLs it starts from: a home page, a URL list, an XML sitemap
FrontierThe queue of URLs found but not fetched yet
Seen setThe URLs already fetched, so none is fetched twice
FetcherDownloads pages, at a polite rate per site
Link extractorTurns each page's links into absolute URLs for the frontier
StorageThe pages or the data taken from them, plus the crawl's own state

How a web crawler finds and visits pages

There is no central list of every page on the web, so a crawler discovers pages from 3 sources:

  1. Known URLs

    Its seed list and the pages it fetched in earlier crawls.

  2. Sitemaps

    XML files in which a site lists the URLs it wants crawled. robots.txt can point to them with a Sitemap: line.

  3. Links

    Every <a href> on every page it fetches. This is where most new URLs come from.

A page that no other page links to and no sitemap lists (an "orphan" page) is hard for any crawler to find.

Then the crawler repeats one loop until its queue is empty or it reaches a limit:

  1. Take the next URL from the frontier. A breadth-first crawler takes the oldest; a priority crawler takes the most important.
  2. Check robots.txt for that host (cached, refreshed at least every 24 hours) and skip the URL if it is disallowed for this crawler.
  3. Fetch the page, waiting long enough since the last request to the same host.
  4. Store the page or the fields you need from it.
  5. Extract the links, turn them into absolute URLs, drop duplicates and URLs outside the crawl's scope, and add the rest to the frontier.
  6. Repeat, and schedule revisits, so pages that change often are fetched again sooner.

A crawler that followed every link would never stop, so real crawlers set a scope (one site, one section, a list of domains), a depth limit and a page limit. They also skip URL traps: endless calendars, faceted filters and tracking parameters that create new URLs for the same page. For the architecture with working Python code, see how to build a web crawler and the Python web crawler guide; for crawling one site end to end, see how to crawl a website.

Types of web crawlers

Crawlers differ by what they crawl and why.

TypeWhat it doesExamples
Search engine crawlerDiscovers and refreshes pages across the whole web for a search indexGooglebot, Bingbot, Applebot
AI crawlerCollects pages to train AI models, or fetches pages to answer a user's questionGPTBot and OAI-SearchBot (OpenAI)
Open dataset crawlerBuilds public archives of the web for researchCCBot (Common Crawl)
Archive crawlerPreserves pages as they looked on a dateHeritrix, the Internet Archive's open-source crawler
SEO and site audit crawlerCrawls one site to find broken links, redirects, missing titles and duplicate pagesDesktop and cloud SEO crawlers
Focused crawlerFollows only links likely to lead to one topic, such as product pages or job adsCustom crawlers built with Scrapy or Crawlee
Incremental crawlerRevisits known pages to catch changes instead of recrawling everythingNews and price monitors

The crawler names and their purposes are documented by their operators: Google's overview of Google crawlers, Bing's crawlers, Applebot, OpenAI's bots, Common Crawl's CCBot and Heritrix (pages as published in October 2026). Tools for running your own crawls are compared in our guide to website crawler tools.

Easy Trial: 1 GB for $2.95.
Try for the price of 1 GB, no subscription, traffic never expires.

What a web crawler should respect on other people's sites

A polite crawler obeys robots.txt, slows down when the server asks, identifies itself and never goes past logins or technical blocks. robots.txt is a request to crawlers, not a lock: RFC 9309 says its rules "are not a form of access authorization" (§1), and listing a path in it makes that path public (§3).

robots.txt rules, with the numbers (RFC 9309)

The Robots Exclusion Protocol was standardized as RFC 9309 in September 2022.

RuleWhat the crawler doesRFC 9309
Group matchingFinds the group for its user agent, case-insensitive; falls back to User-agent: *§2.2.1
Allow vs DisallowThe most specific match (the longest path) wins; if an allow and a disallow are equivalent, allow wins§2.2.2
Wildcards* matches any characters, $ marks the end of the URL, # starts a comment§2.2.3
RedirectsFollows at least 5 consecutive redirects to the robots.txt file§2.3.1.2
4xx on /robots.txtThe file is "unavailable": the crawler may access anything§2.3.1.3
5xx or network errorThe file is "unreachable": the crawler must assume the whole site is disallowed§2.3.1.4
CachingDoes not use a cached copy for more than 24 hours, unless the file is unreachable§2.4
File sizeParses at least the first 500 KiB§2.5

Longest match in practice:

User-agent: *
Disallow: /shop/
Allow: /shop/public/
Disallow: /*?sessionid=

User-agent: GPTBot
Disallow: /

Sitemap: https://example.com/sitemap.xml

Here /shop/public/item-1 is allowed (the 13-character Allow beats the 6-character Disallow), /shop/cart is not, any URL with ?sessionid= is not, and GPTBot may fetch nothing. Google follows the same rules and documents its own limits: it caches robots.txt for up to 24 hours, follows at least 5 redirect hops, ignores content past 500 KiB, and treats every 4xx except 429 as "no robots.txt" (Google's robots.txt specification).

Crawl-delay, 429 and Retry-After

  • Crawl-delay is not part of RFC 9309. Some crawlers read it; Google says "other fields such as crawl-delay aren't supported" and offers no robots.txt delay at all (Google's robots.txt specification). Bing documents its own crawl-rate setting in Bing Webmaster Tools (Bing crawl control). If a file sets Crawl-delay: 10, a polite crawler waits 10 seconds between requests to that host.
  • No delay stated? Pace yourself anyway: one request at a time per host, and back off when responses slow down. That is the common practice, not a number from a standard.
  • 429 Too Many Requests and 503 Service Unavailable mean stop and wait. If the response carries Retry-After (seconds or a date), wait at least that long (MDN: 429); without it, double the wait after each one. More in 429 Too Many Requests.

A minimal check in Python's standard library:

Python
import time, urllib.robotparser, requests

UA = "ExampleCrawler/1.0 (+https://example.com/bot)"
rp = urllib.robotparser.RobotFileParser("https://example.com/robots.txt")
rp.read()

def polite_get(url, wait=1.0):
    if not rp.can_fetch(UA, url):
        return None                            # disallowed for this user agent
    time.sleep(rp.crawl_delay(UA) or wait)     # honor Crawl-delay if the site sets one
    r = requests.get(url, headers={"User-Agent": UA}, timeout=30)
    if r.status_code in (429, 503):
        retry = r.headers.get("Retry-After", "60")
        time.sleep(int(retry) if retry.isdigit() else 60)
    return r

One caveat: Python's urllib.robotparser applies rules in file order (the first match wins), not RFC 9309's longest match, so a file with overlapping Allow and Disallow rules can parse differently; it also treats a 401 or 403 on robots.txt as "disallow everything", where RFC 9309 treats every 4xx as "no rules". For strict RFC behavior, use a parser that implements it, such as Google's open-source robotstxt library.

Beyond robots.txt

  • An honest user agent with a contact URL; never pose as Googlebot or another known crawler.
  • Respect access controls: logins, paywalls, CAPTCHA pages and rate limits are the site saying no, whatever robots.txt says.
  • Crawl only what you need: a scope, a depth limit, a page limit, and no URL traps.
  • Cache and revisit by change rate, instead of refetching everything.
  • Personal and copyrighted data need care whatever the crawl rules; our guide is web scraping legal covers when a crawl is allowed.

Crawling vs indexing

Crawling finds and downloads a page; indexing analyzes it and decides whether to store it so it can be searched. Google describes 3 stages (Google Search Central: how Search works):

StageWhat happensWhat can stop the page
CrawlingGooglebot discovers the URL and fetches it; it may render the page's JavaScriptA robots.txt disallow, server errors, no links or sitemap pointing to it
IndexingGoogle analyzes the text, images and metadata, groups duplicates, and decides whether to store the pageA noindex tag or header, a duplicate of another page (canonical), low-quality content
ServingIndexed pages are ranked and shown for a queryRelevance and quality for that query

Three points that confuse site owners:

  • A robots.txt disallow does not remove a page from the index. Google says "a page that's disallowed in robots.txt can still be indexed if linked to from other sites", shown without a description (Google: robots.txt introduction).
  • To keep a page out of results, use noindex (a meta tag or an HTTP header), and leave the page crawlable: if robots.txt blocks it, Google never sees the noindex.
  • Crawled does not mean indexed. In Google Search Console, the URL Inspection tool shows whether a URL is crawled and indexed, and the Page indexing report lists statuses such as "Crawled - currently not indexed" and "Discovered - currently not indexed" (Search Console: Page indexing report).

Web crawler vs web scraper

A crawler finds pages; a scraper extracts data from them. Most data projects use both: the crawler builds the URL list, the scraper reads the fields from each page. The full comparison, with when to use which, is in our guide on web crawling vs web scraping.

How to identify a web crawler in your logs

Crawlers announce themselves in the User-Agent header, such as Googlebot or bingbot, but anyone can copy that string. To check that a visit really comes from a search engine, do a reverse DNS lookup on the IP, check that the host name belongs to the search engine's domain, then do a forward lookup to confirm it resolves back to the same IP. Google documents this method for Googlebot (Google Search Central: verifying Googlebot), and some operators also publish their IP ranges.

Running your own crawler at scale

A crawler sends many requests to one site, so it meets the same limits as any scraper: rate limits per IP, blocks on IP ranges with a poor reputation, and CAPTCHAs when traffic looks automated. For a few hundred pages, a polite delay is enough. For large crawls:

  • Spread requests over many IPs. Rotating proxies give each request a new IP, and a sticky session keeps one IP for steps that must share it, such as paging through search results. Spreading load is not a reason to ignore robots.txt or a site's 429s.
  • Use datacenter IPs where the site allows them. Rotating datacenter proxies cost from $0.22/GB at volume; residential proxies suit sites that block datacenter ranges.
  • Estimate the traffic: pages × average page size. 50,000 pages of 150 KB is about 7.5 GB, which costs $22.13 at $2.95/GB (the 1–9 GB residential tier).

ProxyField works with Scrapy, Crawlee, Playwright, Puppeteer, Selenium and Python requests over HTTP, HTTPS and SOCKS5, with unlimited concurrent threads, country, region and city targeting, and sticky sessions from 30 s to 36 h. You pay per GB with no subscription, the traffic never expires, and all purchases are final. Cost per job is worked out on proxies for web scraping.

What Is a Web Crawler? FAQ

Do I need proxies to run a web crawler?

ProxyField proxies matter once a crawl sends thousands of requests to one site: a polite crawl of a few hundred pages needs none, but at volume one IP runs into rate limits. Rotating residential IPs from 412M+ addresses, at $2.95/GB for 1 GB down to $1.95/GB, spread the requests; 50,000 pages of 150 KB is about 7.5 GB. Proxies do not change the rules: robots.txt and a site's 429s still apply.

What is a web crawler, and how does it find and visit pages across the internet?

A web crawler is a program, also called a spider or bot, that finds pages by starting from known URLs and sitemaps, downloading each page, extracting its links and queuing the new ones. Before each fetch it checks the site's robots.txt and waits between requests to the same host. Pages with no inbound links and no sitemap entry are hard for any crawler to find.

What should a web crawler respect when it visits other people's sites, like robots.txt rules and crawl delays?

It should obey robots.txt for its user agent (RFC 9309: the longest matching rule wins, and the file is refreshed at least every 24 hours), wait between requests, and stop on 429 or 503 for as long as Retry-After says. Crawl-delay is not in RFC 9309 and Google ignores it, but a polite crawler honors it where a site sets it. It should also send an honest user agent and never go past logins or technical blocks.

What's the difference between crawling and indexing when a search engine like Google processes a website?

Crawling is Googlebot finding and fetching the page; indexing is Google analyzing it and deciding whether to store it for search. A page can be crawled and not indexed, for example because of a noindex tag, a duplicate or low quality, and Search Console then shows "Crawled - currently not indexed". A robots.txt disallow stops crawling but does not by itself remove a URL from the index.

What is a crawler?

In computing, a crawler is a bot that moves through websites by following links, to discover and download pages. The same word also names tracked vehicles and cranes, but online it means a web crawler, also called a spider.

What is web crawling?

Web crawling is the automated discovery of pages: starting from some URLs, fetching them, extracting their links and repeating until the crawl reaches its scope or limit. It produces a list of URLs and their content, which search engines index and data teams pass to scrapers.

How does a web crawler work?

It takes a URL from its queue, checks the site's robots.txt, downloads the page after a polite delay, stores it, extracts the links, adds new in-scope links to the queue and repeats. A seen set keeps it from fetching the same URL twice, and limits on depth and page count keep it from running forever.

Does Google support Crawl-delay in robots.txt?

No. Google's robots.txt specification supports 4 fields (user-agent, allow, disallow and sitemap) and says crawl-delay is not supported. Crawl-delay is not part of RFC 9309 either, although some other crawlers read it.

Does blocking a page in robots.txt keep it out of Google?

Not reliably: Google says a page disallowed in robots.txt can still be indexed if other sites link to it, and it then shows without a description. To keep a page out of results, use a noindex meta tag or header and leave the page crawlable, or put it behind a login.

What is web crawling used for?

Building search engine and AI indexes, archiving the web, auditing a site for broken links and SEO problems, finding every product or listing URL on a site before scraping it, and monitoring pages for changes such as new articles or price updates. Most data projects crawl first to build a URL list, then scrape the pages on it.

Show 5 more questionsShow fewer questions

What are examples of web crawlers?

Googlebot, Bingbot and Applebot crawl for search engines; GPTBot and OAI-SearchBot are OpenAI's crawlers; CCBot builds the Common Crawl open dataset; Heritrix is the Internet Archive's crawler. Developers build their own with frameworks such as Scrapy and Crawlee.

Is a web crawler a bot?

Yes. A crawler is a bot, meaning software that makes web requests automatically. Not every bot is a crawler, though: chatbots, monitoring bots and scrapers that fetch a fixed list of URLs do not discover pages by following links.

What types of web crawlers are there?

Search engine crawlers, AI crawlers, open dataset and archive crawlers, SEO and site audit crawlers, focused crawlers that follow only one topic, and incremental crawlers that revisit known pages to catch changes. They differ in scope, revisit schedule and what they store.

How can I identify a web crawler?

Read the User-Agent header in your server logs, then verify it: a reverse DNS lookup on the IP should return a host name in the operator's domain, and a forward lookup of that name should return the same IP. Google documents this check for Googlebot, and some operators publish their IP ranges.

What is polite crawling?

Crawling that respects the site: obeying robots.txt, sending one request at a time per host with a delay, backing off on 429 or 503 responses, crawling only the pages you need and identifying your crawler honestly. It keeps the load low for the site and your crawler unblocked.

Easy Trial: 1 GB for $2.95.

Try for the price of 1 GB, no subscription, traffic never expires.