What Is a Web Crawler?
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
| Question | Short 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
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:
| Part | What it does |
|---|---|
| Seeds | The URLs it starts from: a home page, a URL list, an XML sitemap |
| Frontier | The queue of URLs found but not fetched yet |
| Seen set | The URLs already fetched, so none is fetched twice |
| Fetcher | Downloads pages, at a polite rate per site |
| Link extractor | Turns each page's links into absolute URLs for the frontier |
| Storage | The 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:
-
Known URLs
Its seed list and the pages it fetched in earlier crawls.
-
Sitemaps
XML files in which a site lists the URLs it wants crawled. robots.txt can point to them with a
Sitemap:line. -
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:
- Take the next URL from the frontier. A breadth-first crawler takes the oldest; a priority crawler takes the most important.
- Check robots.txt for that host (cached, refreshed at least every 24 hours) and skip the URL if it is disallowed for this crawler.
- Fetch the page, waiting long enough since the last request to the same host.
- Store the page or the fields you need from it.
- Extract the links, turn them into absolute URLs, drop duplicates and URLs outside the crawl's scope, and add the rest to the frontier.
- 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.
| Type | What it does | Examples |
|---|---|---|
| Search engine crawler | Discovers and refreshes pages across the whole web for a search index | Googlebot, Bingbot, Applebot |
| AI crawler | Collects pages to train AI models, or fetches pages to answer a user's question | GPTBot and OAI-SearchBot (OpenAI) |
| Open dataset crawler | Builds public archives of the web for research | CCBot (Common Crawl) |
| Archive crawler | Preserves pages as they looked on a date | Heritrix, the Internet Archive's open-source crawler |
| SEO and site audit crawler | Crawls one site to find broken links, redirects, missing titles and duplicate pages | Desktop and cloud SEO crawlers |
| Focused crawler | Follows only links likely to lead to one topic, such as product pages or job ads | Custom crawlers built with Scrapy or Crawlee |
| Incremental crawler | Revisits known pages to catch changes instead of recrawling everything | News 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.
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.
| Rule | What the crawler does | RFC 9309 |
|---|---|---|
| Group matching | Finds the group for its user agent, case-insensitive; falls back to User-agent: * | §2.2.1 |
| Allow vs Disallow | The 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 |
| Redirects | Follows at least 5 consecutive redirects to the robots.txt file | §2.3.1.2 |
| 4xx on /robots.txt | The file is "unavailable": the crawler may access anything | §2.3.1.3 |
| 5xx or network error | The file is "unreachable": the crawler must assume the whole site is disallowed | §2.3.1.4 |
| Caching | Does not use a cached copy for more than 24 hours, unless the file is unreachable | §2.4 |
| File size | Parses 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.xmlHere /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-delayaren'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 setsCrawl-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:
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 rOne 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):
| Stage | What happens | What can stop the page |
|---|---|---|
| Crawling | Googlebot discovers the URL and fetches it; it may render the page's JavaScript | A robots.txt disallow, server errors, no links or sitemap pointing to it |
| Indexing | Google analyzes the text, images and metadata, groups duplicates, and decides whether to store the page | A noindex tag or header, a duplicate of another page (canonical), low-quality content |
| Serving | Indexed pages are ranked and shown for a query | Relevance 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 thenoindex. - 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.
Related pages
Easy Trial: 1 GB for $2.95.
Try for the price of 1 GB, no subscription, traffic never expires.