Article 26.10.2026 6

Invisible Characters in ChatGPT Text: We Tested 8 AI Models (and the textGrain Watermark)

Our own test of 8 AI models (GPT-5.6, o3, Claude, Gemini, DeepSeek, Grok, Mistral): do they insert invisible characters, how OpenAI’s textGrain watermark works, and a 5-minute pre-publishing checklist.

Invisible Characters in ChatGPT Text: We Tested 8 AI Models (and the textGrain Watermark)

ChatGPT and other AI models do not put invisible characters into their text today: in our test, 8 models produced 242 answers, 264,831 characters, without a single U+200B, U+202F or soft hyphen. The story about "hidden space watermarks" was born in spring 2025 and has lived apart from the facts ever since. OpenAI's actual watermark arrived only on 5 October 2026. It is called textGrain and it hides in word choice, not in characters, so no "Unicode cleaner" can see or remove it. Below are our measurements, OpenAI's numbers on how robust the mark is, and a checklist for text before publishing.

Key takeaways

  • No invisible characters. 242 answers from eight models (GPT-5.6 Luna, GPT-4o, o3, Claude Sonnet 5.5, Gemini 3.8 Flash, DeepSeek V4.1 Flash, Grok 4.7, Mistral Large 4): zero Unicode format characters and zero non-standard spaces. That includes 63 answers to tasks with numbers, currencies and dates, exactly where U+202F used to be found.
  • OpenAI does have a watermark, but it lives in the words. textGrain slightly shifts word choice and forms a statistical pattern. According to OpenAI, unedited text is flagged about 92% of the time; after replacing 25% of the words with synonyms, only 17%.
  • What actually gives AI text away. Em dashes in English, curly quotes, leftover Markdown. None of it is proof.
  • So where do invisible characters in your text come from? Mostly from copy-paste: web pages, messengers, word processors, emoji. You can find and remove them in a minute.
What we found in 242 answers from eight AI models PromoPilot test, 26.10.2026: identical tasks in Russian and English, answers via API 242 answers 8 models, 264,831 characters of text 0 invisible characters no U+200B, no U+202F, no soft hyphen 58% Russian answers with a dash 23% of English answers 46% with Markdown asterisks and hashes survive copy-paste What we found in 242 answers from eight AI models PromoPilot test, 26.10.2026: identical tasks in Russian and English, answers via API 242 answers 8 models, 264,831 characters of text 0 invisible characters no U+200B, no U+202F, no soft hyphen 58% Russian answers with a dash 23% of English answers 46% with Markdown asterisks and hashes survive copy-paste
We counted as invisible any Unicode format character (category Cf: U+200B, U+200D, U+2060, U+FEFF, etc.), the soft hyphen U+00AD and every space other than the regular one (U+00A0, U+202F, U+2009, etc.).

Where the "hidden spaces" story came from

In April 2025 Rumi, a US startup building tools for universities, reported that text from o3 and o4-mini contained the narrow no-break space U+202F. It looks like an ordinary space but has a different code, so a simple search finds it. The news quickly turned into "OpenAI secretly marks your text", and dozens of "ChatGPT watermark removers" appeared online.

We found no official OpenAI statement that this was a watermark. There is a more mundane explanation: typographic rules put a narrow no-break space between a number and its unit, between initials, and before certain punctuation in some languages. The model could have learned this from its training text. Rumi itself described the finding as most likely temporary.

We tested o3 separately: 19 answers, including tasks with amounts, percentages and dates. U+202F did not appear once. Whatever it was in spring 2025, it is not there now.

What changed in October 2026: the textGrain watermark

On 5 October 2026 OpenAI announced textGrain, a watermark for text. The main points of the announcement (as reported by BleepingComputer the same day):

  • How it works. The model slightly shifts its choice between suitable words and word pieces. The result is a statistical pattern that readers do not notice and a detector can find. The mark adds no hidden characters, invisible spaces or unusual punctuation, so nothing "extra" travels with a copy-paste.
  • Where it is on. In ChatGPT and Codex for users in the European Union on all plans, rolling out over several weeks. In the API it is opt-in worldwide, from project or organization settings, and off by default.
  • Who can check it. The detector is given only to approved researchers and expert organizations, on application. There is no public "textGrain check", and any service promising one today is not telling the truth.
  • What the mark does not prove. OpenAI states plainly that the absence of a detected watermark does not prove human authorship. A detected mark also does not say who generated the text or how much it was edited afterwards.
