Как автоматически создать мета-теги из контента в WordPress

Описание

Мета-тег description до сих пор постоянно используется поисковыми системами, он предоставляет текст по заголовком в выдаче результатов поиска. В нем должны содержаться релевантные ключевые слова для статьи, чтобы привлекать посетителей на ваш сайт. На движке WordPress по умолчанию этот тег не добавляется. Однако с легкостью проделывается с помощью различные SEO плагинов, но если у вас нет этих установленных плагинов, или вы просто забыли их установить.. В помощь вам этот сниппет.

Сниппет автоматически возьмет первые 125 символов вашей статьи и добавить их в мета тег description для текущей страницы.

Вставьте следующий код в файл functions.php вашей темы:

function create_meta_desc() {
    global $post;
if (!is_single()) { return; }
    $meta = strip_tags($post->post_content);
    $meta = strip_shortcodes($post->post_content);
    $meta = str_replace(array("\n", "\r", "\t"), ' ', $meta);
    $meta = substr($meta, 0, 125);
    echo "<meta name="description" content="$meta" />";
}
add_action('wp_head', 'create_meta_desc');

Ключевые слова

Указать поисковику ключевые слова, соответствующие странице, можно с помощью специального мета-тега:

<meta name='keywords' content='keyword1, keyword2, keyword3' />

Давайте добавим функцию, которая автоматически будет внедрять в исходный код страниц этот мета-тег. Для этого нужно вставить в файл functions.php следующий код:

	
function tp_meta_keywords ($home_keywords='',$def_keywords=''){
    global $wp_query,$post;
    if ( is_single() && !$out=get_post_meta($post->ID,'keywords',true) ){
        $out = '';
        $res = wp_get_object_terms( $post->ID, array('post_tag','category'), array('orderby' => 'none') ); // получаем категории и метки
        if ($res) foreach ($res as $tag) $out .= " {$tag->name}";
        $out = str_replace(' ',', ',trim($out));
        $out = "$out $def_keywords";
    }
    elseif (is_home()){
        $out = $home_keywords;
    }
    if ($out) return print "<meta name='keywords' content='$out' />\n";
    return false;
}

Что делает этот код? Он создает два списка ключевых слов — список слов, описывающих данную, конкретную страницу, и список слов, характеризующий блог в целом. Эти два списка он выводит один за другим, помечая весь массив, как ключевые слова. Ключевые слова, соответствующие всему блогу, на всех страницах одни и те же, ключевые слова для конкретной страницы формируются индивидуально — в них входят категории и теги. Таким образом для любой страницы блога формируется список ключевых слов, который будет показывать как тематику данной страницы (эти ключевые слова идут первыми), так и тематику блога (эти ключевые слова идут вторыми).

Теперь нужно правильно сформировать мета-тег с ключевыми словами, учитывая, на какой странице он будет вставлен. Для этого добавьте в файл header.php между

<head>

и

</head>

:

	
<?php if ( is_front_page() ) : ?>    //ключевые слова для стартовой страницы
    <meta name="keywords" content="keyword1, keyword2, keyword3, <?php $tags = get_tags(); if ($tags) { foreach ($tags as $tag) { echo ''. $tag->name.', '; } } ;?>"/> 
<?php elseif ( is_home() ) : ?>      //ключевые слова для домашней страницы
    <meta name="keywords" content="keyword1, keyword2, keyword3, <?php $tags = get_tags(); if ($tags) { foreach ($tags as $tag) { echo ''. $tag->name.', '; } } ;?>"/>
<?php elseif ( is_author() ) : ?>    //ключевые слова для архива постов автора
    <meta name="keywords" content="keyword1, keyword2, keyword3, <?php printf( _x( ' %s', 'Author name', 'p2' ), p2_get_archive_author() ); ?>, <?php $tags = get_tags(); if ($tags) { foreach ($tags as $tag) { echo ''. $tag->name.', '; } } ;?>"/>
<?php elseif ( is_category() ) : ?>  //ключевые слова для архива постов определенной категории  
    <meta name="keywords" content="keyword1, keyword2, keyword3, <?php {echo single_cat_title();} ?>, <?php $tags = get_tags(); if ($tags) { foreach ($tags as $tag) { echo ''. $tag->name.', '; } } ;?>"/>
<?php elseif ( is_tag() ) : ?>       //ключевые слова для архива постов с определенной меткой
    <meta name="keywords" content="keyword1, keyword2, keyword3, <?php printf( __( '%s', 'p2' ), single_tag_title( '', false) ); ?>, <?php $tags = get_tags(); if ($tags) { foreach ($tags as $tag) { echo ''. $tag->name.', '; } } ;?>"/>
<?php elseif ( is_search() ) : ?>    //ключевые слова для страницы результатов поиска
    <meta name="keywords" content="keyword1, keyword2, keyword3, <?php printf( __( '%s', 'p2' ), get_search_query() ); ?>, <?php $tags = get_tags(); if ($tags) { foreach ($tags as $tag) { echo ''. $tag->name.', '; } } ;?>"/>
