--- name: special-chars description: "Use when applies to any site with user-generated slugs, CMS-generated URLs, or content in non-English languages. Use when auditing URLs for crawl errors or canonicalization issues." metadata: category: seo priority: medium difficulty: beginner estimatedTime: "10" source: frontendchecklist.io url: https://frontendchecklist.io/en/rules/seo/special-chars --- # URL Special Characters Special characters in URL paths cause inconsistent crawling, broken links when shared, and canonicalization failures when different systems encode them differently. ## Quick Reference - URL paths should contain only unreserved characters: A-Z, a-z, 0-9, `-`, `_`, `.`, `~` - Spaces must be encoded as `%20` (not `+`, which is query-string syntax) - Characters like `#`, `?`, `&`, `=` have reserved meaning in URLs and must be percent-encoded in path segments - Non-ASCII characters (accented letters, CJK) should be percent-encoded in URLs, though modern browsers decode them for display ## Check Scan all crawled URL paths for characters outside `[A-Za-z0-9\-_./~]`. Flag URLs containing spaces (`%20` or literal), special symbols (`#`, `?`, `&`, `=`, `+` in paths), or unencoded non-ASCII characters. Check if different encodings of the same URL return separate 200 responses. ## Fix Update the URL generation logic in your CMS or framework to strip or replace special characters. Replace spaces with hyphens. Percent-encode any reserved characters that must appear in paths. Set up redirects from problematic old URLs to clean new slugs. ## Explain Explain the difference between reserved and unreserved characters in RFC 3986, how browsers and crawlers handle inconsistent percent-encoding, and why special characters in paths create duplicate content risks. ## Code Review Review metadata generation, rendered HTML, structured data, and response headers related to URL Special Characters. Flag exact routes or templates where search-facing output violates the rule, and describe how to verify the final page output. --- For full implementation details, code examples, and framework-specific guidance, see `references/rule.md`. Rule page: https://frontendchecklist.io/en/rules/seo/special-chars