Перейти к содержанию

Постоянные адреса WordPress

Мы научились готовить и передавать запись редактору. Теперь согласуем адреса «Веб-мастерской», прежде чем её материалы начнут получать внешние ссылки. Постоянный URL связывает текст с закладками, поисковой выдачей и ссылками других уроков. Результат этой главы — выбранная структура ссылок и таблица ожиданий, по которой можно заметить непреднамеренный переезд страницы.

WordPress поддерживает несколько схем адресов записей, включая технический вариант с ID и человекочитаемые постоянные ссылки. Экран настройки описан в официальном руководстве. Возможность открыть красивый адрес зависит также от веб-сервера и его правил маршрутизации. Поэтому изменение значения в панели и фактическая доступность страницы — два разных шага. В этой задаче ни панель, ни HTTP-выдача учебного стенда не проверялись.

Выбор короткой структуры

Для новых записей мастерской выбираем структуру /%postname%/. Статья о запросе HTML получает /html-request/, запись об изображениях — /image-shift/, статья о Git — /git-history/. Дата и рубрика не входят в путь. Это соответствует модели долгоживущих учебных текстов: переименование рубрики или исправление даты не должно требовать переноса статьи. Слаг задаём осмысленно и явно, а не принимаем случайную длинную транслитерацию полного заголовка.

Служебные страницы получают /about/, /contacts/ и /study/. В первом варианте у них нет родителей. Если сделать «Контакты» дочерней страницей «О мастерской», путь может измениться, поэтому иерархия страниц рассматривается как часть адресного договора. В будущих курсах отдельный тип материала будет иметь свой префикс /courses/. Такой префикс удобен для сущности курса, но добавление его к уже опубликованным урокам не является обязательным условием хорошей структуры.

Создадим полную исходную карту шести материалов:

key,kind,expected_path,action
about,page,/about/,create_on_isolated_lab
contacts,page,/contacts/,create_on_isolated_lab
study,page,/study/,create_on_isolated_lab
html-request,post,/html-request/,create_on_isolated_lab
image-shift,post,/image-shift/,create_on_isolated_lab
git-history,post,/git-history/,create_on_isolated_lab

Это учебные новые адреса, а не список перенаправлений ProfessorWeb. У действующего сайта с прежними .php маршрутами сначала сохраняют полный реестр URL и проверяют содержание. Нельзя автоматически сопоставить любой старый урок ближайшей новой рубрике и назвать результат сохранением трафика. Главная страница рубрики редко заменяет конкретное объяснение. Опыт ProfessorWeb показывает важность сохранения индивидуальных адресов, но наша мастерская пока начинает без исторического набора.

Как настройка превращается в запрос

После сохранения структуры запрос /html-request/ должен попасть к WordPress, а движок — определить нужную запись. При отсутствии корректной передачи запроса веб-сервер может вернуть свой 404 раньше приложения. В этом случае текст существует и доступен по техническому ID, но красивый путь не работает. Диагностика начинается с разграничения серверного ответа и ответа WordPress. Не создавайте дубликат записи с другим названием, пытаясь исправить проблему маршрутизации.

Для Apache могут использоваться правила .htaccess, для Nginx — соответствующая конфигурация передачи к приложению. Их нельзя считать взаимозаменяемыми. В уроке не приводится универсальный фрагмент для неизвестного хостинга: подкаталог, HTTPS-прокси и другие приложения на том же сервере меняют условия. На отдельном стенде используйте документированный способ своего окружения и сохраните сведения в паспорте. Выбранное имя workshop.test должно действительно открывать именно эту установку, а не другой локальный сайт.

Проверьте каждую строку карты анонимно. Ожидается успешный ответ с заголовком нужного материала, а не просто любой статус 200. Страница «Контакты» не должна показывать ленту всех записей. Редакторский предварительный просмотр не является этой проверкой. Добавьте неправильный путь /html-request-missing/: ожидается отсутствие материала, обычно 404, а не незаметный переход на главную с успешным статусом. Такой случай помогает проверить, что случайные адреса не маскируют ошибки навигации.

Изменение заголовка и изменение слага

Переименуем заголовок html-request в «Как браузер запрашивает HTML-документ», сохранив слаг. Ожидаемый адрес остаётся /html-request/. Теперь изменим рубрику: добавим «Практику» к уже выбранным «Основам веба». При нашей схеме адрес снова не меняется. Таким образом, редактор может уточнить представление материала без затрагивания публичной идентичности. Не нужно обещать абсолютную неизменность: плагины или собственные правила могли добавить другую маршрутизацию, поэтому вывод относится к выбранному договору.

Изменение самого слага — отдельный переезд. WordPress имеет механизмы поиска прежних слагов в некоторых сценариях, но не используйте их как исчерпывающую карту миграции. Перенос между типами материала, другой префикс, языковая версия и серверное правило могут выходить за этот механизм. Если старая ссылка уже используется, запишите её явно и определите сохранение маршрута либо постоянное перенаправление к эквивалентному содержимому. После настройки проверяйте конечный адрес и отсутствие циклов.

Рассмотрим ошибку: редактор меняет структуру на /%category%/%postname%/, потому что считает тематическую папку более понятной. Все записи получают другой путь, а выбор основной рубрики может стать дополнительным источником неоднозначности. Такое изменение требует проекта миграции, а не одной кнопки. Качество URL оценивается по устойчивости и смыслу, не по количеству ключевых слов. У нового проекта есть свобода выбора, у действующего — уже существующие обязательства перед внешними ссылками.

После изменения структуры проверьте ссылки, уже сохранённые внутри страниц и меню. Настройка маршрутизации не исправляет любой буквальный адрес в содержимом. Особое внимание уделите завершающему слешу и схеме HTTPS: сервер может нормализовать их перенаправлением, но цепочка должна быть короткой и вести на нужный документ. Если браузер показывает старую страницу, различайте кеш ответа и ошибочный маршрут. Повторная загрузка может подтвердить свежесть текста, однако только карта адресов объяснит, почему запрос попал именно к этому материалу.

Связь с редакционным процессом

Добавьте к карточке выпуска поле «адрес утверждён». Автор предлагает слаг, редактор проверяет его уникальность и назначение. При исправлении заголовка адрес не меняется без отдельной причины. Если WordPress добавил числовой суффикс из-за конфликта, выясните, какой объект уже использует выбранный слаг. Не удаляйте найденную страницу автоматически: она может быть частью навигации или ранее опубликованным материалом. Конфликт отражает столкновение сущностей, которое нужно разрешить на уровне модели.

Ожидаемое завершение урока — шесть рабочих адресов на самостоятельном стенде и зафиксированное правило изменения URL. Запросы, настройка rewrite и перенаправления здесь не выполнялись. В архиве лежит карта ожиданий с пустыми наблюдаемыми значениями. Теперь можно переходить к теме: она будет управлять оболочкой и списками, но не должна случайно менять эти договорённости. Смена внешнего вида и сохранение адресов рассматриваются как независимые требования, которые затем проверяются вместе.

Оглавление серии