How the tester decides allowed or blocked
The tool fetches /robots.txt from the root of the host you enter, then applies the matching rules from RFC 9309 (the Robots Exclusion Protocol) in your browser, so changing the path or user-agent gives an instant answer without another fetch.
- Parse. Comments (
#to end of line) are stripped. ConsecutiveUser-agentlines form one group, and theAllowandDisallowlines after them belong to that group.Sitemaplines are collected separately. - Pick a group. Every group naming your selected crawler is used, merged into one rule set if the file repeats the user-agent (RFC 9309). Googlebot-Image, Googlebot-News and Googlebot-Video use a Googlebot group if they have no group of their own. If nothing names the crawler, the
*group is used. If there is no*group either, everything is allowed. - Match patterns. Percent-encoding is normalised first on both the path and the patterns (non-ASCII becomes UTF-8
%XX,%7Ebecomes~, other triples are upper-cased), so equivalent spellings match. A pattern matches from the start of the path.*matches any run of characters and a trailing$anchors the end. Every other character, including?and., is matched literally, soDisallow: /search?q=blocks/search?q=shoesandDisallow: /*?blocks any URL with a query string. An emptyDisallow:blocks nothing. - Longest match wins. The rule with the longest pattern (not counting the
$) is applied. If an Allow and a Disallow tie on length, Allow wins.
Worked example
Suppose the file contains this group for *:
User-agent: *
Disallow: /private/
Allow: /private/press/
Disallow: /*.pdf$
Allow: /page
Disallow: /page
| Path tested | Verdict | Why |
|---|---|---|
/private/report.html | Blocked | Disallow: /private/ is the only match (9 characters) |
/private/press/kit | Allowed | Allow: /private/press/ (15) beats Disallow: /private/ (9) |
/files/a.pdf | Blocked | matches /*.pdf$ |
/files/a.pdf?x=1 | Allowed | the $ anchor fails because of the query string |
/page | Allowed | Allow and Disallow tie at 5 characters, so Allow wins |
Where this tester is simpler than a real crawler
- A fixed list of user-agents. You can pick Googlebot, Googlebot-Image, Googlebot-News, Googlebot-Video, Bingbot, GPTBot or
*. Other crawlers with special handling, such as Google's AdsBot (which ignores*groups), are not modelled. - The path box is forgiving. You can enter a path, a path with a query string, or a full URL; only the path and query are tested, and a missing leading slash is added.
- Status handling. A found file requires HTTP 200. A 4xx (such as 404) is shown as "not found" and treated as allow-all. A 5xx (and 429, as Google treats it) means the file is unreachable, and RFC 9309 says crawlers must then assume everything is disallowed, so the tester shows BLOCKED with that explanation. Google falls back to allow-all if the errors last more than about 30 days. Either way a 5xx is a problem to fix.
- Only the first 200 KB of the file is read, and the file is fetched from the host you type, over https. Redirects are followed for up to 10 hops, and every hop is checked against the same safety rules as the first request (a redirect to a private or internal address is refused with "Redirect blocked"). The URL shown above the file is the final one after redirects, so a request for
example.comthat lands onwww.example.comshows thewwwaddress.wwwand non-wwwcan serve different files.
Disallow controls crawling, not indexing. To write a file, use the robots.txt generator, and list your sitemap with the XML sitemap generator.