Пример функции для seo-заголовков в WordPress 3+

Я не люблю прибегать к лишним плагинам, которые не факт, что хорошо написаны. Поэтому в своих шаблонах я использую код, написанный собственными ручками. В том числе, для генерирования сео-заголовков в «шапке». Делюсь с читателями примером исходничка.

function seo_title() {
	$std_title = get_bloginfo('name'); # задаем новый заголовок по умолчанию

	/* главная */
	if (is_home()) { $newtitle = $std_title; }
	/* пост или статичная страница  */
	if (is_single() || is_page()) { $newtitle = single_post_title("", false) ." - ".$std_title; }
	/* просмотр категории */
	if (is_category()) { $newtitle = "Вы просматриваете архивы категории <<" . single_cat_title("", false). ">> на " .$std_title; }
	/* просмотр архивов по тагу */
	if (is_tag()) { $newtitle = "Вы просматриваете архивы по тагу <<" .single_tag_title("", false). ">> на " .$std_title; }
	/* результаты поиска */
	if (is_search()) { $newtitle = "Результаты поиска по запросу '" . $s. "' - " .$std_title; }
	/* custom taxonomy & term */
	if (is_tax()) {
		$curr_tax = get_taxonomy(get_query_var('taxonomy'));
		$curr_term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy')); # current term data
		# if it's term
		if (!empty($curr_term)) {
			$newtitle = $curr_tax->label . " >> ". $curr_term->name ." - " .$std_title;
		} else {
			$newtitle = $curr_tax->label ." - " .$std_title;
		}
	}
	return $newtitle;
}

Эту функцию можно совершенствовать до беспредела на ваше усмотрение. А использование очень простое. Во-первых, скопируйте ее в functions.php. И потом исправьте в header.php таг title на следующее:

<title><?php echo seo_title(); ?></title>

Улучшенная функция и ее обсуждение теперь по этой ссылке. Спасибо!

  • Если на то пошло, то можно добавить функция задания индивидуального title для страницы, к примеру, с помощью дополнительных полей. Иногда это бывает полезно.

    • Извиняюсь, но это глупость. Title задается в названии поста. Строка 7 вносит этот title в заголовок. Рекомендации по СЕО для заголовков — стараться не делать их слишком длинными. Custom Fields тоже нужно с умом использовать.

      • А кто говорит, что после этого заголовок будет слишком длинным? возможно нужно просто альтернативный title

        А если к примеру такая ситуация, что заголовок записи очень длинный (ну всяко может быть просто).

        p.s. в textarea ну очень мелким шрифтом печатается, аж трудно читается что пишешь (ff 3.6.8)

      • Хотя бы 1.6em поставить. на 1em мелко сильно.

      • Ну заголовок сам по себе не должен быть длинным. Если не получается полностью сформулировать мысль в кратком заголовке, то, я думаю, лучше прибегнуть к варианту «Краткий заголовок» + поле Excerpt. Так логичнее, мне кажется. Ведь excerpt для того и был создан, чтобы через него передавать описания постов.

        ps. постараюсь исправить поскорее косяк со шрифтами

  • Nice.

  • Что уже кастом такономи используешь — хорошо. «Вы просматриваете архивы категории» — плохо, и с точки зрения SEO, и с удобства пользователя (несколько неадекватный текст в заголовке таба и хедера окна — сложнее понять, на какую вкладку перейти, когда обрезается).

    Ну и в твоем случае код был бы чище, если бы пошел по одному из двух путей: либо ретурнить получившуюся строку сразу в проверке условия, либо лучше добавлять get_bloginfo ('name') в самом конце к $newtitle. Вроде мелочь, а код читаемей сразу становится (это как правило, что if не стоит втягивать в одну строку %)

    И, конечно же, можно повесить хук/фильтр на wp_title и тогда в шаблоне header.php (apply_filter ('wp_title', 'seo_title')) ничего не придется менять и функцию можно будет просто переносить между проектами, просто вставляя в фанкшнс.

    P.S. И мои 5 копеек по поводу нового шаблона (клевый, да) — «отправить» не кнопкой, непереведенный плагин подписки на комментарии и сломавшая сетку «подписаться на комментарии».

    • Сергей, учел замечания и пожелания. Сейчас опубликую улучшения :).

      С плагином подписки разберусь потом.

  • Пост переехал сюда.