Что означает %20
Стандарт адресов допускает ограниченный набор символов — латиницу, цифры и несколько служебных знаков. Пробел в этот набор не входит, и при передаче адреса по сети он кодируется процентной последовательностью: %20 — это шестнадцатеричный код номера пробела в таблице символов ASCII.
Видимый адрес: site.ru/каталог/садовые качели/
Реально передаётся: site.ru/%D0%BA%D0%B0.../%D1%81%D0%B0%D0%B4%D0%BE%D0%B2%D1%8B%D0%B5%20%D0%BA%D0%B0%D1%87%D0%B5%D0%BB%D0%B8/
Это тот же механизм кодирования, что применяется и к кириллице, разобранной подробно в статье про кириллицу в URL — любой символ за пределами базовой латиницы и цифр превращается в процентную последовательность байтов.
Почему иногда вместо %20 встречается плюс
В параметрах запроса — части адреса после знака вопроса — исторически сложилась альтернативная кодировка пробела знаком плюс, унаследованная от старого стандарта передачи форм. Оба варианта, %20 и +, обозначают пробел, но применяются в разных частях адреса и не всегда взаимозаменяемы.
| Часть адреса | Как кодируется пробел |
|---|---|
| Путь (до знака вопроса) | %20 |
| Параметры запроса (после вопроса) | + или %20, зависит от системы |
Для человекопонятного адреса, то есть для пути, эта развилка не должна возникать вовсе — там пробелов быть не должно с самого начала, поэтому вопрос кодирования становится неактуален.
Почему закодированный пробел — это плохо для адреса
- Нечитаемость. Строка из процентов и цифр не несёт для человека никакой информации о содержимом страницы.
- Длина. Каждый пробел превращается в три символа кода вместо одного видимого — адрес разбухает без всякой пользы.
- Ломается при копировании. В некоторых текстовых полях и приложениях процентная кодировка отображается некорректно или обрывается.
- Не совпадает с ожиданиями поисковой системы. Она ожидает увидеть разделитель слов — дефис, а не закодированный пробел.
Единственно верное решение — не допускать пробел в адрес вообще. При формировании ЧПУ пробел заменяется на дефис ещё до передачи адреса браузеру, и вопрос о его кодировании просто не возникает. Это ровно то, что делает шаг замены символов в любой функции транслитерации, разобранной в статье про транслит на PHP, JavaScript и Python.
Откуда в готовом адресе может взяться пробел
Если на действующем сайте встречаются закодированные пробелы в адресах, причина почти всегда одна из трёх:
- Модуль генерации ЧПУ не включён или настроен неверно, и система использует необработанное название страницы напрямую.
- Ссылка на страницу собрана вручную в шаблоне без прогона через функцию транслитерации.
- Адрес скопирован из внешнего источника — старой системы, другого сайта — вместе с пробелами и не был приведён к единому виду при переносе.
Как найти и исправить на своём сайте
- Проверьте карту сайта на наличие
%20в адресах — это самый быстрый способ обнаружить проблему массово. - Найдите шаблон или модуль, формирующий такие адреса, и убедитесь, что он прогоняет заголовок через функцию транслитерации.
- Для уже проиндексированных страниц с пробелами в адресе настройте 301-редирект на исправленный вариант с дефисами.
Чек-лист
- Пробел в пути адреса всегда заменяется на дефис при генерации, а не передаётся закодированным.
- Проверить карту сайта и действующие адреса на присутствие %20.
- Убедиться, что весь путь формирования адреса — от заголовка до сохранения в базе — проходит через единую функцию транслитерации.
- Исправленные адреса с пробелами сопровождать редиректом со старой версии.
Пробелы в значениях параметров запроса
Отдельная ситуация — пробел внутри значения параметра, а не в самом пути. Например, поиск по сайту со значением «садовые качели» в параметре запроса кодируется тем же способом, но эта часть адреса и не должна быть человекопонятной — параметры не участвуют в оптимизации адреса так, как участвует путь, о чём подробно в статье про параметры в URL.
Связь с именами загружаемых файлов
Та же проблема с пробелами регулярно встречается в именах файлов при загрузке на сайт — фотография с камеры или скачанный документ часто имеют пробелы в исходном имени. Правило то же самое: пробел заменяется дефисом при сохранении файла, а не остаётся закодированным в адресе, как разобрано в статье про имена файлов документов.
Частые вопросы
Что означает %20 в адресе страницы?
Это процентная кодировка пробела — стандарт адресов не допускает пробел в чистом виде, и при передаче по сети он превращается в трёхсимвольный код %20.
Почему в некоторых адресах вместо %20 стоит знак плюс?
Плюс — альтернативная кодировка пробела, исторически применяемая в параметрах запроса после знака вопроса. Для самого пути адреса используется %20, но в правильно сформированном ЧПУ пробелов там быть не должно вовсе.
Как избавиться от %20 в адресах своего сайта?
Убедиться, что формирование адреса проходит через функцию транслитерации, заменяющую пробел на дефис ещё до сохранения страницы. Для уже проиндексированных адресов с пробелами нужен редирект на исправленную версию.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.