September 22, 2021

SEO-frienly URL на PHP с использованием .htaccess

Коротко о том как создавать динамические сайты с дружественными URL-адресами на PHP с ипользованием htaccess + поисковая оптимизация.

SEO-frienly URL в .htaccess

.htaccess это локальный конфигурационный файл вебсервера Apache. Он размещается в корневой папке сайта и служит дополнением к общим настройкам сервера. Для создания дружественных URL-адресов в него добавляется ряд опций перенаправления запросов, производимых модулем mod_rewrite.c:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?u=$1 [L,QSA]
</IfModule>

Разберём приведённые опции подробнее:

  • RewriteEngine on — включает механизм перенаправления запросов модуля mod_rewrite.c
  • RewriteCond %{REQUEST_FILENAME} !-f — исключает из правил переадресации физически существующие файлы.
  • RewriteCond %{REQUEST_FILENAME} !-d — исключает из правил переадресации физически существующие директории.
  • RewriteRule ^(.*)$ index.php?friendly_url=$1 [L,QSA] — перенаправление всех запросов на файл index.php, чей параметр friendly_url будет содержать идущий после домена запрашиваемый путь.

Разберём последнюю опцию RewriteRule подробнее. Она содержит два параметра и группу флагов. Первый параметр определяет регулярное выражение шаблона запрашиваемого URL-адреса, второй — файл назначения. Флаг L — останавливает процесс обработки правил перенаправления при наличии подходящего шаблону правила, а QSA — позволяет передавать файлу назначения параметры заданные в URL. Например, по запросу:

kadabrus.ru/cat?q=wolf

файл назначения получится следующим:

index.php?friendly_url=cat&q=wolf

В то время как без QSA мы бы получили лишь:

index.php?friendly_url=cat

SEO-frienly URL в PHP

Исходя из выше изложенного примера, обработчиком запросов является файл index.php, например:

<?php
$friendly_url = trim((string) $_GET['friendly_url'], '/');
$inc_name = '404';
if( empty($friendly_url) ){ $inc_name = 'index'; }
elseif($friendly_url == 'about' ){ $inc_name = 'login'; }
$inc_file = $ops['abs'] . DIRECTORY_SEPARATOR .'inc/mod_'. DIRECTORY_SEPARATOR . '.php';
if( !file_exists($inc_file) ) die('Module '. $inc_name .' not exists.');
include_once($inc_file);

Здесь полученное значение параметра friendly_url преобразуется в строку с «обрезанием» по краям возможного символа «/». Делается это для удобства дальнейшей опработки. Далее задаётся модуль по умолчанию — 404 (страница не найдена). Если $friendly_url пуст, это главная страница, если иное значение, то подбираем соответствующий модуль. Название модуля $inc_name определяет подключаемых файл $inc_file. Ну а дальше дело техники.

SEO-frienly URL

Поисковые системы отдают предпочтение статическим веб-страницам. Как это реализовать на PHP с использованием .htaccess вы уже знаете. Осталось лишь привести несколько рекомендаций по SEO-frienly URL:

  • поддерживайте чёткую структуру сайта;
  • структура URL сайта должна быть по возможности простой;
  • попробуйте упорядочить контент так, чтобы URL был понятен человеку;
  • по возможности используйте в URL слова, а не цифровые идентификаторы;
  • используйте в URL знаки препинания, лучше всего знак минус (-), а не символ подчеркивания (_);
  • не увлекайтесь SEO-frienly URL, чтобы не получить полностью и почти дублирующий контент (например, при использовании фильтров списков);
  • не забывайте блокировать служебные URL в robots.txt и/или добавлять rel=nofollow в их содержащих ссылках (например, страницы результатов поиска);
  • убедитесь, что все URL работают правильно.

Подробней об этом читайте в рекомендациях для вебмастеров от Google, Яндекс, прочее.