Создать URL
Генератор Правила транслитерации Как сделать ЧПУ Блог Вопросы и ответы Создать URL
Разбор

Пробелы в URL и почему появляется %20

Скопированный откуда-то адрес с непонятным %20 внутри пугает начинающих вебмастеров. Разбираем, что это такое, откуда берётся и почему в человекопонятном адресе пробелов быть не должно вовсе.

Что означает %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.

Откуда в готовом адресе может взяться пробел

Если на действующем сайте встречаются закодированные пробелы в адресах, причина почти всегда одна из трёх:

  1. Модуль генерации ЧПУ не включён или настроен неверно, и система использует необработанное название страницы напрямую.
  2. Ссылка на страницу собрана вручную в шаблоне без прогона через функцию транслитерации.
  3. Адрес скопирован из внешнего источника — старой системы, другого сайта — вместе с пробелами и не был приведён к единому виду при переносе.

Как найти и исправить на своём сайте

  1. Проверьте карту сайта на наличие %20 в адресах — это самый быстрый способ обнаружить проблему массово.
  2. Найдите шаблон или модуль, формирующий такие адреса, и убедитесь, что он прогоняет заголовок через функцию транслитерации.
  3. Для уже проиндексированных страниц с пробелами в адресе настройте 301-редирект на исправленный вариант с дефисами.

Чек-лист

  1. Пробел в пути адреса всегда заменяется на дефис при генерации, а не передаётся закодированным.
  2. Проверить карту сайта и действующие адреса на присутствие %20.
  3. Убедиться, что весь путь формирования адреса — от заголовка до сохранения в базе — проходит через единую функцию транслитерации.
  4. Исправленные адреса с пробелами сопровождать редиректом со старой версии.

Пробелы в значениях параметров запроса

Отдельная ситуация — пробел внутри значения параметра, а не в самом пути. Например, поиск по сайту со значением «садовые качели» в параметре запроса кодируется тем же способом, но эта часть адреса и не должна быть человекопонятной — параметры не участвуют в оптимизации адреса так, как участвует путь, о чём подробно в статье про параметры в URL.

Связь с именами загружаемых файлов

Та же проблема с пробелами регулярно встречается в именах файлов при загрузке на сайт — фотография с камеры или скачанный документ часто имеют пробелы в исходном имени. Правило то же самое: пробел заменяется дефисом при сохранении файла, а не остаётся закодированным в адресе, как разобрано в статье про имена файлов документов.

Частые вопросы

Что означает %20 в адресе страницы?

Это процентная кодировка пробела — стандарт адресов не допускает пробел в чистом виде, и при передаче по сети он превращается в трёхсимвольный код %20.

Почему в некоторых адресах вместо %20 стоит знак плюс?

Плюс — альтернативная кодировка пробела, исторически применяемая в параметрах запроса после знака вопроса. Для самого пути адреса используется %20, но в правильно сформированном ЧПУ пробелов там быть не должно вовсе.

Как избавиться от %20 в адресах своего сайта?

Убедиться, что формирование адреса проходит через функцию транслитерации, заменяющую пробел на дефис ещё до сохранения страницы. Для уже проиндексированных адресов с пробелами нужен редирект на исправленную версию.

Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.

Читайте также