Character Encoding (UTF-8) Not Declared

Without a declared charset, browsers use heuristics to guess the encoding. This frequently garbles accented characters (é becomes é), em dashes, curly quotes, and any non-ASCII text. For multilingual sites, this is catastrophic. The fix is one meta tag: <meta charset="UTF-8"> before any other content in the head.

Start here

Before You Fix It: What This Check Means

Charset declarations prevent text corruption and parser ambiguity across browsers and bots. In plain terms, this checks whether the page declares a consistent text encoding so characters do not break. Scavo inspects charset declarations from three places.

Why this matters in practice: operational drift here often causes hard-to-debug regressions across environments.

How to use this result: treat this as directional evidence, not final truth. This result reflects what was observable at scan time and should be verified in your own production context. First, confirm the issue in live output: verify directly in live production output with browser/network tools Then ship one controlled change: Emit `<meta charset="utf-8">` near the top of `<head>`. Finally, re-scan the same URL to confirm the result improves.

TL;DR: Your pages don't declare a character encoding, causing browsers to guess — which can mangle special characters and accented text.

Without a declared charset, browsers use heuristics to guess the encoding. This frequently garbles accented characters (é becomes é), em dashes, curly quotes, and any non-ASCII text. For multilingual sites, this is catastrophic. The fix is one meta tag: <meta charset="UTF-8"> before any other content in the head.

What Scavo checks (plain English)

Scavo inspects charset declarations from three places:

  • <meta charset="...">
  • <meta http-equiv="content-type" content="...; charset=...">
  • HTTP Content-Type response header

Exact logic:

  • Warning: no charset declaration found.
  • Warning: multiple different charsets are declared.
  • Warning: one charset declared but it is not UTF-8/utf8.
  • Pass: a single UTF-8 declaration is detected.

Scavo stores detected charsets and header values in check details.

How Scavo scores this check

Scavo assigns one result state for this check on the tested page:

  • Pass: baseline signals for this check were found.
  • Warning: partial coverage or risk signals were found and should be reviewed.
  • Fail: required signals were missing or risky behavior was confirmed.
  • Info: Scavo could not gather enough reliable evidence on this run to score pass/fail confidently.

In your scan report, this appears under What failed / What needs attention / What is working for charset, followed by Recommended next steps and Technical evidence (for developers) when needed.

  • Scan key: charset
  • Category: TECHNICAL

Why fixing this matters

Wrong or inconsistent encoding causes garbled characters, broken punctuation, and data-quality issues in forms/content.

UTF-8 is the web default for modern multilingual content and avoids most compatibility issues.

Common reasons this check warns

  • Old template includes legacy iso-8859-1 declaration.
  • Header middleware sets a different charset from HTML meta.
  • Multiple plugins inject duplicate meta charset tags.
  • API/edge responses miss explicit content-type charset.

If you are not technical

  1. Ask your developer to standardize responses to UTF-8.
  2. Request proof from both source HTML and response headers.
  3. Check pages with special characters (accented text, symbols).
  4. Re-run scan after fix.

Technical handoff message

Copy and share this with your developer.

Scavo flagged Character encoding (charset). Please make charset declarations consistent and UTF-8 across HTML meta and HTTP headers for this URL. Remove conflicting declarations and re-run the scan.

If you are technical

  1. Emit <meta charset="utf-8"> near the top of <head>.
  2. Ensure Content-Type headers include UTF-8 where applicable.
  3. Remove duplicate or conflicting charset declarations.
  4. Confirm templating/layout partials cannot inject legacy charset values.

Example

<meta charset="utf-8">

How to verify

  • Check page source for one UTF-8 declaration.
  • Check headers with curl -I and inspect Content-Type.
  • Validate non-ASCII text renders correctly on key pages.
  • Re-run Scavo and confirm Pass.

What this scan cannot confirm

  • It does not decode raw bytes to prove payload encoding correctness.
  • It does not validate every static asset type.
  • It does not guarantee all downstream integrations preserve UTF-8.

Owner checklist

  • [ ] Assign one owner for response header/content defaults.
  • [ ] Standardize charset handling in base layout and middleware.
  • [ ] Add regression test for charset output on key templates.
  • [ ] Re-check encoding after framework/server upgrades.

FAQ

Why can conflicting charset declarations break pages?

Browsers may prioritize one declaration over another, producing unpredictable decoding outcomes.

Is UTF-8 always the right choice for modern web pages?

In almost all cases, yes. HTML guidance and platform defaults strongly favor UTF-8.

Do we need both meta charset and header charset?

One clear declaration can be enough, but many teams keep both aligned for robustness across delivery paths.

Can CDN changes introduce charset issues?

Yes. Header rewrite rules can unintentionally override origin charset values.

Sources


Need help tracing charset conflicts across app, CDN, and server layers? Send support one failing URL and raw response headers.

More checks in this area

redirect_chain_hygiene

Redirect Chain Too Long — Multiple Hops Before the Real Page Loads

Learn how Scavo measures redirect hops, why chains slow users and crawlers down, and how to flatten protocol, host, and legacy URL redirects into cleaner routes.

Open guide
not_found_status

404 Page Returns Wrong HTTP Status Code

When a deleted or broken URL returns HTTP 200, search engines index it as a real page — polluting your index with dead content and wasting crawl budget. This is called a "soft 404" and Google specifically warns against it. Your 404 page should return a proper 404 status code while still showing a helpful message to users.

Open guide
analytics_instrumentation

Analytics Not Installed or Not Firing

Without analytics, every business decision about your website becomes a guess. You can't see which pages convert, where users drop off, which channels drive traffic, or whether changes improve performance. This is the foundation of data-driven optimization — if it's missing, you're flying blind.

Open guide