Comment gérer la pagination dans le header de la page avec rel=“next” and rel=“prev” avec le KnpPaginatorBundle

Si vous travaillez sur un projet avec Symfony2.3 et que vous désirez faire une liste paginée SEO friendly avec le bundle KnpPaginatorBundle, voici la marche à suivre !

Comme expliqué sur l’excellent article de Google Webmaster Central, la pagination doit bien se gérer au niveau des headers  de votre page.

Cela permet de lutter contre le contenu dupliqué, et il s’agit d’un moyen simple d’expliquer au robots d’indexation que cette page contient une liste paginée.

Avec symfony et le bundle KnpPaginatorBundle voici comment j’ai résolu ce probleme :

Dans mon controller j’ai rajouté ces lignes

 $paginator = $this->get('knp_paginator');
 $target = range('a', 'u');
 $slice = $paginator->paginate($target, $this->get('request')->query->get('pages', 1), 3);

puis je passe la variable $slice à twig :

 return $this->render('McwCmsBundle:Default:search.html.twig', array(
 'listResultat' => $listResultat,
  ...
 'slice' => $slice,
 ));

J’ai ensuite créé un template qui contient le code HTML à insérer dans le head de ma page :

{# metatag.htm.twig#}
{% if pageCount > 1 %}
 {% if first is defined and current != first %}
 <link rel="first" href="{{ url(route, query|merge({(pageParameterName): first})) }}" />
{% endif %}

{% if previous is defined %}
<link rel="prev" href="{{ url(route, query|merge({(pageParameterName): previous})) }}" />
{% endif %}

{% if next is defined %}
    <link rel="next" href="{{ url(route, query|merge({(pageParameterName): next})) }}" />
 {% endif %}
{% if last is defined and current != last %}
     <link rel="last" href="{{ url(route, query|merge({(pageParameterName): last})) }}" />
 {% endif %}
{% endif %}

Dans mon layout.html.twig j’ai placé dans le header ce code là :

  {% if slice is defined %}
 {{ knp_pagination_render(slice, 'TonBundle:TonDossier:metatag.htm.twig')|raw }}
 {% endif %}

A propos Nicolas Martin

Développeur Web, Référencement Naturel
Cet article, publié dans Uncategorized, est tagué , . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s