<?php elseif ( is_page() ) : ?>      //ключевые слова для отдельной страницы
    <meta name="keywords" content="keyword1, keyword2, keyword3, <?php $tags = get_tags(); if ($tags) { foreach ($tags as $tag) { echo ''. $tag->name.', '; } } ;?>"/>
<?php elseif ( is_404() ) : ?>       //ключевые слова для страницы 404
    <meta name="keywords" content="keyword1, keyword2, keyword3, <?php $tags = get_tags(); if ($tags) { foreach ($tags as $tag) { echo ''. $tag->name.', '; } } ;?>"/>
<?php elseif ( is_single() ) : ?>    //ключевые слова для отдельного поста
    <?php tp_meta_keywords ('',', keyword4, keyword5, keyword6'); ?>
<?php else : ?>                      //ключевые слова для всех остальных случаев, не попадающих под вышеописанные условия
    <?php tp_meta_keywords ('',', keyword4, keyword5, keyword6'); ?>
<?php endif; ?>

Для стартовой и домашней страницы ключевые слова формируются двумя списками: keyword1, keyword2, keyword3 + теги всех постов, которые на них сейчас находятся. keyword1, keyword2, keyword3 — это набор постоянных ключевых слов, которые нужно добавлять к этому виду динамических страниц. Если вы не хотите их добавлять, то просто удалите. Естественно, под keyword1, keyword2, keyword3 я подразумеваю нужные вам ключевые слова, а не буквально вот эти.

Для страницы автора ключевые слова формируются в виде keyword1, keyword2, keyword3 + ник автора.

Для страницы архива постов определенной категории ключевые слова формируются в виде keyword1, keyword2, keyword3 + эта категория + все теги.

Для страницы архива постов с определенным тегом ключевые слова формируются в виде keyword1, keyword2, keyword3 + этот тег + все остальные теги.

Для страницы результатов поиска ключевые слова формируются в виде keyword1, keyword2, keyword3 + слова поискового запроса + все теги.

Для отдельной страницы ключевые слова формируются в виде keyword1, keyword2, keyword3 + все теги.

Для страницы 404 ключевые слова формируются в виде keyword1, keyword2, keyword3 + все теги.

Для поста ключевые слова формируются функцией в виде теги поста + категории + keyword4, keyword5, keyword6, где keyword4, keyword5, keyword6 — это набор ключевых слов, которые вы хотите, чтобы были в исходном коде любого поста.

Во всех остальных случаях, если таковые будут возможны, ключевые слова формируются функцией автоматически, так же, как и для одиночного поста

Индексация

Запретить поисковому роботу индексировать страницу можно, указав в исходном коде страницы специальный мета-тег:

<meta name='robots' content='noindex,nofollow' />

Можно создать специальную функцию, которая будет автоматически внедрять этот мета-тег в исходный код страниц, причем внедрим в нее произвольное поле, с помощью которого будем управлять индексацией одиночных записей. Для этого нужно вставить в файл functions.php:

  
function tp_meta_robots ($out = ''){
    global $post;
    $eURL = $_SERVER['REQUEST_URI'];
    //если это страницы, отвечающие указанным параметрам, то не индексируем
    if ( is_feed() || is_search() || is_day() || strpos($eURL, '/wp-login.php') !== false || strpos($eURL, '/wp-register.php') !== false )
        $out = "noindex,nofollow";
    //если в одиночной записи есть заполненное произвольное поле robotsmeta, то берется его значение
    if( is_singular() ){
        if( $robotsmeta = get_post_meta($post->ID, 'robotsmeta', true) )
            $out = $robotsmeta;
    }
    if( $out )
        return print "<meta name='robots' content='$out' />\n";
    return;
}

Что делает эта функция? Она определяет, отвечает ли текущая страница указанным параметрам, и если отвечает, то формирует мета-тег, запрещающий поисковому роботу индексацию текущей страницы. Указанный код человеческим языком можно прочитать так:

Если текущая страница фид RSS, или страница результатов поиска, или архив постов за определенный день, или страница входа, или страница регистрации, то индексация запрещена.
Если текущая страница является одиночной записью, то значение мета-тега берется из произвольного поля robotsmeta — как в нем указано, так и будет индексироваться эта одиночная запись.

То есть если вы не хотите, чтобы какой-нибудь пост индексировался, то заведите в нем произвольное поле robotsmeta, и впишите в него noindex,nofollow. Индексация остальных, динамически создаваемых страниц, будет зависеть от того, какие вы укажете дополнительные условия в строке 5:

is_category() — если это архив постов определенной категории
is_tag() — если это архив постов, помеченных определенным тегом
is_month() — если это архив постов за определенный месяц
is_year() — если это архив постов за определенный год
is_author() — если это архив постов определенного автора

Для того, чтобы мета-тег появился в исходном коде страницы, нужно вставить вывод функции в файл header.php между и :

<?php tp_meta_robots (); ?>
VN:F [1.9.22_1171]
Rating: 3.7/5 (3 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top