Добавление метатегов в секцию head через functions.php
У меня есть собственная тема, которую я разработал - это по сути 4-страничный сайт-брошюра для клиента. Мне удалось избавиться от нескольких плагинов, создав собственные типы записей, настроив gzip-сжатие через .htaccess и минификацию через gulp и т.д.
Я оставлю плагин безопасности на сайте, но хотел бы убрать Yoast, так как единственная его польза, учитывая насколько оптимизирован сайт, заключается в том, что он позволяет добавлять meta
теги и сниппеты для каждой страницы в целях SEO.
Существует ли функция, которую можно добавить в файл functions.php, чтобы добавлять <meta>
теги на разные страницы по их ID?
Когда ищешь информацию по этой теме в Google, находятся только статьи про плагины или общая информация о мета-тегах в WordPress.
Буду благодарен за любую помощь.
Павел.
Хук, который вам нужен, это конкретно wp_head
, который может выглядеть примерно так:
function theme_xyz_header_metadata() {
// Объект поста, если нужен
// global $post;
// Условие для страницы, если нужно
// if( is_page() ){}
?>
<meta name="abc" content="xyz" />
<?php
}
add_action( 'wp_head', 'theme_xyz_header_metadata' );
Однако, я считаю, что в долгосрочной перспективе, учитывая переносимость WordPress, плагин Yoast SEO является наиболее надежным и гибким решением для SEO, чем самостоятельная реализация, поэтому лично я советую не делать этого.

SEO своими руками:
1: В редакторе записи/страницы для страницы или записи: Добавьте пользовательские поля (метаданные) с необходимыми значениями для ваших SEO-метатегов.
- Например, откройте страницу "Условия и положения" в редакторе страниц и
добавьте пользовательское поле "
my_noindex
" со значением "y". - Примечание: если поле для пользовательских полей не отображается под редактором, нажмите на выпадающий список "Параметры отображения" в верхней части страницы, а затем отметьте галочкой пункт "Пользовательские поля".
2: В functions.php (или лучше в вашем собственном плагине site_functions, независимом от темы): Добавьте свою SEO-функцию (которая будет вызываться через wp_head), берущую эти значения для текущей страницы и вставляющую их в HTML <head>
.
// выводим тег noindex, если запись или страница имеет пользовательское поле "my_noindex" со значением "y"|"Y"|"yes" ...
function my_meta_tags() {
$noindex = (get_post_meta( get_queried_object_id(), 'my_noindex', true ));
if (strtolower(substr($noindex,0,1)) == 'y') {
?><meta name="robots" content="noindex" />
<?php return; // noindex, поэтому нет смысла делать другие SEO-действия
}
// другие SEO-действия
}
add_action( 'wp_head', 'my_meta_tags', 2);
Статья Джеффа Старра о создании собственного SEO-кода (включая title и description) может помочь. Она требует наличия пользовательской/дочерней темы, так как код размещается в header.php, однако большую часть кода можно адаптировать для функции my_meta_tags, приведённой выше. Возможно, она не реализует SEO именно так, как вам нужно, но в этом и прелесть DIY: если вы хотите использовать тщательно составленное описание из пользовательского поля (при его наличии), иначе - пользовательский отрывок, иначе - первые n символов описания, вы можете написать соответствующий код. Я тоже собирался написать статью на эту тему - если успею, добавлю ссылку.
Пропуски в коде статьи:
Предотвращение дублирования title-тегов (так как некоторые темы добавляют свои). Современные, правильно разработанные темы должны позволять вам удалять title-тег темы при добавлении следующего кода в functions.php вашего сайта.
function my_remove_stuff() { remove_theme_support( 'title-tag' ); } add_action('after_setup_theme', 'my_remove_stuff', 15);
Канонические теги. Добавьте следующее в первую функцию выше:
// если запись или страница имеет пользовательское поле "my_canon" $my_canon = get_post_meta( get_queried_object_id(), 'my_canon', true ); if ( ! empty($my_canon)) : echo '<link rel="canonical" href="' . $my_canon . '" />'; remove_action('wp_head', 'rel_canonical'); // предотвращает вставку канонического тега WordPress - нам не нужно два endif;
SEO-плагин - правильный выбор для многих пользователей. Однако если вам комфортно писать собственный код, это даёт множество преимуществ: избегание раздувания кода, избегание зависимости от плагина, избегание (в некоторых случаях) оплаты поддержки, SEO работает именно так, как вы хотите; отсутствие конфликтов SEO с вашими собственными динамическими пользовательскими страницами и т.д.

Вы можете добавить мета-теги непосредственно в файл functions.php вашей темы WordPress, подключившись к действию wp_head. Вот как можно добавить пользовательские мета-теги для разных страниц, используя их ID:
Добавьте этот код в файл functions.php вашей темы:
function custom_meta_tags() {
if (is_page()) {
global $post;
$page_id = $post->ID;
switch ($page_id) {
case 2: // Замените на реальный ID страницы
echo '<meta name="description" content="Описание для Страницы 2">';
echo '<meta name="keywords" content="ключевое1, ключевое2, ключевое3">';
break;
case 5: // Замените на реальный ID страницы
echo '<meta name="description" content="Описание для Страницы 5">';
echo '<meta name="keywords" content="ключевое4, ключевое5, ключевое6">';
break;
// Добавьте больше условий по мере необходимости
default:
echo '<meta name="description" content="Описание по умолчанию">';
echo '<meta name="keywords" content="ключевые, слова, по умолчанию">';
break;
}
}
}
add_action('wp_head', 'custom_meta_tags');
