Back to Blog

GEO Checker: Test Encoded Paths Against Robots Rules

Written by
Elsa JiElsa Ji
··9 min read
GEO Checker: Test Encoded Paths Against Robots Rules

A technical SEO analyst checks a product URL against the site’s crawl policy and gets an allowed result. An engineer repeats the exercise with the encoded path recorded by the server and gets a different answer. The browser makes both addresses look similar, but the test inputs and matching procedure haven’t been documented well enough to resolve the disagreement.

A GEO checker investigation should preserve the path being tested before applying a convenient normalization. The next decision is which rule applies to that input, how the parser handled its encoding, and whether the observed request actually used the same form. A small boundary-case test set can answer those questions more clearly than another undifferentiated pass score.

Define the Path Under Test in a GEO Checker

Start with the actual test input and the policy file used to evaluate it. Record the full URL privately where appropriate, then separate the host, scheme, port, and matching input in the review record. Don’t replace the original with a decoded display string before the investigation begins.

Define the target crawler or product token. A path result without its applicable user-agent group is incomplete because different groups can carry different rules. Keep the selected group and the reason for selecting it beside the path result.

Google’s robots documentation describes the scope of a robots file in terms of host, protocol, and port. Check that scope before debugging character encoding. A correctly evaluated path against the wrong host’s file still answers the wrong access question.

Preserve the input before trying to simplify it.

Use a synthetic example domain for shared tests. The point is to make the matching procedure inspectable, not to disclose private paths or production query parameters. Keep restricted request evidence in the system approved for that purpose.

Separate URL Display From Matching Inputs

A browser’s displayed address and a parser’s comparison input can differ. Percent encoding represents octets, and the comparison rules don’t permit indiscriminately replacing every encoded sequence with a visible character. Record the transformation the test actually applies.

RFC 9309 distinguishes unreserved ASCII decoding from reserved or otherwise excluded octets when comparing paths. In particular, treating an encoded slash as if it were necessarily an ordinary path separator can change the question being tested. Link the expected behavior to the documented rule rather than an intuition that the URLs look equivalent.

Build the record with separate columns for the captured form, comparison form, and transformation reason. That keeps a reviewer from confusing an intentional protocol step with a display convenience. Preserve letter case as another explicit test dimension.

Don’t use server routing equivalence as a substitute for robots matching. An application may send two requests to the same content while the matching inputs remain different. Record the application response as an additional observation rather than silently rewriting the policy test around it.

A useful diagnostic question is whether two systems received the same input. If one test used a copied address-bar rendering and another used a raw log field, compare those strings first. You may discover an input mismatch before needing to investigate parser behavior at all.

Display characters and encoded octets travel on separate comparison tracks.

Build a Focused Encoding Test Set

Choose a small set of cases that expose a specific boundary. Include an ordinary path, an unreserved encoded character, a reserved encoded character, a case variation, and a neighboring path that shouldn’t inherit the intended exception. Keep each case tied to a stated expectation.

The table below is an original synthetic test fixture. Assume one applicable group contains Disallow: /catalog/ and Allow: /catalog/open/, with no other matching rules. These examples illustrate how to document a comparison, not observed behavior from a production crawler.

Captured inputComparison pointExpected fixture result
/catalog/itemOrdinary prefixDisallow rule applies
/catalog/open/itemMore specific exceptionAllow rule applies
/catalog/%6Fpen/itemEncoded unreserved letterCompare with the decoded unreserved letter
/catalog%2Fopen/itemEncoded reserved slashNo listed rule matches the preserved encoding
/Catalog/open/itemPath letter caseNo listed rule matches under case-sensitive comparison
/catalog/opened/itemNeighboring prefix boundaryThe /catalog/open/ exception does not match

Explain the result rather than leaving a pass or fail label alone. The encoded-slash and case cases are especially useful for identifying which assumptions the test implementation makes. Where a provider documents different behavior, label that as a provider-specific comparison.

Add only cases that answer a real question about your site’s URL patterns. A huge list of exotic strings can distract from the paths your business actually serves. Expand after the first set can be reproduced by another analyst.

Resolve the Applicable Allow and Disallow Rule

