Перейти до вмісту
🛠 Як додати розширення .html до URL-адрес WordPress

🛠 Як додати розширення .html до URL-адрес WordPress

Перенесли сайт із Joomla або статичного HTML на WordPress, а пошуковики вже проіндексували сотні сторінок із .html у кінці? Втрачати позиції не хочеться, а стандартні налаштування постійних посилань такого формату не дають.

На практиці .html в URL потрібен не для краси. Це страховка від 404 помилок під час переїзду, коли стара структура site.ru/page.html змінюється на site.ru/page/. Кожне бите посилання в індексі — це втрата трафіку. На щастя, WordPress дає змогу додати розширення .html штатно, без милиць і плагінів.

Нижче, три способи: через адмінку (найпростіший), через код functions.php і для довільних типів записів. Плюс безпечне видалення .html із редиректом, якщо формат більше не потрібен.

💡 Швидкий огляд:

  • Додати .html через Налаштування → Постійні посилання, 30 секунд, без коду
  • Якщо штатний спосіб не спрацював, правимо functions.php (3 рядки)
  • Для довільних типів записів, фільтр post_type_link
  • Прибрати .html без 404, редирект у .htaccess

Раніше, за часів статичних сайтів, кожна сторінка була фізичним .html-файлом на сервері. Браузер запитував site.ru/about.html і отримував готовий документ. WordPress працює інакше: всі URL, віртуальні, їх обслуговує index.php через mod_rewrite.

Однак звичка до «файлових» закінчень жива й досі. Типові сценарії, коли .html справді потрібен:

  • Редизайн або переїзд зі статичного сайту. Старі URL уже в індексі Google і Яндекса. Змінювати їх без редиректу, гарантований обвал позицій на 2-4 місяці.
  • Міграція з Joomla, Drupal, ModX. Багато CMS старої школи за замовчуванням генерували .html у кінці адреси.
  • Вимога замовника. Клієнт «хоче як було», і крапка. Сперечатися довше, ніж зробити.

WordPress дає змогу закрити всі три випадки без жодного плагіна.

Спосіб перший: через адмінку

Найшвидший шлях. Зайдіть у Налаштування → Постійні посилання і виберіть варіант «Довільно».

У полі структури допишіть .html у кінець шаблону. Наприклад:

1/%category%/%postname%.html

Або якщо категорії не потрібні:

1/%postname%.html

Натисніть «Зберегти зміни». Готово. Всі нові й наявні URL записів отримають закінчення .html. Сторінки сайту (page) цей спосіб не зачіпає, для них знадобиться код із наступного розділу.

Зверніть увагу: якщо на сайті вже є проіндексовані посилання без .html, WordPress сам редирект зі старих URL на нові НЕ робить. Знадобиться окремий плагін редиректів або правила в .htaccess.

Спосіб другий: через functions.php

Буває, що адмінка не дає результату: тема або інший плагін перевизначають структуру посилань. Тоді йдемо в код.

Додайте в functions.php дочірньої теми або через плагін Code Snippets:

1/**
2 * Додає .html в кінець URL сторінок WordPress.
3 * Після вставки коду зайдіть у Налаштування → Постійні посилання
4 * і натисніть «Зберегти зміни» для скидання кешу rewrite-правил.
5 */
6add_action('init', function() {
7 global $wp_rewrite;
8 if (! strpos($wp_rewrite->get_page_permastruct(), '.html')) {
9 $wp_rewrite->page_structure .= '.html';
10 }
11});

Що тут відбувається: хук init спрацьовує під час кожного завантаження WordPress і додає .html до структури URL сторінок через властивість page_structure глобального об'єкта $wp_rewrite. Перевірка strpos страхує від подвійного додавання, якщо код вставили двічі.

Після додавання коду обов'язково зайдіть у Налаштування → Постійні посилання і натисніть «Зберегти зміни». Без цього кроку WordPress не перебудує кеш rewrite-правил, і нові URL не запрацюють, отримаєте 404.

Якщо штатний спосіб і код не допомагають, можна підключити плагін Permalink Manager Lite. У нього 100 000+ активних установок, рейтинг 5 зірок і підтримка rewrite-правил для будь-якого типу контенту, включно з таксономіями та WooCommerce.

Як додати.html довільним типам записів (CPT)

У вас на сайті портфоліо, відгуки, товари або інший тип контенту, створений через register_post_type. Штатний екран «Постійні посилання» на них не впливає. Працюємо через фільтр post_type_link:

