Кодировка страницы: windows-1251, расхождение с сервером, «кракозябры»
Что это значит
Кодировка — это правило, по которому байты превращаются в буквы. Браузер узнаёт её из ответа сервера (заголовок Content-Type: text/html; charset=utf-8) и из тега <meta charset="utf-8"> в коде страницы. На сайте кодировка старая (windows-1251, KOI8-R), нигде не указана или сервер и код страницы называют разные кодировки.
- Сайт в устаревшей кодировке. Страницы записаны в windows-1251 или другой старой кодировке, а не в UTF-8.
- Кодировка страниц указана противоречиво. Заголовок сервера и
<meta charset>называют разные кодировки, или текст на самом деле записан не в той кодировке, которая указана. - Не указана кодировка страниц. Ни сервер, ни код страницы не сообщают кодировку: браузер угадывает её сам.
Чем мешает
Если браузер или поисковик выберет не ту кодировку, вместо текста будут «кракозябры» вроде «РџСЂРёРІРµС‚». Старая кодировка сама по себе страницы не ломает, но в ней нет части символов (эмодзи, знак рубля, многие иностранные буквы), а формы, оплата и сервисы рассылок работают в UTF-8, и на стыке текст портится.
Как исправить
WordPress
- WordPress работает в UTF-8: проверьте «Настройки → Чтение → Кодировка страниц» (в старых версиях) и что в
header.phpтемы есть<meta charset="<?php bloginfo('charset'); ?>">. - Если сервер отдаёт другую кодировку в заголовке, добавьте в файл
.htaccessв корне сайта строкуAddDefaultCharset UTF-8или попросите поддержку хостинга.
Tilda
- Tilda всегда отдаёт страницы в UTF-8. Если проверка нашла проблему с кодировкой, она в коде, который вы вставили сами (блоки T123, HTML-вставки): уберите из него свои теги
<meta charset>.
1С-Битрикс
- Узнать кодировку: «Настройки → Настройки продукта → Сайты → Список сайтов → сайт → Кодировка». Перевод старого сайта с windows-1251 на UTF-8 — работа для разработчика: перекодировка файлов, базы данных и настройка
dbconn.phpи.settings.php. - Если расходятся заголовок сервера и
<meta>, разработчик выставит одинаковую кодировку в настройках сайта и в шаблоне (header.php).
OpenCart
- OpenCart работает в UTF-8. Если сервер отдаёт другую кодировку в заголовке, добавьте в
.htaccessстрокуAddDefaultCharset UTF-8или попросите поддержку хостинга.
Другой движок или свой сервер
- Первой строкой внутри
<head>укажите<meta charset="utf-8">. - Сервер должен отдавать заголовок
Content-Type: text/html; charset=utf-8: в Apache — строкаAddDefaultCharset UTF-8в.htaccess, в Nginx —charset utf-8;в настройках сайта. - Если файлы сайта на самом деле в windows-1251, а переводить их пока не на что, укажите
windows-1251одинаково и в заголовке, и в<meta>.
Пример кода
Замените example.by на адрес своего сайта.
<head>
<meta charset="utf-8">
<title>…</title>
# .htaccess (Apache)
AddDefaultCharset UTF-8
# Nginx, внутри server { … }
charset utf-8;
Если сайт в windows-1251 работает без сбоев, перевод на UTF-8 можно отложить: поисковики такие страницы читают.
Если сайт делал подрядчик
Перешлите ему ссылку на отчёт и эту просьбу:
Сделайте, пожалуйста, чтобы сервер и код страниц указывали одну кодировку, лучше UTF-8 (Content-Type и meta charset).
Как проверить, что всё исправлено
Откройте сайт в браузере, нажмите Ctrl+U и найдите в начале кода <meta charset=…>. Заголовок сервера видно в Яндекс.Вебмастере: «Инструменты → Проверка ответа сервера». Проверьте сайт снова на yasnoseo.by.