Drupal XMLsitemap, problemas variados

La actualización de la rama 1.0 a la 2.0 de Xmlsitemap fallaba bastante, así que, los sitemaps no se generan.


El problema es que no hay forma de añadir un sitemap, cuando vas a hacerlo te suelta un «There are currently no XML sitemap contexts available.».

Por mucho que incluyes cosas en el sitemap no hay forma. Después de buscar un rato resulta que la única forma que hay de hacerlo funcionar el desinstalar el modulo y volverlo a instalar.

Para hacerlo, vamos a usar Drush.

Drush es un conjunto de scripts que hacen la vida mas facil.

Para instalarlo, apt-get update drush. Después de vas al directorio en cuestión /drupal/sites/tu-site

Empezamos:

drush pm-uninstall xmlsitemap

xmlsitemap is not disabled. Use `pm-disable` command before [warning] `pm-uninstall`.

Normal, hay que desactivar el modulo (y los submodulos) antes de desinstalarlo.

Una vez desactivado, el error cambia …

To uninstall xmlsitemap, the following modules must be uninstalled [error] first: xmlsitemap_custom, xmlsitemap_engines, xmlsitemap_menu,
xmlsitemap_node, xmlsitemap_taxonomy, xmlsitemap_user

Así que a desactivar submodulos

drush pm-uninstall xmlsitemap_custom
The following modules will be uninstalled: xmlsitemap_custom
Do you really want to continue? (y/n): Y

You have an error in your SQL syntax; check the manual that [warning] corresponds to your MySQL server version for the right syntax to use
near 'type for db_type_placeholder AND status = unsupported type
for db_type_placehold' at line 1
query: SELECT 1 FROM xmlsitemap WHERE type = unsupported type for
db_type_placeholder AND status = unsupported type for
db_type_placeholder AND access = unsupported type for
db_type_placeholder LIMIT 0, 1 database.mysqli.inc:134
You have an error in your SQL syntax; check the manual that [warning] corresponds to your MySQL server version for the right syntax to use
near 'type for db_type_placeholder' at line 1
query: DELETE FROM xmlsitemap WHERE type = unsupported type for
db_type_placeholder database.mysqli.inc:134

xmlsitemap_custom was successfully uninstalled.

Hay que hacerlo para cada submodulo y luego con el modulo principal.

Al final queda algo como esto:

drush pm-uninstall xmlsitemap
The following modules will be uninstalled: xmlsitemap
Do you really want to continue? (y/n): y
Unknown table 'xmlsitemap' [warning] query: DROP TABLE xmlsitemap database.mysqli.inc:134
Unknown table 'xmlsitemap_sitemap' [warning] query: DROP TABLE xmlsitemap_sitemap database.mysqli.inc:134
xmlsitemap was successfully uninstalled. [ok]

Una vez desinstalado, volvemos a activar el modulo para que se vuelvan a crear las tablas correctamente.

Se vuelven a crear los directorios

The directory sites/xxx.xxx.xxx/files/xmlsitemap has been created.
The configuration options have been saved.

Ahora volvemos a configurarlo->admin->modules->xmlsitemap->settings

Minimum sitemap lifetime, lo ponemos a 1 día.

Content: Hay que incluir lo que queramos dentro del sitemap, por defecto mostrara algo como esto.

sitemap configuracion

Dentro de cada tipo de contenido, en la pestaña xmlsitemap, cambiamos a included.

sitemap configuracion

Una vez añadido todo lo que quieras incluir, activas el envío a los buscadores en «Search Engines» (acuérdate antes de hacer esto, date de alta en las herramientas de webmaster (la de google y la de bing) y verifica tus sites))

Después de todo esto se empezará a quejar diciendo que los archivos están obsoletos y necesitan volverse a generar, asi que fuerza una ejecución del cron para hacerlo.

«The XML cached files are out of date and need to be regenerated. You can run cron manually to regenerate the sitemap files.»

Una vez terminado, el sitemap ya muestra archivos …así que todo vuelve a funcionar. Subelos a los buscadores y espera a que vuelvan a indexarte (suele tardar algunos días).

**Actualizo**
En algunos sites migrados de 6.x a 7.x al procedimiento anterior hay que añadir lo siguiente:

Hay que entrar en la base de datos y borrar a mano dos tablas:

mysql -u root -p
use database;
DROP TABLE xmlistemap;
DROP TABLE xmlsitemap_sitemap;

Y ademas borrar cualquier referencia a xml sitemap en 3 tablas (yo no tenia ninguna, pero bueno)

SELECT * FROM `menu_links` WHERE link_path like ‘%xmlsitemap%’;
SELECT * FROM `system` WHERE ‘filename’ like ‘%xmlsitemap%’;
SELECT * FROM `variable` WHERE ‘filename’ like ‘%xmlsitemap%’;

En caso de que tengas algun registro …

DELETE FROM `menu_links` WHERE link_path like ‘%xmlsitemap%’;

Fuentes:
http://www.barnettech.com/content/drupal-7-xmlsitemap-problems-solved
https://drupal.org/node/1368094
http://www.tutorialspoint.com/mysql/mysql-drop-tables.htm
https://drupal.org/node/953846

Ha costado, pero parece que todo vuelve a funcionar correctamente.