Main content has substantial text in two languages
In the reportTwo languages each account for at least 30% of main-content letters
mixed_language_main_content · Review item
Review whether the page intentionally presents two languages or has an unfinished translation. Qualified block labels give lower shares; unknown text remains in the denominator.
Severity: Notice. Informational advice: a bilingual page can be intentional, and block labels may not describe every passage correctly. This notice does not establish a search problem.
Why it matters
Readers expecting one language can lose the thread when large passages switch language. Separate language versions can be easier to read, but an intentional bilingual page is not automatically wrong.
What to do
- Read the per-language letter shares, then inspect the original main text.
- If the page is intended to use one language, complete the translation. If separate versions make more sense, give each a clear address and language declaration.
- Run a new full audit. Removing html lang or losing text coverage cannot clear this finding.
When to leave it as it is: Keep an intentionally bilingual page when it serves its audience. Treat the finding as a review suggestion rather than a language policy violation.
What we read
We use the complete original HTTP 200 indexable server HTML and exactly one explicit main, role=main or article region, with a server-rendered classification. A single valid original html lang is required, even though its language value does not determine whether the content is mixed. Pages naming another canonical address are excluded by the shared page eligibility check.
Each qualified block contributes its full Unicode letter count once. Short, quoted/code, unsupported and inconclusive blocks contribute unknown letters instead of a guessed language.
A finding needs two supported lower shares of at least 30%. Clean proof needs a dominant lower share of at least 70%, while the largest other known share plus every unknown letter remains strictly below 30%. Borderline or incomplete coverage is unknown.
Example & evidence
Illustrative letter shares, not a live audit.
Of 1000 counted letters, qualified English blocks contain 450 and Ukrainian blocks 400; 150 letters remain unknown. Both supported lower shares exceed 30%, so the page is listed for review. Unknown letters are never assigned to either language.
Confirm & check again
Check for yourself: Read the main content in order and mark passages that switch language. Check whether the switches are intentional and useful to your audience.
Check again: Full audit — Run a new full audit. The same address must be read again as complete supported server HTML with sufficient text and the admitted model available. A missing declaration, changed indexability, incomplete or unclear main region, unavailable model, or unsupported text never proves a previous finding fixed.
Limits & sources
This is a heuristic review of original server HTML. JavaScript-rendered text and external CSS are unmeasured; the check does not establish browser visibility, reproduce Google language detection or claim a ranking result.
The model considers 75 languages, but only English, Ukrainian and Russian detector results are admitted. Other or ambiguous results remain unknown. Whole text needs 100 lexical words and 500 Unicode letters; each measured block needs 20 words and 120 letters.
A label needs a returned score whose lower bound exceeds 0.9 and whose lower bound exceeds every other candidate upper bound by more than 0.85. These are model-score limits, not a 90% or 85% probability that the language is correct.
Short text, quotes, code and unsupported text retain unknown letter weight. Shared original text blocks are measured once; their saved integer score bounds are replayed without running the model again.
Confidence: Medium The language labels come from a bounded offline heuristic. A strong model score is not measured accuracy; review the actual main text before changing a page.
Sources
- Google Search Central, Managing multi-regional and multilingual sites — Background: Google identifies language from visible content and advises a clear language per page. This does not establish our model or thresholds. Checked 7 October 2026.
- PyPI, Lingua language detector 2.2.0 — Documents the pinned language-detection package and its model-based approach; it does not establish this audit’s thresholds or guarantee the language of a page. Checked 2 November 2026.
- IANA, Language Subtag Registry — Lists registered language, script and region subtags used to interpret language declarations; it does not identify the language of visible text. Checked 2 November 2026.
- IANA, Language Tag Extensions Registry — Lists registered language-tag extension identifiers and their defining references; an extension does not establish a page’s content language or canonical suitability. Checked 2 November 2026.
Editorial review: 2 November 2026