| Internet-Draft | cbcp | October 2026 |
| Illyes, et al. | Expires 25 April 2027 | [Page] |
This document describes best practices for web crawlers.¶
This note is to be removed before publishing as an RFC.¶
Source for this draft and an issue tracker can be found at https://github.com/garyillyes/cbcp.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 25 April 2027.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.¶
Automatic clients, colloquially referred to as crawlers and bots, are used to access web resources, including indexing for search engines or, more recently, training data for new artificial intelligence (AI) applications. As crawling activity increases, automatic clients must behave appropriately and respect the constraints of the resources they access. This includes clearly documenting how they can be identified and how their behavior can be influenced. Therefore, crawler operators are asked to follow the best practices for crawling outlined in this document.¶
For the purposes of this document, a crawler is an automated HTTP [HTTP-SEMANTICS] client that retrieves resources across one or more web sites without direct human initiation of individual requests. A crawler discovers URIs during retrieval and schedules them for later processing. It relies on algorithmic prioritization and protocol-level instructions such as the Robots Exclusion Protocol [REP] to govern its behavior.¶
Note that these best practices are intended for crawlers, and are not necessarily appropriate for all automated clients (all "bots"), particularly user-directed AI agents, but other (non-crawler) bots may choose to adopt similar practices. Furthermore, there are valid reasons why some legitimate crawlers cannot or should not be expected to adopt these practices. For example, while self-declared research crawlers, including privacy and malware discovery crawlers, and contractual crawlers, are welcome to adopt these practices, due to the nature of their relationship with sites, they may choose not to follow all of these practices.¶
Crawler operators that adopt these voluntary practices are encouraged to engage with efforts to develop new standards and practices for bots, and to revisit the recommended best practices as the state of the art evolves.¶
The following best practices are already applied by a vast majority of large-scale crawlers on the Internet. Crawlers SHOULD:¶
Support and respect the Robots Exclusion Protocol.¶
Be easily identifiable through their user agent string.¶
Not interfere with the regular operation of a site.¶
Support caching directives.¶
Expose the ranges they are crawling from in a standardized format.¶
Expose a page that explains how the crawling can be blocked, whether the page is rendered, and how the crawled data is used.¶
Crawlers SHOULD support the REP as defined in Section 2.2.1 of [REP] to allow site owners to opt out from crawling.¶
Especially if the website chooses not to use a robots.txt file as defined
by the REP, crawlers further need to respect the X-robots-tag in the HTTP
header.¶
As outlined in Section 2.2.1 of [REP] (Robots Exclusion Protocol; REP),
the HTTP request header User-Agent SHOULD clearly identify the crawler,
usually by including a URL that hosts the crawler's description. For example:¶
User-Agent: Mozilla/5.0 (compatible; ExampleBot/0.1; +https://www.example.com/bot.html)¶
This is already a widely accepted practice among crawler operators. To remain
compliant, crawler operators MUST include unique identifiers for their crawlers
in the case-insensitive User-Agent header, such as
"contains 'googlebot' and 'https://url/...'". Additionally, the name SHOULD
clearly identify both the crawler owner and its purpose as much as reasonably
possible.¶
Crawler operators that use cryptographic authentication SHOULD use a distinct
Signature-Agent URL, and therefore a distinct key directory, for each crawler
purpose, as described in Section 6.5 of [HTTPSIG-PROTOCOL]. This is the
cryptographic counterpart of the purpose identification in the User-Agent
header.¶
Depending on a site's setup (computing resources and software efficiency) and its size, crawling may slow down the site or even take it offline altogether. Crawler operators SHOULD ensure that their crawlers are equipped with back-out logic that relies on at least the standard signals defined by Section 15.6 of [HTTP-SEMANTICS], preferably also additional heuristics such as a change in the relative response time of the server.¶
Therefore, crawlers SHOULD log already visited URLs, the number of requests sent to each resource, and the respective HTTP status codes in the responses, especially if errors occur, to prevent repeatedly crawling the same source. Using the same data, crawlers SHOULD, on a best effort basis, crawl the site at times of the day when the site is estimated to have fewer human visitors.¶
Generally, crawlers SHOULD avoid sending multiple requests to the same resources at the same time and SHOULD limit the crawling speed to prevent server overload, if possible, following the limits outlined in [REP]. Additionally, resources SHOULD NOT be re-crawled too often. Ideally, crawlers SHOULD restrict the depth of crawling and the number of requests per resource to prevent loops.¶
Crawlers SHOULD NOT attempt to bypass authentication or other access restrictions, such as when login is required, CAPTCHAs are in use, or content is behind a paywall, unless explicitly agreed upon with the website owner.¶
Crawlers SHOULD primarily access resources using HTTP GET requests, resorting to other methods (e.g., POST, PUT) only if there is a prior agreement with the publisher or if the publisher's content management system automatically makes those calls through client side code (e.g., JavaScript). Generally, the load caused by executing client side code should be carefully considered or even avoided whenever possible.¶
[HTTP-CACHING] HTTP caching removes the need of repeated access from crawlers to the same URL.¶
To complement the [REP], crawler operators SHOULD publish the IP ranges they have allocated for crawling in [JAFAR] format, and keep this information reasonably up-to-date, according to the specification.¶
The resource containing the IP addresses SHOULD be linked from the page
describing the crawler using the client-ranges relation. To facilitate
efficient machine discovery. This relation SHOULD be provided via an HTTP Link
header [HTTP-LINK] or as a <link> element in the page's HTML metadata
section (as defined in [HTML]). For example:¶
<link rel="client-ranges" href="https://example.com/crawlerips.json">¶
Crawlers SHOULD be easily identifiable through their user-agent string, and
they SHOULD explain how the data they collect will be used. In practice, this is
usually done via the documentation page linked in the crawler's user agent.
Additionally, the documentation page SHOULD include a contact address for the
crawler owner.¶
The documentation SHOULD also provide an example [REP] file to block the crawler and a method for verifying [REP] files.¶
If the crawler has exempted itself of these best practices, the documentation page SHOULD describe the reason for that.¶
All endpoints hosting identification, documentation, and IP range data must be publicly and highly available, and served with minimal latency for programmatic access.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
The best practices described in this document, as well as opt-out mechanisms
such as [REP] and X-robots-tag, are voluntary and do not constitute access
control or content security measures. Malicious or non-conformant clients can
ignore these practices. To restrict access to sensitive resources, website
owners SHOULD employ appropriate security mechanisms at the application or
transport layer, such as HTTP Authentication [HTTP-SEMANTICS].¶
The User-Agent header field is unauthenticated and trivially spoofed. Website
operators MUST NOT rely solely on the User-Agent string to grant privileged
access or bypass security controls. When verifying a crawler's identity,
website operators SHOULD corroborate the request's source IP address against
the crawler operator's published IP ranges [JAFAR] or use cryptographic
authentication mechanisms where available.¶
Endpoints hosting crawler documentation, client-ranges link relations
[HTTP-LINK], and IP range files [JAFAR] SHOULD be served over HTTPS using
Transport Layer Security (TLS) so that consumers can verify the authenticity
and integrity of the published IP ranges before using them in access control
or rate-limiting decisions.¶
Even legitimate crawlers can inadvertently degrade website availability or cause a denial of service if they crawl too aggressively, become trapped in infinite URI spaces, or trigger expensive server-side or client-side processing. Implementing the back-out, rate-limiting, and caching practices in this document mitigates, but does not eliminate, this risk.¶
The security considerations of [HTTP-SEMANTICS], [HTTP-CACHING], [HTTP-LINK], [REP], and [JAFAR] also apply.¶
This document has no IANA actions.¶
TODO acknowledge.¶