Hidden CharactersUnicodeWatermarkSEO

Zero-Width Spaces: The Invisible Character Breaking Your Document

P
PassMyEssay TeamResearch Team
PublishedAugust 14
Read Time4 min read
A zero-width space sitting invisibly inside a word

A zero-width space is a character with no width. It is not a space that happens to be narrow — it is a character that occupies a position in your text and renders nothing at all. Unicode calls it U+200B. Your document calls it a word. Your search function calls it a mismatch.

It is the most common of the invisible characters that arrive with text copied out of ChatGPT, Claude, or Gemini, and it is the one responsible for most of the strange behaviour people blame on their word processor.

Key Takeaways

    What it was for

    Zero-width spaces exist for a real typographic reason. In languages that do not put spaces between words, and in very long unbroken strings like URLs or chemical names, a renderer needs somewhere it is allowed to break a line. A zero-width space marks a legal break point without drawing anything.

    That is a legitimate job. The trouble is that the character survives outside the context where it was doing that job. When a chat interface renders your response as HTML and you copy it back out as text, the break hints come with it — and in a Word document, a break hint inside the word "management" is not a feature.

    What it actually breaks

    Find-and-replace

    This is the one that wastes an afternoon. You search for a word you can plainly see on screen and your editor reports zero matches. What is stored is not the word — it is the first half, then U+200B, then the second half. String comparison is exact, so nothing matches.

    The same mechanism breaks spell-check (each half is a non-word, or worse, both halves are real words), autocorrect, and any script that counts occurrences.

    Word counts and text statistics

    Different tools split text on different character classes. One counts the fragments either side of a zero-width space as two words; another counts them as one. Neither is wrong, exactly, and the disagreement is impossible to debug if you do not know the character is there.

    SEO and exact-match keywords

    This one is quiet and expensive. Put a zero-width space inside your target keyword in a title tag or a meta description, and the string a crawler parses is not the string you see in your CMS preview. Your keyword density reports skew. Exact-match phrases stop matching. Nothing errors, nothing warns you, and the page just underperforms for a reason that never surfaces in any audit.

    CMS and template parsers

    WordPress's block editor stores structured content and validates it on save. Control and formatting characters copied from a rendered page can invalidate a block, at which point Gutenberg either scrambles the formatting or refuses to save cleanly. Static site generators, Markdown parsers, and templating engines fail in comparable ways.

    Citation managers and reference matching

    Reference tools match on author, title, and year strings. A zero-width space in an author name means the reference you are certain you imported does not link to the citation you are certain you inserted.

    How to see one

    You cannot see it, but you can catch it:

    • Search for the character directly. In editors that support regular expressions, \x{200B} or [​-‍] will find them. VS Code, Sublime, and Notepad++ all handle this.
    • Watch the caret. Arrow-key through a suspicious word. If the caret pauses at a position where there is visibly no character, something invisible is there.
    • Paste into a hex or code view. Anything that shows you bytes shows you the truth.
    • Run a scan. The AI Phrase Detector on the homepage flags every hidden character in your text with a visible tag where it sits, so you can see the positions rather than hunt for them.

    The last option exists because the first three all require you to already suspect the problem. Most people do not, which is exactly why the character is a problem in the first place.

    How to remove one

    Removing a zero-width space is a delete operation on a known code point. It carries no risk to your meaning because the character has no meaning — nothing about your sentence changes when it goes.

    The complete set worth stripping alongside it:

    CharacterCode pointBecomes
    Zero-width spaceU+200BNothing
    Zero-width non-joinerU+200CNothing
    Zero-width joinerU+200DNothing
    Word joinerU+2060Nothing
    Byte-order markU+FEFFNothing
    Soft hyphenU+00ADNothing
    Non-breaking spaceU+00A0An ordinary space
    Narrow non-breaking spaceU+202FAn ordinary space
    Thin spaceU+2009An ordinary space

    Note the split. The first six are removed outright. The last three are replaced with a normal space rather than deleted, because deleting them would join two words together — a fix worse than the problem.

    On PassMyEssay this runs automatically on every pass, before anything else happens to your text. Paste, hit Clean, copy the result out.

    Does a zero-width space mean the text is AI-generated?

    No. It means the text was copied out of something that renders HTML. That includes every AI chat interface, and it also includes web pages, PDFs, email clients, and documents that passed through any of the above years ago.

    Nobody is inferring authorship from invisible characters, and any tool that claims to is guessing. What is true is narrower and more practical: if you pasted from a chat window, these characters are almost certainly in your document right now, and they will stay there until something removes them.

    Related: ChatGPT hidden characters, why find-and-replace fails on pasted text, why AI writing sounds robotic.

    Try PassMyEssay free → See every hidden character in your text, then strip them in one pass.

    Keep Reading

    Related guides

    Make your draft clearer

    Use PassMyEssay to rewrite AI-assisted text responsibly, check weak sections, and keep your meaning intact.

    Try PassMyEssay