SEO своими руками: title

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

Предыдущая запись о seo без плагинов: SEO своими руками: description

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

<title>Заголовок</title>

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

function tp_meta_title ($sep=" / ",$bloginfo_name=''){
	global $wp_query,$post;
	if (!$bloginfo_name) $bloginfo_name = get_bloginfo('name');
	$wp_title = wp_title($sep, 0, 'right');

	if (is_category() || is_tag()){
		$out = $match[1] ? $match[1].$sep : ((is_tag())?"Метка:":"Категория:")." $wp_title";
	}
	elseif (is_singular()) $out = ($free_title = get_post_meta($post->ID, "title", true)) ? $free_title.$sep : $wp_title;
	elseif (is_author()) $out = "Записи автора $wp_title";
	elseif (is_day() || is_month()) $out = "Архив за $wp_title";
	elseif (is_year()) $out = "Архив за $wp_title";
	elseif (is_search()) $out = 'Результаты поиска по запросу: '. strip_tags($_GET['s']) . $sep;
	elseif (is_404()) $out = "Ошибка 404 - страница не существует".$sep.$wp_title;

	$out = trim($out.$bloginfo_name);
	if ($paged = get_query_var('paged')) $out = "$out (страница $paged)";
	return print $out;
}

Эта функция формирует текст для тега title:

  • если это это архив постов определенной категории или постов, помеченных определенным тегом, то заголовок будет вида Категория: Название категории / Название блога (страница) — Описание блога
  • если это это архив постов, помеченных определенным тегом, то заголовок будет вида Метка: Название тега / Название блога (страница) — Описание блога
  • если это архив определенного автора, то заголовок будет вида Записи автора Автор / Название блога (страница) — Описание блога
  • если это архив постов за определенный день, то заголовок будет вида Архив за День / Месяц / Год / Название блога (страница) — Описание блога
  • если это архив постов за определенный месяц, то заголовок будет вида Архив за Месяц / Год / Название блога (страница) — Описание блога
  • если это архив постов за определенный год, то заголовок будет вида Архив за Год / Название блога (страница) — Описание блога
  • если это страница результатов поиска, то заголовок будет вида Результаты поиска по запросу: Поисковый запрос / Название блога (страница) — Описание блога
  • если это страница ошибки 404, то заголовок будет вида Ошибка 404 — страница не существует / Страница не найдена / Название блога — Описание блога

Заголовок формируется из данных о странице. Чтобы он появился, нужно вставить следующий код в файл header.php между head и /head:

<title> - </title>

В функции один дополнительный параметр — / — это сепаратор, разделяющий разные данные о странице, записанные в одну строчку. Вы можете использовать и другой разделитель (часто используют тире, кавычки, стрелочки, и другие подобные знаки — существенной разницы между ними нет).

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. Артур

    Здравствуйте! Спасибо за это решение.. Всё отлично работает, но не могли бы Вы подсказать каким образом удалить из title, сформированного для поста, название блога..

    Ответить
    1. tiaurus автор

      Название блога title страницы формируется строкой

      if (!$bloginfo_name) $bloginfo_name = get_bloginfo('name');

      Замените ее на

      if (!$bloginfo_name) $bloginfo_name = '';
      Ответить
  2. Артур

    Проблема в том, что мне нужно убрать название блога только из одиночной записи..

    Ответить
    1. tiaurus автор

      Ну тогда нужно изменить весь код функции. Вот примерно так:

      function tp_meta_title ($sep=" / ",$bloginfo_name=''){
      	global $wp_query,$post;
      	if (is_category() || is_tag()){
      	    if (!$bloginfo_name) $bloginfo_name = get_bloginfo('name');
      	    $wp_title = wp_title($sep, 0, 'right');	
      	    $out = $match[1] ? $match[1].$sep : ((is_tag())?"Метка:":"Категория:")." $wp_title";
      	}
      	elseif (is_singular()) {
      	    if (!$bloginfo_name) $bloginfo_name = '';
      	    $sep = '';
      	    $wp_title = wp_title($sep, 0, 'right');	
      	    $out = ($free_title = get_post_meta($post->ID, "title", true)) ? $free_title.$sep : $wp_title;
      	}    
      	elseif (is_author()) {
      	    if (!$bloginfo_name) $bloginfo_name = get_bloginfo('name');
      	    $wp_title = wp_title($sep, 0, 'right');
      	    $out = "Записи автора $wp_title";
      	}    
      	elseif (is_day() || is_month()) {
      	    if (!$bloginfo_name) $bloginfo_name = get_bloginfo('name');
      	    $wp_title = wp_title($sep, 0, 'right');
      	    $out = "Архив за $wp_title";
      	}    
      	elseif (is_year()) {
      	    if (!$bloginfo_name) $bloginfo_name = get_bloginfo('name');
      	    $wp_title = wp_title($sep, 0, 'right');
      	    $out = "Архив за $wp_title";
      	}    
      	elseif (is_search()) {
      	    if (!$bloginfo_name) $bloginfo_name = get_bloginfo('name');
      	    $wp_title = wp_title($sep, 0, 'right');
      	    $out = 'Результаты поиска по запросу: '. strip_tags($_GET['s']) . $sep;
      	}    
      	elseif (is_404()) {
      	    if (!$bloginfo_name) $bloginfo_name = get_bloginfo('name');
      	    $wp_title = wp_title($sep, 0, 'right');
      	    $out = "Ошибка 404 - страница не существует".$sep.$wp_title;
      	}    
      	$out = trim($out.$bloginfo_name);
      	if ($paged = get_query_var('paged')) $out = "$out (страница $paged)";
      	return print $out;
      }
      

      Тут для каждого вида страницы формируется свой title. Для постов он определяется условием is_singular.

      Ответить
  3. Артур

    Спасибо огромное.

    Ответить