Non-ASCII URL Characters

No Comments
Non-ascii url characters

Element Code: UR-004

TL;DR: This flag means a URL contains characters outside the plain ASCII set (accents, non Latin scripts, spaces, symbols) in raw form. Browsers and Google can handle properly percent encoded or IDN URLs, but raw or inconsistently encoded characters cause broken links, duplicate URLs, and ugly shares. Normalize to one encoded form and redirect the rest.
CHECK TYPE
URL hygiene
STANDARD
RFC 3986
ENCODING
Percent, Punycode
SEVERITY
Low to medium
FIX TIME
Config plus redirects

What counts as a non-ASCII URL character

ASCII is the original 128 character set: unaccented a to z, A to Z, digits, and a short list of punctuation. A URL path such as /cafe/ is pure ASCII. The moment you introduce an accented letter like the e in /café/, a non Latin script like /书/, a space, or a symbol, you are outside ASCII, and the character has to be represented some other way to travel safely across the web.

RFC 3986, the URI standard, only permits a limited set of characters in a raw URL. Anything else must be percent encoded in the path and query, or converted to Punycode in the domain (that is what turns an internationalized domain name into the xn-- form). So the accented cafe path becomes /caf%C3%A9/ once the e with an acute accent is UTF-8 encoded and percent escaped. Same destination, two very different looking strings.

Why this actually bites you

Modern browsers are polite. They show you /café/ in the address bar for readability, then quietly send /caf%C3%A9/ over the wire. That politeness hides a mess underneath, and the mess is where SEO problems live.

  • Duplicate URLs: if your server treats the raw and the encoded form as two valid pages, you now have two URLs for one piece of content, splitting signals and inviting canonical confusion.
  • Broken inbound links: a person copying a raw character URL into an email, a CMS field, or another platform can produce a string that double encodes (%25C3%25A9) or mangles, and the link 404s.
  • Inconsistent internal links: half your templates link to the raw form and half to the encoded form, so crawlers waste budget fetching both.
  • Analytics fragmentation: the same page shows up under multiple path spellings in your reports, and nobody trusts the numbers.
  • Homograph and trust smell: mixed script or unusual encoded paths can look sketchy to users and, in extreme cases, resemble spoofing patterns.

To be fair: Google explicitly says it can crawl and index IDNs and encoded URLs, and non Latin slugs can help users in their own language recognize the link. This is not "never use accents." It is "pick one encoded form, serve it consistently, and stop the duplicates."

Raw versus encoded, side by side

Raw in the wild /resumé/ Encoded, canonical /resum%C3%A9/ UTF-8 encode, then percent escape each byte é = 0xC3 0xA9 = %C3%A9

Fixing it, step by step

  1. Pick your canonical form. For most sites, decide whether readable non Latin slugs matter for your audience. If yes, keep them but serve the consistently percent encoded UTF-8 version. If they add nothing, transliterate to ASCII (cafe, resume) and be done with the whole class of problems.
  2. Standardize encoding to UTF-8. Percent encoding is only unambiguous if everyone agrees the underlying bytes are UTF-8. Confirm your CMS, server, and templates all emit UTF-8. Legacy Latin-1 encodings produce a different byte sequence and therefore a different, broken URL.
  3. 301 redirect the variants. Map the raw form, any alternate encodings, and case variants to the single canonical encoded URL with permanent redirects. Test that a double encoded request does not resolve to a live page.
  4. Set the canonical tag. Every page should self reference the exact canonical encoded URL in its rel=canonical, matching character for character what you redirect to.
  5. Fix internal links at the source. Update templates, navigation, and sitemaps to output the canonical encoded form. The XML sitemap in particular must use encoded URLs per the sitemap spec.
  6. Handle IDNs at the domain. If the non-ASCII is in the hostname, that is Punycode territory. Register and serve the xn-- form and make sure your certificate covers it.

Encoding quick reference

CharacterWhereEncoded as
SpacePath or query%20 (use hyphens in slugs instead)
é (e acute)Path%C3%A9
ü (u umlaut)Path%C3%BC
Non Latin scriptPathUTF-8 bytes, each percent escaped
Accented domainHostnamePunycode xn-- label

How to detect it

  1. Screaming Frog: crawl and use the URL tab filter for non ASCII characters, plus the "Underscores" and "Uppercase" reports for related hygiene issues. It flags the exact offending URLs.
  2. Search Console: the Pages report and URL Inspection will show whether Google indexed the encoded, the raw, or both. Look for the same content under two spellings.
  3. Server logs: grep access logs for both the raw multibyte sequence and the percent encoded form to see which one real traffic and bots actually request.
  4. Sitebulb: its URL hints call out non ASCII and encoding issues per template so you can fix the pattern, not just one page.

Do this / skip that

DO

  • Serve one consistently UTF-8 percent encoded form everywhere
  • Use hyphens for word separation, never spaces
  • 301 the raw and alternate encodings to the canonical URL
  • Put encoded URLs in the XML sitemap and canonical tag
  • Use Punycode for internationalized domain names
DON'T

  • Let raw and encoded versions both resolve as live pages
  • Double encode by escaping an already escaped string
  • Mix UTF-8 and legacy Latin-1 across your stack
  • Put literal spaces or symbols in new slugs
  • Ignore the hostname when the accent is in the domain

What good looks like

Every version of the page resolves to a single canonical URL in one encoding. Internal links, the sitemap, and the canonical tag all spell it the same way, byte for byte. Search Console shows one indexed URL, not a pair. Users see a readable address in the browser, and the machine sees a clean, standards compliant string underneath. If you went the transliteration route, even simpler: the whole class of encoding bugs just cannot happen.

FAQ

Are non-ASCII URLs bad for SEO?
Not inherently. Google crawls and indexes properly encoded IDNs and slugs, and native language slugs can help local users. The harm comes from inconsistent encoding and duplicate raw plus encoded versions, not from the characters themselves.
Should I just transliterate everything to ASCII?
If native script recognition does not help your audience, yes. ASCII slugs sidestep the entire encoding problem. If your users read the non Latin script and it aids recognition, keep it but serve the encoded UTF-8 form consistently.
What is double encoding and why is it a trap?
It happens when you percent encode a string that was already encoded, turning %C3%A9 into %25C3%25A9. The result points at a different, usually non existent URL. It creeps in when code escapes a value twice. Test for it explicitly.
What is Punycode?
It is the encoding that represents non-ASCII domain labels using only ASCII, producing the xn-- prefixed form. It applies to the hostname, whereas percent encoding applies to the path and query.
Duplicate or broken encoded URLs muddying your index?

We map every URL variant, set the canonical form, and wire up the redirects so crawlers and analytics see one clean URL per page.

Get an advanced SEO audit

Claude Vincent is a technical SEO consultant focused on crawlability, rendering, and AI-search visibility. He writes the field guides and case studies at SEO ProCheck, with a bias toward the durable, unglamorous work that decides whether search engines and AI answer engines can actually read and cite a site.

About SEO ProCheck

Technical SEO consulting and GEO strategy with 20 years of enterprise experience. Case studies, resources, and tools for search and AI visibility.

Work With Me

Technical SEO audits, GEO strategy, site migrations, and international SEO. Hourly consulting for teams who need hands-on support, not just reports.

Subscribe to our newsletter!

More from our blog