Провел SEO-аудит сайта при помощи labrika.ru. Оказалось что много технических ошибок. Важно этот файл готовить правильно 🙂 Пришлось колдовать с файлом robots txt. Готового плагина для этих целей у меня нет. Потому решил задачу программно.
Задачи для настройки robots.txt
- закрыть все страницы пагинации
- попало много страниц типа ?products-per-page= — закрыл
- закрыть страницы переадресации типа /gurl/ (это специфика только моего сайта, и больше нигде не нужно)
Результат https://wpcraft.ru/robots.txt
Пример кода для WordPress
- Важно заменить url в параметре Sitemap с учетом вашего сайта
- Строку с gurl можно не копировать, тк это нужно только для моего сайта
- Можно дополнять с учетом особенностей вашего сайта
add_filter('robots_txt', function($output){
$lines = [
'User-agent: *',
'Allow: /wp-admin/admin-ajax.php',
'Disallow: /wp-admin/',
'Disallow: /author/',
'Disallow: */comments',
'Disallow: */page/',
'Disallow: */embed',
'Disallow: *?s=',
'Disallow: *products-per-page=',
'Disallow: */gurl/',
'Disallow: /trackback',
'',
'Sitemap: https://wpcraft.ru/sitemap.xml',
];
ob_start();
echo implode( "\r\n", $lines );
$output = ob_get_clean();
return $output;
}, 999);
Где находится robots.txt в WordPress?
Такого файла нет. Он генерируется автоматически и потому лучше использовать указанный код выше.
Код можно вставить в functions.php темы WordPress или в папку wp-content/mu-plugins/ как файл robots.php.
Зачем делать это программно?
в тех плагинах что есть такой опции не было.
плагин который это делает хорошо — мне не знаком.
искать — дольше чем писать свой код.
вот и написал.
Почему не вписать сразу вместо домена сайта значение HTTP_HOST из массива $_SERVER?
А почему его надо писать?
Это опциональность и универсальность. А значит усложнение. Любое усложнение должно иметь веские причины.
Я тут не увидел веских причин усложнять код. Код решает конкретную задачу. Так он проще для чтения, понимания и написания.
Зачем буферизация?
ob_start();
echo implode( «\r\n», $lines );
$output = ob_get_clean();
return $output;
когда всё нужно одной строкой
return implode( «\r\n», $lines );