textGrain watermark: how editing wipes out detection OpenAI figures from the 5 October 2026 announcement, 400-token answer Unedited text ≈92% the watermark is found almost every time 10% of words replaced with synonyms 66% one text in three already passes as unmarked 25% of words replaced with synonyms 17% the mark nearly disappears textGrain watermark: how editing wipes out detection OpenAI figures from the 5 October 2026 announcement, 400-token answer Unedited text ≈92% the watermark is found almost every time 10% of words replaced with synonyms 66% one text in three already passes as unmarked 25% of words replaced with synonyms 17% the mark nearly disappears
Source: OpenAI announcement of 05.10.2026 as reported by BleepingComputer. Words were swapped for synonyms; the detector is available only to approved researchers for now.

The robustness numbers are honest and telling. For a 400-token answer (about 300 words) the mark is detected roughly 92% of the time. Replacing 10% of the words with synonyms lowers detection to 66%, replacing 25% to 17%. Short, heavily rewritten and translated texts are hard to check, OpenAI says, and in mathematics, where the model has little freedom in word choice, the mark is weaker.

Google takes a similar approach: SynthID Text adds a statistical mark to word choice, and Google open-sourced it in 2024. Why such marks appear now, and in the EU first: the EU AI Act (Article 50) requires providers of generative systems to mark synthetic content in a machine-readable way, and coverage of the textGrain launch links it to exactly that.

Practical takeaway: a "ChatGPT watermark remover" that deletes invisible characters has nothing to do with textGrain. It cleans Unicode, while the mark sits in the words. These are two different questions and should not be confused.

Our test: how we checked

On 26 October 2026 we gave eight models identical tasks and counted every unusual character in the answers. Models were called via API (OpenRouter), temperature 0.7, no system instructions:

  • Models: GPT-5.6 Luna, GPT-4o and o3 (OpenAI), Claude Sonnet 5.5 (Anthropic), Gemini 3.8 Flash (Google), DeepSeek V4.1 Flash, Grok 4.7 (xAI), Mistral Large 4.
  • Tasks: six typical website and email texts (a blog intro, advice on choosing hosting, a product description, an email to a client, tips on meta descriptions, pros and cons of remote work) in Russian and English, each run twice. Plus four tasks with numbers, currencies, units and dates, where a narrow space would show up first.
  • What counted as invisible: all Unicode format characters (category Cf: U+200B, U+200C, U+200D, U+2060, U+FEFF, bidirectional controls and others), the soft hyphen U+00AD and every space other than the regular one: no-break U+00A0, narrow U+202F, thin U+2009 and the rest.
  • "Typography" was counted separately: em dashes, curly quotes, Markdown.

