На главную

04.02.2010

Перелинковка без плагинов

Рубрика: seo — admin @ 21:23

Перелинковка станиц сайта — очень важный момент поисковой оптимизации. Это важно и для индексации страниц, и поднятия их рейтинга. На каждую страницу сайта должна быть хотя бы одна ссылка с других страниц. Такие ссылки называют внутренними. О ссылках на прошлые записи нужно думать уже при написании записей в блог или другого контента (т.е. содержимого) на сайт. Стоит также обновлять и старые записи, добавляя в них ссылки на более новые страницы. Это та часть, которая делается руками. Остальное должно делаться автоматически.
Если речь идет о движке для блогов Wordpress , то обычно, это реализуется с помощью всевозможных плагинов для Wordpress. Например, плагин Simple Tags может создавать указанное количество ссылок на предыдущие записи в конце поста, отбирая их по тэгам. Также имеется возможность автоматической вставки внутренних ссылок по тегам непосредственно в самом посте.
А можно обойтись вообще без плагинов, встроив возможность перелинковки непосредственно в тему. Это тоже довольно удобный способ. Особенно, при обновлении движка. Меньше плагинов отключать и подключать. Вставил один раз код в файл темы и забыл. Этот код я нашел здесь...
Мне понравился подход перелинковки. Ведь при перелинковке по тэгам, если подобный тэг отсутствует, то некоторые записи могут остаться вообще без внутренних ссылок. А в данном случае каждый следующий пост ссылается на заданное количеству предыдущих по порядку. Таким образом, оказываются перелинкованы все записи, и при этом не единожды. Хотя перелинковку по тегам тоже можно организовать без плагинов.
Если в используемой теме Wordpress есть файл single.php то все в порядке. Вставляем туда, где хотим отображения ссылок. Если же нет, то вставлять его нужно в файл index.php. При этом необходимо разделить его на две части, иначе возникнет ошибка из-за повторного вызова функции уже на втором посте на главной странице.
Первую часть:
<?php
function show_previous_posts_from_category ($the_post_id, $the_category_id = 0, $post_num) {

$num = 0;
global $wpdb;

$sql = "SELECT wposts.*
FROM $wpdb->posts wposts
LEFT JOIN $wpdb->term_relationships ON (wposts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->term_taxonomy.term_id = '$the_category_id'
AND wposts.post_status = 'publish'
AND wposts.post_type = 'post'
AND wposts.ID < '$the_post_id'
ORDER BY wposts.ID DESC
LIMIT $post_num";

$result = $wpdb->get_results($sql, OBJECT);
global $post;
?>
<ul>
<?php
foreach ($result as $post) {
setup_postdata($post);
?>
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
<?php
$num++;
$save_ids[] = $post->ID;
}
if ( $num < $post_num || !$result ) {
$need_more = $post_num-$num;
$save_ids[] = $the_post_id;
$save_ids = join (',', $save_ids);
$more_posts = get_posts("numberposts=$need_more&category=$the_category_id&exclude=$save_ids");
foreach ($more_posts as $post){
setup_postdata($post);
?>
<li><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></li>
<?php
}
}
?>
</ul>
<?php } ?>

необходимо вставить до строк: <?php while (have_posts()) : the_post(); ?>
Вторую часть просто нужно вставить в то место, где предполагается вывод ссылок на предыдущие посты. Вторая часть:
<?php
$the_cat = get_the_category();
$the_cat_id = $the_cat[0]->cat_ID;
show_previous_posts_from_category($post->ID, $the_cat_id, 5);
wp_reset_query();
?>

Записи на похожую тематику

Комментариев нет »

Комментариев нет.

RSS-лента комментариев к этой записи. URL обратной ссылки

Оставить комментарий

CAPTCHA изображение Аудио версия
Перезагрузить изображение
rss

counts