web-dev-qa-db-fra.com

Faire en sorte que Google indexe l'intégralité du message s'il est séparé en plusieurs pages

Même s’il s’agit d’une question, c’est aussi unserious warningpour les éditeurs qui séparent leurs publications en utilisant <!--nextpage-->.

Nu avec moi. Je gère une plate-forme multi-auteurs à fort trafic qui occupe une place très importante dans les moteurs de recherche. Lors de l'amélioration du référencement, j'ai remarqué que seule la première page d'un article séparé en plusieurs pages était indexée par Google. Comment ai-je remarqué cela?

Parce que quelqu'un a saisi le contenu des pages non indexées d'un article et l'a posté sur son propre site. Cela leur a valu de se classer plus haut que moi sur ce mot clé. En fait, laissez-moi reformuler, l'article de mon site n'est même pas indexé au-delà de la première page.

Ma question est la suivante: comment puis-je obliger les moteurs de recherche à indexer l’article entier s’il est séparé en plusieurs pages? Idéalement, un script affichant l'article completifle visiteur est un moteur de recherche (si cela ne nuit pas au référencement). D'autres suggestions sont les bienvenues.

En passant, si j'aimais les techniques de Black Hat, il y aurait une mine d'or de contenu que je pourrais exploiter. Pensez à ce sujet.

Et sur une note personnelle, ce problème devrait être abordé dans une future mise à jour de Wordpress.

Update: Une question similaire expliquant comment Wordpress crée la même URL canonique pour toutes les pages d'une séquence paginée a été posée ici , mais la réponse qui a été posté et marqué comme correct ne répond pas à la question. Cette solution fonctionne uniquement pour les commentaires paginés, pas les messages paginés.

Update 2: Selon this billet de blog de Google, nous pouvons utiliser rel=”next” et rel=”prev” pour indiquer la relation entre les pages. Ainsi, par exemple, voici ce que nous devrions inclure dans <head> danspage 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" />

Et il ne devrait pas y avoir de rel = "prev" ou "next" s'il n'y a pas de page après/avant.

8
Christine Cooper

Le problème de base d'une solution de script est le suivant: rel_canonical n'offre aucun filtre utile. Nous devons donc remplacer cette fonction:

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

Le problème suivant: $GLOBALS['numpages'] est vide avant setup_postdata(). Nous pourrions appeler cette fonction déjà ici, mais cela pourrait avoir des effets secondaires.

Voici une solution qui ajoute également les liens corrects précédent/suivant et évite les conflits de relations causés par adjacent_posts_rel_link_wp_head. Nous avons trop accroché wp_head au plus tard à la priorité 9 pour désactiver ce dernier.

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' );
}
2
fuxia

Just FYI: Le plugin WordPress SEO de Yoast prend en charge l’ajout des métadonnées rel = prev et rel = next au <head> des pages. Ce mec (Yoast) pense à tout!

0
Miriam Schwab