Evaluate the user-agent group before evaluating its paths. Record the exact rules participating in the decision, including any relevant merged groups under the method being tested. Don’t assume that a global group is automatically added to every specific group.

The REP matching rules use the most specific matching path, measured in octets, and prefer allow when equivalent allow and disallow rules tie. Keep the selected rule and its comparison length in the result. That gives the reviewer a reason for the outcome rather than a score without a trace.

Treat wildcard and end-marker behavior as separate test cases when your file uses them. A pattern intended to identify a file ending may behave differently from an unrestricted prefix. Write the intended boundary in plain language before asking a parser to evaluate it.

Avoid resolving every disagreement by editing the policy immediately. First establish whether the discrepancy comes from the input, group selection, encoding transformation, or rule precedence. An unnecessary edit can hide the original issue while introducing a different one.

Use a second implementation or a documented manual trace for important cases. Agreement doesn’t prove every crawler will behave identically, but disagreement can reveal a missing assumption in your test procedure. Preserve both results and the versions used.

A measuring comb compares general, specific, and equal-length path rules.

Compare Expected and Observed Results

Keep three outcomes separate: the policy result calculated by your test, the HTTP response observed for a request, and evidence of a particular crawler’s behavior. They describe different layers. A server returning content doesn’t mean a compliant crawler was permitted to request it.

Record the original request path with any actual crawl observation. If it differs from the fixture input, don’t use the observation as a direct validation of that case. Create another case or explain the mismatch.

A parser result is a test of a rule interpretation, not a complete crawl history.

Mark cases unresolved when you can’t establish the effective file or request form. A later successful test doesn’t reconstruct an earlier crawler’s cached policy or input. Preserve the date and scope of the evidence instead of backfilling certainty.

Use the crawler-policy guide to distinguish the business purpose of different bots. That broader policy decision should remain separate from this narrower check of how an encoded path matches a particular rule set.

Prioritize cases whose ambiguity affects a useful public page. A broken exception for product documentation can matter more than an obscure unused path. Explain that business priority separately from whether the matching procedure is technically correct.

Record the Rule Decision for Follow-Up

Topify describes reviewing page readiness for AI search. Its GEO score checker includes bot-access checks alongside other page signals. Use a relevant URL as the starting input and inspect the reported access findings before selecting a focused encoding case for manual investigation.

The analyst’s action is to preserve the effective rules, trace the comparison input, and connect the manual result to the page-level finding. The combined output helps decide whether a path exception needs engineering review or whether the current evidence is simply insufficient. It doesn’t establish that the checker exposes every encoding transformation, reproduces every provider’s parser, or proves production crawler behavior. Keep the fixture, parser version, expected result, and observed request evidence in the separate technical record. Confirm the product fields available in your actual workflow before treating a score change as validation of an encoding fix.

Give each proposed rule change a reviewable example. Show the path that should change behavior and a neighboring path that should remain unaffected. That makes the intended boundary concrete before anyone updates a production file.

Conclusion

Encoded-path disagreements become easier to resolve when the original input, applicable group, comparison transformation, and selected rule stay visible. Test unreserved and reserved characters separately, preserve letter case, and include neighboring paths that expose an overly broad exception. Keep calculated policy outcomes distinct from server responses and actual crawl observations.

Choose one access finding from your GEO checker review and build a small synthetic fixture around its real URL pattern. Ask another analyst to reproduce the decision from the saved inputs. The immediate goal is a clear technical explanation of what matched and why, with enough boundary evidence to review a proposed correction without assuming that every similar-looking address represents the same request.

FAQ

Should encoded paths be decoded before testing?

Not indiscriminately. Follow the documented comparison rules and preserve the original input, especially where reserved characters affect the interpretation.

Does URL letter case matter to the test?

Yes, preserve it as an explicit dimension. Path case and user-agent group matching have different rules, so don’t apply one normalization to both.

What happens when allow and disallow rules tie?

RFC 9309 says the allow rule should be used when the rules are equivalent. Record the matching rules and method rather than assuming every implementation was tested.

Does a parser result prove the crawler’s behavior?

No. It describes that parser’s evaluation of the supplied inputs. Actual requests and the policy available to the crawler require separate evidence.

Read More

Topify dashboard

Get Your Brand AI's
First Choice Now