phpBB, contenidos duplicados y etiqueta Canonical

Siempre he defendido phpBB como un buen sistema de foros, pero a veces creo que está pensando más en la Edad Media que para la era Internet. Y es que si hay una cosa que no me gusta absolutamente nada, es que las URL puede cambiar de forma estrepitosa según el navegante que venga, o buscador, además de poder generarse una de combinaciones bestiales.

Hace unas semanas tuve que actualizar un foro muy antiguo (versión 2 algo) a la nueva versión (la 3 algo), y me encontré con que, hace unos 4-5 años, le hice unos cambios por temas de SEO en el que las URL quedaban “chulas”. El problema es “deshacer todo el SEO que había hecho” para así, a partir de ahora, poder actualizar el software sin necesidad de ningún MOD raro de esos que se pueden montar…

Total, que tras la actualización han empezado a salir decenas de contenidos duplicados que no sabía cómo arreglar… hasta hoy que he encontrado una forma “razonable”. Lógicamente, esta forma razonable va a depender mucho de cada uno y de lo que pretenda con su foro, pero creo que para la mayoría de mortales servirá.

Y la forma razonable que planteo es sólo indexar estas 2 cosas:

  • Foros: sólo la primera página de cada foro.
  • Temas: indexar todos los temas y sus paginaciones

El resto (fichas de usuarios, combinaciones raras de foros o temas, paneles de gestión, ayudas, y demás) quedarían fuera de este sistema, ya que, a priori, no sirven para mucho, a la hora de aparecer en los resultados de búsqueda.

Lo bueno de este sistema, es que sirve para cualquier “style” (diseño) del phpBB, así que cualquiera lo debería de poder utilizar sin problema. Para ello, lo primero que hemos de hacer es activar las capacidades PHP del phpBB en los “style”. Para ello hay que:

  1. Entrar en el panel de Administradores
  2. Ir a la pestaña General -> Configuración del servidor -> Configuración de seguridad
  3. Permitir PHP en plantillas (Si se habilita esta opción, PHP e INCLUDEPHP serán convertidos en las plantillas) activar a SÍ.
  4. Aceptamos y ya tenemos el primero de los pasos… ya que ahora podemos programar dentro de los “diseños”.

Ahora hemos de ir al “diseño” que tengamos activo… para ello entraremos en Estilos -> Plantillas -> Editar (de la plantilla actual) -> overall_header.html. Allí buscaremos la línea del <title>...</title> y la sustituiremos por esto siguiente:

Descargar directamente como TXT (es posible que haya un problema con las comillas en el código siguiente y en el TXT funcionará correctamente).


<!-- PHP -->
if( $_SERVER["PHP_SELF"] == "/viewtopic.php" ) {
<!-- ENDPHP -->
<title>{TOPIC_TITLE}</title>
<!-- PHP -->
} elseif( $_SERVER["PHP_SELF"] == "/viewforum.php" ) {
<!-- ENDPHP -->
<title>{SITENAME}: {FORUM_NAME}</title>
<!-- PHP -->
} else {
<!-- ENDPHP -->
<title>{PAGE_TITLE} en {SITENAME}</title>
<!-- PHP -->
}
if( $_GET['p'] || $_GET['sid'] || $_GET['highlight'] ) {
echo "<meta name=\"robots\" content=\"noindex\" />\n";
} elseif( $_GET['f'] && $_GET['t'] && ($_GET['start']!=0) ) {
echo "<link rel=\"canonical\" href=\"http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?f=".$_GET['f']."&t=".$_GET['t']."&start=".$_GET['start']."\" />\n";
} elseif( $_GET['f'] && $_GET['t'] && ($_GET['start']==0) ) {
echo "<link rel=\"canonical\" href=\"http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?f=".$_GET['f']."&t=".$_GET['t']."\" />\n";
} elseif( $_GET['f'] && $_GET['t'] ) {
echo "<link rel=\"canonical\" href=\"http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?f=".$_GET['f']."&t=".$_GET['t']."\" />\n";
} elseif( $_GET['f'] && ($_GET['start']!=0) ) {
echo "<link rel=\"canonical\" href=\"http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?f=".$_GET['f']."&start=".$_GET['start']."\" />\n";
} elseif( $_GET['f'] && ($_GET['start']==0) ) {
echo "<link rel=\"canonical\" href=\"http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?f=".$_GET['f']."\" />\n";
} elseif( $_SERVER["PHP_SELF"] == "/" ) {
echo "";
} else {
echo "<meta name=\"robots\" content=\"noindex\" />\n";
}
<!-- ENDPHP -->

Con esto básicamente hacemos varias cosas:

  • Poner un título concreto para los temas (indexable)
  • Poner un título concreto para los foros (indexable)
  • Poner el título genérico para el resto de elementos (no indexable)
  • Controlar parámetros que generan duplicados (p, sid, highlight) y decirle que esas páginas “no las indexe”.
  • Controlar las páginas indexables (con sus parámetros correctos) y darles la URL con el meta-tag Canonical para que siempre tengan el mismo formato.
  • Controlar que el resto de páginas no se indexen.

El hecho de usar la etiqueta Canonical ha sido básicamente porque, aunque el phpBB genera URL del tipo viewtopic.php?f=2&t=100, puede ser que algún listillo ponga los parámetros de otra forma, y que ese enlace genere otros incorrectos…

En fin, como digo, yo lo he probado con el phpBB 3 y me funciona… aunque, lógicamente, se aceptan todo tipo de sugerencias, combinaciones de URL y demás, porque seguro que me he dejado alguna cosa y el código se puede mejorar (si alguien sabe alguna cosa, que lo comente y actualizaré el código encantado).

ACTUALIZACIÓN: faltaba que se pudiera indexar la página principal… así que he añadido un “if” por ahí para controlar esa página…

3 comentarios en “phpBB, contenidos duplicados y etiqueta Canonical”

  1. Hola Javier

    Muy bueno el post :) justo buscaba algo similar, pero no me funciona… :( aunque he de decirte que quizas las comillas me dan un problema (las reemplaze) si puedes poner un .TXT con el código limpio podria ser mejor ;)

    También aprovecho de comentarte si sabes algo de los permalinks en phpBB3

    Un saludo, muchas gracias :)
    Emiliano

  2. Hola

    Esto está muy bien para lo que dices, para ahorrarte trabajo de meter mods, etc. Pero si lo quieres optimizar al máximo creo que la mejor opción (he usado varias) es meterle el mod de phpbb-seo.com, si quieres ahorrar tiempo, normalmente en 10 o 15 días después de sacar la versión oficial desde phpbb.com, sacan un premod (ficheros del phpbb originales ya modificados con el mod) por lo que es descargar e instalar. A mi me va bastante bien en http://www.forosdefutbol.es

    Además lo complemento yo mismo metiéndole algunos nofollows a las urls de los perfiles, logins, faqs, etc

    Un saludo

Deja un comentario