In total, 242 answers (most of Qwen's answers came back empty, so we dropped it; for o4-mini the provider returned an error). It is not a million-sample study, but it is enough for the question "do models insert invisible characters": if a character appeared in even one answer in twenty, we would have seen it with a probability above 99.9%.

Result 1: no model inserts invisible characters

Zero out of 242. Not one zero-width character, not one soft hyphen, not one no-break or narrow space, including in 63 answers with amounts ("$6.2 million", "4,5 млн долларов"), percentages, temperatures and dates. No model, o3 included, adds "typographically correct" spaces on its own.

An important caveat: we checked API answers, i.e. the text a model returns to a developer. A web chat adds formatting on top, and after that everything depends on where and how you paste. That step, not the model itself, is where "invisible" things most often enter a text. More on that below.

Result 2: the real tells are visible

If anything gives AI text away, it is visible habits. The most discussed one is the em dash.

Share of answers with an em dash (—): Russian vs English In Russian the dash is ordinary punctuation, so compare models within one language Russian English DeepSeek V4.1 Flash 81% 19% Grok 4.7 81% 31% Mistral Large 4 80% 44% Gemini 3.8 Flash 63% 31% GPT-5.6 Luna 56% 13% o3 40% 44% GPT-4o 38% 13% Claude Sonnet 5.5 19% 0% Share of answers with an em dash (—): Russian vs English In Russian the dash is ordinary punctuation, so compare models within one language Russian English DeepSeek V4.1 Flash 81% 19% Grok 4.7 81% 31% Mistral Large 4 80% 44% Gemini 3.8 Flash 63% 31% GPT-5.6 Luna 56% 13% o3 40% 44% GPT-4o 38% 13% Claude Sonnet 5.5 19% 0%
16 answers per language per model (Mistral Large 4: 15 Russian; o3: 10 Russian and 9 English). PromoPilot test, 26.10.2026.

The key is to compare within one language. In Russian the long dash is ordinary punctuation, any competent author uses it, so 58% of Russian answers with a dash mean nothing. In English the em dash is rarer, and the spread between models is clear: from 0% for Claude Sonnet 5.5 to 44% for Mistral Large 4 and o3. Still, it is style, not proof: plenty of human writers love the em dash.

The second habit is curly quotes in English text (“…” instead of "…"). GPT-5.6 Luna uses them in 10 answers out of 16, o3 in 7 out of 9, Claude Sonnet 5.5 never. The third is Markdown.

How many answers come with Markdown Asterisks (**bold**) and hashes (## heading) in the API answer text Claude Sonnet 5.5 32 of 32 always formats headings and lists Gemini 3.8 Flash 24 of 32 DeepSeek V4.1 Flash 15 of 32 Mistral Large 4 12 of 31 GPT-5.6 Luna 10 of 32 Grok 4.7 10 of 32 GPT-4o 8 of 32 o3 0 of 19 plain text, no markup How many answers come with Markdown Asterisks (**bold**) and hashes (## heading) in the API answer text Claude Sonnet 5.5 32 of 32 always formats headings and lists Gemini 3.8 Flash 24 of 32 DeepSeek V4.1 Flash 15 of 32 Mistral Large 4 12 of 31 GPT-5.6 Luna 10 of 32 Grok 4.7 10 of 32 GPT-4o 8 of 32 o3 0 of 19 plain text, no markup
In a web chat Markdown turns into formatting; pasted into an editor it may survive as characters or as styles. PromoPilot test, 26.10.2026.

Asterisks and hashes are harmless by themselves, but if text is copied from an API response or a middleman service rather than from the chat window, they stay in the text as is: a "**Important:**" in the middle of a paragraph gives generation away better than any detector.

So where do invisible characters in real texts come from?

Our hidden character detector checked more than 600 texts between 13 and 26 October alone, and unusual characters turn up in real texts regularly. Judging by our test, though, they arrive not from the model but along the way:

CharacterCodeWhere it usually comes fromWhat it breaks
No-break spaceU+00A0Copying from web pages ( ), Word and Google Docs, autocorrect before punctuationUsually nothing; breaks search and string comparison
Zero-width spaceU+200BSite layouts (breaking long words), some messengers and CMSsA word looks the same but is not found by search; in a page address it creates a different URL
Zero-width joinerU+200DMulti-part emoji (families, flags, professions)Remains as a "tail" if an emoji is not deleted completely
Direction marksU+200E, U+200F, U+202A–U+202ETexts mixing left-to-right and right-to-left languagesOdd character order; break copied URLs and code
Byte order markU+FEFFFiles saved as UTF-8 with BOM (old Windows Notepad, exports)Breaks JSON, CSV and configs when at the start of a file
Soft hyphenU+00ADAutomatic hyphenation in editors and layoutsSplits a word for search and word counts

More on each character and how to find it by hand in our guide "Hidden watermarks and invisible characters in text", and a comparison of free tools in "Best free invisible character detectors and removers".

Does it matter for SEO?

For rankings, the fact of generation is not decisive. Google's guidance on AI content, updated on 1 October 2026, focuses elsewhere: content must be helpful, and facts in AI-generated text must be checked by a human before publishing, metadata included. Google has not said that Search looks for invisible characters or AI watermarks in text.

Invisible characters do harm in a different, purely technical way:

  • In titles and meta tags a zero-width character makes a string "different": duplicates are not found, site search fails, and copying from the results yields junk.
  • In URLs and anchors U+200B becomes %E2%80%8B, and the link leads to a different address, usually a 404.
  • In markup and files a BOM at the start of JSON-LD, a CSV feed or a config breaks parsing entirely.
  • In article text soft hyphens and zero-width spaces get in the way of on-page search, word counts and plagiarism checks.

So clean text not "from ChatGPT watermarks" but as routine hygiene before publishing, whoever wrote it.

Checklist: check a text before publishing in 5 minutes

Step 1

Find invisible characters

Paste the text into the hidden character detector. It shows every unusual character with its code and position, not just "something found".

Check: the report is empty, or you know where each character came from (emoji, copy-paste, editor).
Step 2

Remove the junk, keep what is needed

Clean the text with the invisible character remover. A no-break space between a number and its unit ("10 km") is fine, while zero-width spaces and a BOM have no place in web copy.

Check: a second pass through the detector is empty; emoji and formatting are intact.
Step 3

Strip leftover Markdown

Search the text for **, ## and lines starting with - . If the text goes into your CMS as a plain paragraph, the markup stays visible.

Check: the page preview has no asterisks or hashes.
Step 4

Align typography with your style guide

Decide once for all texts: which quotes, which dash, whether you use no-break spaces. Do not strip dashes just because "AI uses them": that removes style, not a fingerprint.

Check: one kind of quotes and one kind of dash per text.
Step 5

Fact-check by hand

This is what Google expects from AI-assisted text: numbers, dates, names and quotes are checked against the original source before publishing. No detector replaces this step.

Check: every number in the text has a source you opened yourself.

What not to do

Don't trust services that "remove the ChatGPT watermark".textGrain lives in words; deleting characters does not touch it. Such services clean Unicode, which is useful, but the promise is louder than the result.
Don't run text through a synonymizer to become "invisible".Yes, replacing 25% of the words almost erases the mark. Meaning and readability usually go with it, and that is what both readers and search engines judge.
Don't infer authorship from detectors.Even OpenAI says that the absence of a mark does not prove human authorship. Style-based detectors are wrong even more often.

If you need to check an image, video or audio file, that is a different story: C2PA metadata and SynthID apply there. We covered it in "AI watermark detectors: SynthID, C2PA and metadata".

FAQ

Does ChatGPT add invisible characters to text?
In our test on 26.10.2026, no: 242 answers from eight models, including GPT-5.6, GPT-4o and o3, without a single zero-width character or special space. OpenAI's textGrain watermark works through word choice and, according to the company, adds no characters.

Can I check a text for the textGrain watermark?
Not yet. OpenAI gives its detector only to approved researchers and organizations. Services that promise such a check actually look for invisible characters or score writing style.

Where do U+200B and U+00A0 in my text come from if I did not type them?
Usually from copy-paste: web pages, messengers, Word and Google Docs. U+200D comes with multi-part emoji. You can find and remove them with a free hidden character detector.

Does the em dash give away AI text?
Not on its own. In our test models used it in 23% of English answers and 58% of Russian ones, where the dash is ordinary punctuation. Some models use it far more than others, but it is a stylistic habit that many people share, not proof.

Does Google demote AI-written content?
Google evaluates helpfulness and accuracy, not how content was made. Since 1 October 2026 its guidance explicitly says that facts in AI-generated text should be checked by a human before publishing. Google has not said it looks for invisible characters or AI watermarks.

Sources: PromoPilot test, 26.10.2026 (8 models, 242 answers via OpenRouter API); BleepingComputer, "OpenAI is adding invisible watermarks to ChatGPT and Codex text in the EU", 05.10.2026; OpenAI Help Center, "Provenance signals in OpenAI-generated content"; reports on Rumi's finding, April 2025; Regulation (EU) 2024/1689 (AI Act), Article 50; Google Search Central guidance on AI-generated content, revision of 01.10.2026. Prepared by the PromoPilot team.

Check a text for invisible characters

Share:
Free · no sign-up

How many clicks is your site missing?

The SEO Radar shows in a minute which pages sit near the top of Google and what keeps them from moving up.

An estimate from positions, not a promise
New articles by email
Content