1/**
2 * Додає розширення .html до URL довільного типу записів "portfolio".
3 * Замініть 'portfolio' на свій slug CPT.
4 */
5function sdstudio_cpt_html_permalink($post_link, $post) {
6 if ($post->post_type === 'portfolio') {
7 return home_url('/portfolio/' . $post->post_name . '.html');
8 }
9 return $post_link;
10}
11add_filter('post_type_link', 'sdstudio_cpt_html_permalink', 10, 2);

Після вставки коду знову Налаштування → Постійні посилання → Зберегти зміни. Фільтр post_type_link працює на льоту: WordPress формує URL, ви перехоплюєте його для потрібного типу записів і дописуєте .html.

Якщо CPT зареєстрований із кастомним слагом ('rewrite' => array('slug' => 'works')), використовуйте його в home_url() замість стандартної назви типу.

Як прибрати.html і не зламати індексацію

Вирішили повернутися до чистих URL без розширень? Просто видалити .html із налаштувань недостатньо. Старі посилання, які вже потрапили в індекс пошуковиків, стануть 404.

Порядок дій:

  • Приберіть .html із поля «Довільно» в Налаштування → Постійні посилання і збережіть.
  • Видаліть код із functions.php, якщо додавали.
  • Додайте в .htaccess (у корені сайту, до блоку # BEGIN WordPress) редирект:
1RewriteEngine On
2RewriteCond %{REQUEST_FILENAME} !-f
3RewriteRule ^portfolio/(.+)\.html$ /portfolio/$1 [R=301,L]

Для звичайних записів і сторінок правило аналогічне, достатньо замінити /portfolio/ на потрібний сегмент. R=301 вказує пошуковикам, що переїзд постійний: вага посилання передається новому URL.

Перевірте результат: відкрийте в браузері стару адресу з .html, має відбутися переадресація на версію без розширення. Потім зазирніть у Google Search Console через пару тижнів і переконайтеся, що кількість проіндексованих 404 знижується.

Відео: додаємо.html за 2 хвилини

Коротка демонстрація всіх трьох способів на живому сайті WordPress:

⁉️🤔 Часті запитання

Чи працює метод із таксономіями, рубриками та мітками?

Штатний екран постійних посилань таксономії не зачіпає. Для рубрик і міток знадобляться власні rewrite-правила через add_rewrite_rule() або функціонал Permalink Manager Pro. Але на практиці .html в URL рубрик використовують рідко: пошуковики нормально сприймають /category/seo/ без розширення.

Що станеться зі старими посиланнями без.html після зміни структури?

WordPress не створює автоматичний редирект зі старих URL на нові. Якщо сайт уже проіндексований, після зміни структури старі посилання почнуть віддавати 404. Рішення: плагін редиректів (наприклад, Redirection) з автоматичним відстеженням змін постійних посилань. Він запам'ятовує старий slug і сам підставляє 301.

Чи можна використовувати.php,.htm або інше розширення?

Технічно так, WordPress обробляє будь-який рядок у полі «Довільно». Але з погляду пошуковиків .php виглядає підозріло (зазвичай видає технологію сервера), а .htm, застарілий формат з епохи Windows 3.1. Розширення .html нейтральне, звичне і не викликає запитань ні в користувачів, ні в пошукових роботів.

Чи допоможе це під час перенесення блогу з Blogger на WordPress?

Так, це класичний сценарій. Blogger за замовчуванням віддавав URL у форматі /2024/06/post-title.html. Під час імпорту в WordPress через штатний інструмент структура ламається на /2024/06/post-title/. Додавання .html у налаштування постійних посилань зберігає сумісність, усі старі адреси продовжують працювати без ручних редиректів.

Чи варто додавати.html: підсумковий розклад

Якщо коротко: для нового проєкту на WordPress з нуля .html не потрібен. Чисті URL site.ru/post-name/ — це стандарт, який розуміють і користувачі, і пошуковики.

Але є два сценарії, де .html повністю виправданий: переїзд зі статичного сайту або іншої CMS і міграція з Blogger. В обох випадках ви зберігаєте позиції в пошуку й економите тижні на ручних редиректах.

Найнадійніший шлях, штатне налаштування через адмінку. Не спрацювало, functions.php. Для CPT, фільтр post_type_link. Усі три способи не потребують плагінів і не навантажують сайт. А коли .html стане не потрібен, .htaccess із 301 редиректом акуратно передасть вагу новим URL.