Migrar de Phpbb a Mybb sin perder posicionamiento.

Nos enfrentamos de nuevo al mismo problema que cuando migramos un foro de phpbb a Vbulletin. En general, cuando cambiamos de sistema gestor de contenido (o incluso sin cambiar de CMS, si cambiamos el plugin o módulo que controla el seo), se producirá casi seguro un cambio en el formato de las url de nuestro sitio web. Si no realizamos las redirecciones correctamente, perderemos el posicionamiento de miles de mensajes, y el impacto en el numero de visitas diarias puede ser importante.

En el caso que nos ocupa, tenemos que migrar un foro de Phpbb a Mybb. Los motivos no importan, el cliente ha llegado a la conclusión de que Mybb satisface mejor sus necesidades que Phpbb, y nos ha preguntado si se puede hacer sin perder el posicionamiento. La respuesta es que si, se puede, al menos en el 99% de páginas posicionadas.

Partimos de un foro en phpbb, que para mas inri, tiene instalado el mod phpbb-seo. En nuestro caso no nos preocupa, porque lo único que necesitamos, es que en la url del foro phpbb esté el id de cada tema. Y está. A continuación podemos ver el formato de la url del foro generada por phpbb-seo:

http://www.eldominio.com/foro/subforo/titulo-del-tema-t2472.html

Parto de la base de que si estas leyendo este artículo, estas familiarizado con el procedimiento para importar los datos de phpbb a Mybb. Lo primero a tener en cuenta, es que el script de importación de datos, por algún motivo, durante la importación conserva la correspondencia entre el id para cada tema en phpbb, y el id en mybb, sin embargo al finalizar la importación, borra estos datos. Por consiguiente, tenemos que modificar ligeramente el script para que no borre los campos con las id’s de los temas en phpbb.

Abrimos el fichero /merge/index.php, buscamos la llamada a «delete_import_fields();«, y la comentamos. De esta manera, en la tabla threads, conservaremos para cada fila, el valor de la columna import_tid, es decir, el id de phpbb del tema importado.

Ejecutamos la importación normalmente, y una vez finalizada, tendremos que recurrir a un par de scripts de php para poder hacer las redirecciones. Dependerá de que plugin para seo instaléis en Mybb. Nosotros hemos optado por el script Google Seo, por dos motivos: por ser el que recomienda el propio Mybb, y en segundo lugar, porque encontramos la información necesaria para hacer la redirección de las url’s.

Brujuleando un poco por internet, encontramos el siguiente tema de discusión en el que se trata precisamente este asunto, y del cual hemos aprovechado parte de la solución propuesta, ya que en nuestro caso, la otra parte no nos funcionó y hemos tenido que improvisar.

La parte que hemos podido aprovechar son dos scripts de php que hay que crear y poner en el directorio raiz de nuestro foro (los copio y los pego aquí literalmente, sintiéndome agradecido a su autor por haber dedicado tiempo a hacerlos y compartirlos).

Creamos el archivo viewtopic.php con el siguiente contenido:

y a continuación creamos el archivo viewforum.php con este codigo (no os olvideis de darles permisos de ejecución):

Lo que hacen ambos scripts es recibir como parámetro la id del tema/foro en Phpbb, y hacer una consulta de base de datos para averiguar el nuevo id de mybb. Solo faltan unas reglas en el fichero .htaccess, para que cuando se detecte una url con el formato de phpbb/phpbbseo, se hagan las redirecciones 301 pertinentes para que pasen por estos scripts.

Aquí es donde puedo añadir algo de mi cosecha. Las reglas propuestas por el autor de los scripts, en mi caso no funcionaron, y tuve que personalizarlas:

[sourcecode]

#Regla para las urls de tema que llevan el id de la forma -tXXXX
RewriteCond %{REQUEST_URI} -t([0-9]+)
RewriteRule .* viewtopic.php?t=%1 [L,R=301]

#Regla para las urls de tema que llevan el id de la forma -topicXXXX
RewriteCond %{REQUEST_URI} topic([0-9]+)
RewriteRule .* viewtopic.php?t=%1 [L,R=301]

#Regla para las urls de foro que llevan el id de la forma -f=XXXX
RewriteCond %{QUERY_STRING} f=([0-9]+)
RewriteRule .* viewforum.php?t=%1 [L,R=301]

[/sourcecode]

Siguiendo el ejemplo anterior, podeis crear reglas personalizadas en el caso de que hubierais modificado la configuración de phpbb/phpbb-seo para crear urls con un formato diferente.

Aquí nos encontramos con un problema irresoluble, y es que en nuestro caso, no hemos sido capaces de redireccionar las url’s de los subforos. ¿El motivo? Porque nuestras url’s de subforo en phpbb eran de la siguiente manera:

http://www.midominio.com/foro/nombre-del-subforo/

Pero desgraciadamente, NO incluía el id del subforo. Sin tener el id del subforo en la url de phpbb, es imposible averiguar la nueva id despues de la importación. Afortunadamente, consideramos este contratiempo un mal menor, ya que lo importante, es mantener el posicionamiento de los miles de temas, y mantener el posicionamiento de las url’s de los subforos, es mucho menos importante.

Sin embargo, con la lección aprendida todavía fresca en la memoria, me doy cuenta de que la url que compone el plugin Google Seo de Mybb con la configuración por defecto, es de la siguiente manera:

http://www.midominio.com/foro/Thread-Titulo-del-tema

lo cual no me gusta ni un pelo, ya que si os fijais, no tenemos el id en la url, y si algún día quisiéramos migrar de mybb a otro tipo de foro, seríamos incapaces de realizar las necesarias redirecciones 301. Afortunadamente, revisando la configuración del plugin, descubro que es posible forzar que el id del tema se anexe al final de la url, en el panel de administracion de Mybb–>configuration—>settings—->google seo settings, tenemos las opciones:

Forzar el id de cada tema como sufijo.

A pesar de que ellos mismos no lo recomiendan (¿por que será? ¿debemos ser mal pensados?), activamos la opción que fuerza el id de tema como sufijo siempre, y no solo cuando dos títulos colisionan. Y en el cuadro de texto superior, podemos configurar como será el sufijo. Necesitamos algo que nos ayude en el futuro para crear una regla que nos permita extraer el id del tema, y a mi me parece suficiente lo que propone por defecto el plugin (dos guiones «–«). De esta manera, conseguimos que las url’s de nuestros temas queden tal que asi:

http://www.midominio.com/foro/Thread-Titulo-del-tema–3987

Como vemos, el id del tema (3987), se ha adjuntado al titulo del tema, precedido de dos guiones. Hacer una expresión regular para obtenerlo en el futuro, será fácil, por si tenemos que abandonar Mybb…

código fuente