skip to content →
infoSEO RULE · R30

Missing charset declaration: when special characters render as ???

Without an explicit <meta charset="utf-8"> in the first 1024 bytes of HTML, browsers guess the encoding — and sometimes guess wrong. Special characters, currency symbols, and non-Latin scripts render as ???. Add the declaration to every template.

Without an explicit <meta charset="utf-8"> in the first 1024 bytes of HTML, browsers guess the encoding — and sometimes guess wrong. Special characters, currency symbols, and non-Latin scripts render as ???. Add the declaration to every template. The charset declaration tells the browser which character encoding to use when parsing the response. <meta charset="utf-8"> is the modern correct value. It must appear early in <head> — ideally as the first child of <head>.

Last updated·part of the 50-rule library

What it is

The charset declaration tells the browser which character encoding to use when parsing the response. <meta charset="utf-8"> is the modern correct value. It must appear early in <head> — ideally as the first child of <head>.

Why it matters

Mis-rendered characters destroy trust and bounce visitors instantly. Search engines also struggle to index pages with encoding issues — special characters in titles, headings, or schema may be silently corrupted.

How to fix it

  1. Add <meta charset="utf-8"> as the first <head> element. Place before any <title>, <meta>, or <link>. Browsers need to know the encoding before parsing further bytes.
  2. Match the HTTP Content-Type header. The server should also send Content-Type: text/html; charset=utf-8. Mismatch causes inconsistent behaviour.
  3. Verify with curl. curl -I https://example.com should show charset=utf-8 in the Content-Type. View source to confirm the meta is present.

Authoritative sources