Сделать Google индексировать весь пост, если он разделен на несколько страниц


8

Хотя это вопрос, это также серьезное предупреждение для издателей, которые разделяют их сообщения с помощью <!--nextpage-->.

Голый со мной. Я пользуюсь платформой с множеством авторов, которая очень высоко оценивается поисковыми системами. Делая улучшения, связанные с SEO, я заметил, что Google индексирует только первую страницу статьи, которая разделена на несколько страниц. Как я это заметил?

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

У меня вопрос, как я могу заставить поисковые системы индексировать всю статью, если она разделена на несколько страниц? В идеале, скрипт, который отображает полную статью, если посетитель является поисковой системой (если это не будет вредно для SEO). Другие предложения приветствуются.

С другой стороны, если бы я был знаком с техникой Black Hat, там была бы золотая жила контента, которую я мог бы использовать. Подумай об этом.

И в личной заметке, эта проблема должна быть решена в будущем обновлении Wordpress.

Обновление : здесь был задан похожий вопрос, в котором подробно рассказывалось, как Wordpress создает один и тот же канонический URL для всех страниц в разбивке на страницы , однако ответ, который был опубликован и помечен как правильный, не отвечает на вопрос. Это решение работает только для постраничных комментариев, а не постраничных постов.

Обновление 2 : Согласно этому сообщению в блоге Google, мы можем использовать rel=”next”и rel=”prev”для обозначения связи между страницами. Так, например, это то, что мы должны включить в <head>на странице 2 :

<link rel="canonical" href="http://domain.com/article/2" />
<link rel="prev" href="http://domain.com/article/1" />
<link rel="next" href="http://domain.com/article/3" />

И не должно быть rel = "prev" или "next", если после / до нее нет страницы.


Похоже, вы нашли ответ. Хотите отформатировать его как таковой и принять? Я думаю, что многие люди выиграют от этого.
Томас Бутелер

@tbuteler Хотя я нашел решение, которое заключается в добавлении уникального канонического URL-адреса на каждую постраничную страницу и включении link rel="prev"/"next"всякий раз, когда это необходимо, у меня нет сценария для него. Однако Тошо упомянул в чате, что у него может быть что-то. Следите за обновлениями ...
Кристина Купер

Я обновил код в своем ответе на вопрос, на который вы ссылались. Я проверил это, и это решает вашу проблему. Хорошая работа по поиску об этом недостатке!
Ши

Ответы:


2

Основная проблема для решения сценария: rel_canonicalне предлагает никакого полезного фильтра. Поэтому мы должны заменить эту функцию:

remove_action( 'wp_head', 'rel_canonical' );
add_action( 'wp_head', 't5_canonical_subpages' );

Следующая проблема: $GLOBALS['numpages']пусто раньше setup_postdata(). Мы могли бы вызвать эту функцию уже здесь, но это может иметь побочные эффекты.

Вот решение, которое добавляет правильные ссылки назад / вперед и предотвращает конфликтные отношения, вызванные adjacent_posts_rel_link_wp_head. Мы также подключились wp_headне позднее приоритета 9, чтобы отключить последний.

remove_action( 'wp_head', 'rel_canonical' );
add_action(    'wp_head', 't5_canonical_subpages', 9 );

/**
 * Extend version of the native function rel_canonical()
 *
 * @wp-hook wp_head
 * @return  void
 */
function t5_canonical_subpages()
{
    if ( ! is_singular() )
        return;

    if ( ! $id = $GLOBALS['wp_the_query']->get_queried_object_id() )
        return;

    $post = get_post( $id );
    setup_postdata( $post );

    # let WordPress do all the work
    if ( empty ( $GLOBALS['page'] ) )
        return rel_canonical();

    $permalink = get_permalink( $id );
    $canonical = t5_page_permalink( $permalink, $GLOBALS['page'] );
    echo "<link rel='canonical' href='$canonical' />";

    # next and prev links
    if ( 1 < $GLOBALS['page'] )
    {
        $prev = t5_page_permalink( $permalink, $GLOBALS['page'] - 1 );
        print "<link rel='prev' href='$prev' />";
    }

    if ( isset ( $GLOBALS['numpages'] ) && $GLOBALS['page'] < $GLOBALS['numpages'] )
    {
        $next = t5_page_permalink( $permalink, $GLOBALS['page'] + 1 );
        print "<link rel='next' href='$next' />";
    }

    # avoid conflicting pev/next links
    remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head' );
}

/**
 * Helper to get correct permalinks for sub-pages.
 *
 * @param  string $permalink
 * @param  int    $page
 * @return string
 */
function t5_page_permalink( $permalink, $page )
{
    if ( 1 == $page )
        return $permalink;

    # no pretty permalinks
    if ( '' === get_option( 'permalink_structure' ) )
        return add_query_arg( 'page', $page, $permalink );

    return $permalink . user_trailingslashit( $page, 'single_paged' );
}

Большое спасибо за сценарий. У вас есть время, чтобы добавить link rel="prev"/rel="next"функцию, как указано в Update 2моем вопросе.
Кристина Купер

Это потребует setup_postdata()чего-то, что должно произойти намного позже во время визуализации страницы.
fuxia

Должен ли я открыть для него отдельный вопрос, даже если для решения этой проблемы с индексацией требуется ссылка rel?
Кристина Купер

@ChristineCooper Я добавил это сейчас. Не уверен, какие побочные эффекты это может вызвать.
Fuxia

1
Я оставил это некоторое время, чтобы протестировать и посмотреть, как Google индексирует записи сейчас, и я рад подтвердить, что этот скрипт работает отлично. Отлично сработано!
Кристина Купер

0

Просто к сведению: плагин Yoast для WordPress SEO заботится о добавлении rel = prev и rel = next метаданных на <head>страницы. Этот парень (Йоаст) думает обо всем!


1
-1 Я знаю об этом, но я не желаю устанавливать массивный плагин SEO только для одной незначительной части его функций, равно как и вам, если вы не будете использовать все, что с ним связано.
Кристина Купер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.