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

8

Bien qu'il s'agisse d'une question, il s'agit également d'un avertissement sérieux aux éditeurs qui séparent leurs publications à l'aide <!--nextpage-->.

Nu avec moi. Je gère une plate-forme multi-auteurs très fréquentée qui se classe très haut sur les moteurs de recherche. En faisant des améliorations liées au référencement, j'ai remarqué que seule la première page d'un article qui est séparée en plusieurs pages est 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 affiché sur son propre site. Cela leur a permis de se classer plus haut que moi sur ce mot-clé particulier. En fait, permettez-moi de reformuler cela, l'article de mon site n'est même pas indexé au-delà de la première page.

Ma question est, comment puis-je faire en sorte que les moteurs de recherche indexent l'intégralité de l'article s'il est séparé en plusieurs pages? Idéalement, un script qui affiche l'article complet si le visiteur est un moteur de recherche (si cela ne serait pas préjudiciable au référencement). D'autres suggestions sont les bienvenues.

D'un côté, si j'étais dans les techniques de Black Hat, il y aurait une mine d'or de contenu que je pourrais exploiter. Pensez- y.

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

Mise à jour : 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é publiée et marquée comme correcte ne répond pas à la question. Cette solution fonctionne uniquement pour les commentaires paginés, pas pour les publications paginées.

Mise à jour 2 : Selon ce blog de Google, nous pouvons utiliser rel=”next”et rel=”prev”indiquer la relation entre les pages. Ainsi , par exemple, ce que nous devrions inclure dans <head>le page 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.

Christine Cooper
la source
On dirait que vous avez trouvé la réponse. Vous souhaitez le formater comme tel et l'accepter? Je pense que beaucoup de gens en bénéficieront.
Tomas Buteler
@tbuteler Bien que j'ai trouvé la solution qui consiste à ajouter une URL canonique unique sur chaque page paginée et à l'inclure link rel="prev"/"next"chaque fois que cela est nécessaire, je n'ai pas de script pour cela écrit. Cependant, toscho a mentionné dans le chat qu'il pourrait avoir quelque chose. Surveillez cet espace pour les mises à jour ...
Christine Cooper
J'ai mis à jour le code dans ma réponse à la question à laquelle vous avez fait référence. Je l'ai testé et cela résout votre problème. Bon travail pour trouver cette faille!
karité

Réponses:

2

Le problème de base pour une solution de script est: rel_canonicaln'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 des liens prev / next corrects, et elle empêche les relations conflictuelles causées par adjacent_posts_rel_link_wp_head. Nous avons trop accroché wp_headà la priorité 9 au plus tard pour désactiver ce dernier crochet.

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' );
}
fuxia
la source
Merci beaucoup pour le script. Avez-vous le temps d'ajouter la link rel="prev"/rel="next"fonctionnalité comme indiqué dans Update 2ma question.
Christine Cooper
Cela nécessiterait un setup_postdata()- quelque chose qui devrait se produire beaucoup plus tard lors du rendu de la page.
fuxia
Dois-je ouvrir une question distincte pour cela, même si le «lien rel» est nécessaire pour résoudre ce problème d'indexation?
Christine Cooper
@ChristineCooper J'ai ajouté cela maintenant. Je ne sais pas quels effets secondaires cela pourrait provoquer.
fuxia
1
J'ai laissé cela un moment pour tester et voir comment Google indexe les messages maintenant et je suis heureux de confirmer que ce script fonctionne parfaitement. Bien joué!
Christine Cooper
0

Juste pour info: le plugin WordPress SEO de Yoast se charge d'ajouter les métadonnées rel = prev et rel = next aux <head>pages. Ce gars (Yoast) pense à tout!

Miriam Schwab
la source
1
-1 J'en suis conscient mais je ne suis pas disposé à installer un plugin SEO massif uniquement pour une partie mineure de ses fonctionnalités, vous ne devriez pas non plus, sauf si vous utiliserez tout ce qui vient avec.
Christine Cooper