Robots.txt Tester
Crawler path decisions
{{ summaryNote }}
{{ summaryValue }}
{{ exportStatus }}
| Path | Decision | Deciding rule | Group / rule line | Pattern octets | Copy |
|---|---|---|---|---|---|
| {{ row.path }} | {{ row.decision }} {{ row.reason }} | {{ row.directive ? row.directive + ': ' + row.rule : '—' }} | {{ row.line ? row.group_token + ' · ' + row.group_line + ' / ' + row.line : '—' }} | {{ row.specificity }} |
{{ exportStatus }}
The chart renderer is unavailable. Path decisions retain the rule evidence.
{{ exportStatus }}
{{ sourceText ? sourcePreview : fetchLabel }}{{ sourcePreviewNote }}
Effective policy URL: {{ asyncResult.effective_url }}
{{ exportStatus }}
| Line | Reason | Record (first 512 characters) | Copy |
|---|---|---|---|
| {{ row.line }} | {{ row.kind }} | {{ row.text }} | |
| {{ computation.values.diagnostic_count ? 'No preview records available.' : 'No ignored records in this policy.' }} | |||
| {{ computation.values.diagnostic_count }} ignored records; first 200 shown. | |||
Similar tools
- Robots.txt Generator Generate a robots.txt policy with crawler-specific path rules and sitemap declarations plus import checks and warnings before publication.
- Hypertext Transfer Protocol (HTTP) Redirect Checker Trace a public HTTP redirect chain hop by hop to identify loops and HTTPS downgrades, compare timing and generate a replayable cURL command.
- Hypertext Transfer Protocol (HTTP) Header Checker Check a public URL’s HTTP headers across redirects and review security, cache behavior, browser state and cross-origin exposure.
- Sitemap URL Extractor Extract page and child-sitemap URLs from XML, text files or a public source and produce a normalized crawl list with row-level audit evidence.
Search crawlers follow links and may revisit many variations of the same content, such as product filters or internal search pages. A robots.txt file gives these automated clients instructions about which URL paths to crawl. It can discourage requests to repetitive areas while leaving useful pages and their supporting resources available to participating crawlers.
The policy belongs at the site's root as /robots.txt. Its scope is an origin, meaning the combination of scheme, hostname and port. An HTTPS site, its HTTP counterpart and a separate subdomain can therefore have different policies. A file placed inside a subdirectory does not replace the root policy for that directory.
Rules are organized into groups. Each group names one or more crawlers through User-agent records, followed by Allow and Disallow rules. The crawler's identifying name is its product token, such as ExampleBot. A group addressed to * supplies fallback instructions for crawlers without a matching named group.
Path rules can cover more than one page. For example, a restriction on /catalog/ also covers paths below that prefix, while a more specific Allow rule can create an exception. Capitalization, trailing slashes, query strings and encoded characters can change which rule matches. The decision comes from the applicable groups and matching patterns, rather than simply the first rule in the file.
- Crawling concerns retrieving a URL. Permission under robots.txt does not guarantee that a crawler will visit it.
- Indexing concerns inclusion in search results. A blocked URL may still be discovered through links and appear in results without its content being crawled.
- Access control concerns who can retrieve protected content. Robots.txt provides no authentication or authorization, and its public list of paths can reveal locations that were otherwise hard to discover.
A crawl restriction can also prevent a search engine from reading a page's noindex directive. Google needs access to the page to see that instruction in its metadata or response header. Private content needs appropriate access controls, while search visibility needs the relevant indexing instructions.
A policy check describes the instructions for a particular crawler and URL. A crawler may have an older policy cached, encounter a retrieval error or apply additional behavior of its own. Those differences matter when investigating why an actual visit or search result does not match the current policy text.
How to Use This Tool:
Choose whether to inspect a public site's current policy or test complete policy text before publishing it. The initial setup contains example values that you can replace.
- Choose Policy source. Use Fetch live robots.txt for retrieval, or Test pasted policy locally and replace the sample in Pasted robots.txt with the complete text you want to test.
- Enter the site's HTTP or HTTPS origin in Public origin or Origin for pasted policy. Supply the scheme and host, with a port if needed, without a page path, query, fragment or credentials.
- Enter one Crawler product token. The default is
Googlebot. A value such asGooglebot/1.0must be changed toGooglebot, because the field accepts a product token rather than a complete identification string. - Enter Paths to test, one per line, with between 1 and 20 entries. Use root-relative paths such as
/catalog/?sort=priceor full URLs on the selected origin. Include the query you want checked and remove any fragment. - Select Fetch robots.txt in live mode. No policy request is sent until you select it. Pasted mode updates the decisions locally as you edit, without a fetch action.
If the summary says Check inputs, correct the first displayed warning. If a live request fails or is cancelled, retry before relying on a report from that request.
- Review Path decisions and its reasons. For an unexpected rule decision, compare the indicated group and rule lines with Policy source. Changing the origin or policy source clears a fetched result; changing only the crawler or paths rechecks the policy already available.
Interpreting Results:
Read each Decision together with its reason. Allowed can come from an Allow rule, the absence of a matching restriction or the stated HTTP 4xx assumption. Disallowed can come from a rule or an unreachable-policy assumption. Indeterminate means the retrieval did not provide a complete usable policy for a decision.
For a rule-based result, Group / rule line identifies the group's first User-agent line and the deciding rule's line in the policy. A missing Deciding rule is expected for default permissions and retrieval-based assumptions. Confirm an unexpected result against the actual policy text, especially when a successful response contains few usable rules.
Rule competition compares the winning pattern with the strongest matching pattern that would give the opposite decision. Equal lengths can produce an Allow tie. A zero opposite value means there is no matching opposite rule; the chart is not a confidence score or a measure of how likely a crawler is to visit.
Ignored records distinguishes malformed rules from unsupported records such as Sitemap and Crawl-delay. Unsupported records do not determine these path decisions, but may have meaning to other crawlers or systems. The total includes every ignored record, while the display keeps the first 200 records and the first 512 characters of each.
Policy source initially previews 30 lines. Under Advanced, Source preview offers 10, 30 or 100 lines, with each displayed line limited to 2,048 characters. Matching and policy text copies or downloads use the complete accepted policy, including text outside that preview.
Selecting a named crawler chooses its policy groups using the same rules for every token. It does not reproduce that crawler's cache, retries or indexing decisions. The tested pages are not fetched, so an allowed result does not confirm that a page exists or responds successfully. Check the page response and actual crawler records separately when diagnosing live crawling.
Technical Details:
The Robots Exclusion Protocol, specified in RFC 9309, separates crawler-group selection from path matching. A very specific rule has no effect if it belongs only to a group that does not apply to the selected crawler.
Rule Core
Once a complete pasted or fetched policy is available, the decision follows this order.
- Select every group containing an exact, case-insensitive match for the product token and combine its rules. If there are no exact matches, combine the groups addressed to
*. Separate wildcard groups are not added when an exact match exists, even if the matching named group has no usable rules. - Permit the bare path
/robots.txtimplicitly. A query-bearing path such as/robots.txt?version=1proceeds through ordinary rule matching. - Compare each selected rule with the normalized path and query, beginning at the first path character. Path comparisons are case-sensitive, so
/Adminand/adminremain different. - Choose the matching rule with the greatest normalized pattern length. If Allow and Disallow tie at that length, Allow wins. For tied rules with the same directive, the earlier source line supplies the displayed evidence.
- Allow the path if no selected rule matches. This also covers an empty complete policy, a matching group without usable rules, or the absence of both an exact-token group and a wildcard group.
Directive names are case-insensitive. Consecutive User-agent records can share the following rules, and another User-agent record after an Allow or Disallow record begins a new group. Blank lines, comments and unsupported records do not split an existing group. A leading Unicode byte-order mark is ignored.
Each # begins a comment extending to the end of its line. Empty Allow or Disallow values impose no restriction and are reported as ignored. Rules before a User-agent group, malformed records and invalid patterns are also ignored while the remaining usable rules are retained. Recognized path patterns start with / or * and cannot contain raw spaces, control characters or malformed percent escapes.
Prefixes, wildcards and query strings
A plain pattern matches a prefix, not a directory boundary. A wildcard broadens the match, while a final dollar sign requires the match to reach the end of the path and query.
| Pattern | Matches | Boundary to check |
|---|---|---|
/admin |
/admin, /admin/help and /administrator |
A prefix has no automatic trailing slash or word boundary. |
/admin/ |
/admin/help |
The bare path /admin does not match. |
/report$ |
/report |
/report/ and /report?format=pdf do not match. |
/*.gif$ |
/logo.gif and /images/logo.gif |
* matches zero or more characters. /logo.gif?size=small fails the end match. |
These patterns are not regular expressions. A $ at the end of a pattern acts as the end marker. Use %24 when a dollar sign should match as text.
Unicode, percent encoding and pattern length
Equivalent spellings are compared using normalized URL octets. An octet is a byte. Percent-encoded unreserved ASCII letters, digits and -._~ are decoded for comparison. Non-ASCII text is represented through its UTF-8 percent-encoded bytes, while escaped reserved separators retain their distinction from literal separators.
| Forms compared | Matching consequence |
|---|---|
/bar and /%62%61%72 |
Equivalent after decoding the unreserved letters. |
/café and /caf%C3%A9 |
Equivalent UTF-8 representations. |
/a%2Fb and /a/b |
Different. The encoded slash remains distinct from a path separator. Hexadecimal case in %2F or %2f does not change the encoded byte. |
/file%2A.txt$ and /price%24$ |
The encoded star and dollar are literals. These patterns match /file*.txt and /price$, respectively. |
/café and /cafe%CC%81 |
Different. No Unicode normalization is applied, so a precomposed accented letter and an equivalent combining sequence remain distinct. |
Pattern octets measures the normalized percent-encoded comparison pattern. An ordinary ASCII character contributes one, and each retained percent escape contributes three. Wildcard stars and a terminal dollar sign also each contribute one. Both /café and /caf%C3%A9 therefore have a count of 10, while /*.gif$ has a count of 7. Use this count for rule precedence; visible character counts and raw UTF-8 file sizes measure different things.
The displayed Path contains the path and query after URL parsing. Dot segments can be resolved during that parsing, so the displayed path is the value used for the comparison. Fragments are rejected rather than silently removed.
Live retrieval and fetch outcomes
Live retrieval starts at the selected origin's root robots.txt and follows at most five redirects. A policy reached through permitted redirects is applied to the original origin, even if the final policy address differs. Effective policy URL shows the address reached when one is available.
The retrieval outcome is checked before path rules. In the following table, HTTP statuses belong to the robots.txt request, not to any tested page.
| Retrieval outcome | Decision here | Meaning |
|---|---|---|
| Complete accepted HTTP 2xx response | Apply the policy rules | The response must contain valid UTF-8 and fit the size limits. HTTP 206 and responses with a Content-Range header are excluded. |
| HTTP 400 to 499 | Allowed | The checker chooses the RFC's optional permission when the policy is unavailable. This applies to the entire range, including 429. |
| HTTP 500 to 599 or a network failure reported as unreachable | Disallowed | Complete disallow is assumed for an unreachable policy. No Disallow line was obtained. |
| More than five redirects or a blocked non-public destination | Indeterminate | No complete policy was obtained for interpretation. |
| Reported transport size limit or fetch deadline | Indeterminate | A retrieval limit leaves the policy unresolved. |
| Invalid UTF-8, a partial response or another unexpected HTTP response | Indeterminate | Incomplete or unusable text is not treated as an empty policy. |
These retrieval decisions apply before the implicit permission for the bare robots.txt path.
An input error, cancellation or failure to obtain a valid response from the checking service can leave no completed path report at all. The absence of a report supplies no permission decision. There is no fallback to an older successful policy after a new fetch fails.
Input boundaries and complete-policy limits
Validation keeps each batch tied to one origin and one crawler. Limits apply to the entered text before matching.
| Input | Accepted boundary |
|---|---|
| Origin | An HTTP or HTTPS origin, up to 2,048 characters, with an optional root slash. Credentials, additional paths, queries, fragments, backslashes and whitespace are rejected. |
| Crawler product token | 1 to 80 ASCII letters, hyphens or underscores. Digits, version strings and * are not accepted in this field. |
| Test paths | 1 to 20 nonblank entries, each at most 2,048 UTF-8 bytes after surrounding whitespace is trimmed. Full URLs must have the selected scheme, host and port. Protocol-relative URLs, credentials, fragments, backslashes, raw spaces, control characters and malformed percent escapes are rejected. |
| Complete policy | At most 2 MiB, or 2,097,152 UTF-8 bytes, including the boundary. Invalid Unicode in pasted text is rejected. Empty complete text is valid. |
All accepted policy text participates, including rules beyond 500 KiB. An oversized policy is rejected as a whole rather than tested from a shortened prefix. The 2 MiB limit belongs to this checker and does not establish how much text a particular crawler will process.
Privacy Notes:
Rule matching takes place in the browser in both modes. Live mode additionally retrieves the public policy when requested.
- The live fetch sends only the selected origin as its submitted input to the retrieval service. The crawler token, test paths and pasted policy are not included in that request. Live retrieval is for public destinations and does not provide authenticated access to private sites.
- Pasted policy text is processed in the current tab and is not submitted by the local test. Shared setup links exclude pasted policy text, fetched policy text and fetched results.
- The shareable setup includes the origin, policy mode, crawler token, test paths and preview length. Paths and query values can therefore be disclosed through a shared page URL. Remove sensitive values before sharing it.
Worked Examples:
Checking the sample directory exception
With the supplied pasted policy, Googlebot and the five sample paths, the summary shows 2 disallowed. The rule on line 2 blocks /admin/private with a pattern length of 7. For /admin/help, the Allow rule on line 3 wins with a length of 11 against that same restriction. The other blocked sample is /images/logo.gif, decided by line 4. Adding /admin/helpful also produces Allowed, because the help exception is a prefix. If only the exact help path should be excepted, test Allow: /admin/help$ and check any query-bearing help URLs separately.
Combining groups before resolving a tie
Paste four lines in order: User-agent: ExampleBot, Disallow: /same, User-agent: examplebot and Allow: /same. With ExampleBot as the token and /same as the path, both groups apply despite their different capitalization. The result is Allowed, decided by line 4, with both matching patterns measuring 5 octets. Removing the second group changes the result to Disallowed. This makes repeated groups worth checking before concluding that a restriction has no exception.
References:
- RFC 9309: Robots Exclusion Protocol, RFC Editor, September 2022.
- Introduction to robots.txt, Google Search Central.
- Block Search indexing with noindex, Google Search Central, December 10, 2025.