Simple XML sitemap

Genera sitemaps XML hreflang que cumplen con los estándares para mejorar el SEO, notifica a los motores de búsqueda sobre cambios en el sitio web mediante los protocolos IndexNow y ping de sitemap, y proporciona un framework para desarrollar tipos de sitemap personalizados.

simple_sitemap
131,627 sites
149
drupal.org

Install

Drupal 11, 10 v4.2.3
composer require 'drupal/simple_sitemap:^4.2'
Drupal 9 v4.1.9
composer require 'drupal/simple_sitemap:^4.1'

Overview

Simple XML Sitemap es un módulo SEO integral que genera sitemaps XML conforme al estándar hreflang de Google. El módulo indexa la mayoría de los tipos de Entity de contenido de Drupal de forma predeterminada, incluyendo Node, términos de taxonomía, enlaces de menú, usuarios y tipos de Entity contribuidos como productos de commerce.

El módulo admite múltiples instancias de sitemap con diferentes tipos y configuraciones, soporte multilingüe hreflang, indexación de imágenes, enlaces personalizados e integración con Views a través de submódulos. La generación del sitemap se realiza mediante procesamiento de cola para un rendimiento óptimo en sitios grandes.

Dos submódulos opcionales amplían la funcionalidad: Simple XML Sitemap (Search engines) habilita el envío automático a motores de búsqueda mediante el protocolo IndexNow y ping tradicional de sitemap, mientras que Simple XML Sitemap (Views) proporciona integración con el módulo Views para indexar vistas con argumentos.

El módulo proporciona métodos API extensivos para la gestión programática de sitemaps, incluyendo configuración de Entity y enlaces personalizados, generación de sitemaps y extensibilidad mediante plugins personalizados de Sitemap Generator y URL Generator.

Features

  • Genera sitemaps XML que cumplen con los estándares siguiendo la especificación hreflang de Google para sitios multilingües
  • Indexa todos los tipos de Entity de contenido incluyendo Node, términos de taxonomía, enlaces de menú, usuarios y productos de commerce
  • Admite múltiples instancias de sitemap con diferentes configuraciones accesibles en URLs únicas
  • Generación automática de sitemap mediante cron con intervalos configurables
  • Generación manual mediante interfaz de administración, comandos Drush o API programática
  • División de sitemap con generación automática de índice cuando se excede el umbral máximo de enlaces
  • Configuraciones de anulación por tipo de Entity, por bundle y por Entity para inclusión en el índice, prioridad, frecuencia de cambio e inclusión de imágenes
  • Soporte de enlaces personalizados para agregar rutas internas arbitrarias a los sitemaps
  • Hoja de estilos XSL legible con columnas ordenables para navegación del sitemap
  • Soporte del protocolo IndexNow para notificación instantánea a motores de búsqueda sobre cambios de contenido
  • Envío tradicional de ping de sitemap a motores de búsqueda (obsoleto)
  • Integración con Views para indexar páginas de vista incluyendo aquellas con argumentos
  • Arquitectura de plugins extensible para generadores de sitemap y generadores de URL personalizados
  • Generación basada en cola para manejar sitios grandes con cientos de miles de enlaces
  • Opciones de ajuste de rendimiento incluyendo configuraciones de entidades por elemento de cola y duración de generación
  • Detección y eliminación de enlaces duplicados
  • Generación de enlaces específicos por idioma con opción de omitir contenido no traducido
  • Comandos Drush para generación de sitemap y gestión de cola

Use Cases

Configuración SEO Básica para Sitio Web de Contenido

Habilita el soporte de sitemap para los tipos de contenido Article y Page. Navega a /admin/config/search/simplesitemap/entities, habilita el tipo de Entity Content (node), luego haz clic en Configure. Para cada tipo de contenido, marca 'Index' y establece la prioridad apropiada (1.0 para páginas de destino importantes, 0.5 para contenido regular). El sitemap se generará automáticamente durante cron y será accesible en /sitemap.xml.

Sitio Multilingüe con Hreflang

Para sitios multilingües, el Module genera automáticamente URLs alternativas hreflang para todas las traducciones. Habilita 'Skip non-existent translations' en la configuración para incluir solo enlaces para idiomas donde el contenido realmente existe. Opcionalmente habilita 'Remove hreflang markup in HTML' para evitar declaraciones hreflang duplicadas ya que Google recomienda tenerlas en el HTML o en el sitemap, pero no en ambos.

Optimización de Rendimiento para Sitios Grandes

Para sitios con cientos de miles de Entities: aumenta 'Entities per queue item' a 200-500 para reducir consultas a la base de datos, establece 'Maximum links in a sitemap' en 10000 para crear fragmentos más manejables, aumenta 'Sitemap generation max duration' a 30 segundos si el timeout de PHP lo permite, y considera deshabilitar 'Exclude duplicate links' si la memoria es limitada.

Notificación Instantánea a Motores de Búsqueda con IndexNow

Habilita el submodule simple_sitemap_engines, navega a /admin/config/search/simplesitemap/engines/settings, habilita 'Submit changes to IndexNow capable engines' y genera una clave de verificación. Cuando se crea o actualiza contenido, los motores de búsqueda son notificados inmediatamente. Para producción, añade la clave a settings.php: $settings['simple_sitemap_engines.index_now.key'] = 'your-key';

Sitemap para Views con Argumentos

Habilita el submodule simple_sitemap_views para indexar páginas de View. Edita tu View, ve a la configuración de display y configura los ajustes de 'Simple XML Sitemap'. Para Views con argumentos (como filtros de taxonomy term), el Module rastrea las combinaciones de argumentos utilizadas por los visitantes y genera entradas de sitemap para cada variación. Establece 'Maximum display variations' para limitar el número de combinaciones de argumentos indexadas.

Múltiples Sitemaps para Diferentes Tipos de Contenido

Crea sitemaps separados para diferentes audiencias (por ejemplo, sitemap de productos para comercio electrónico, sitemap de blog para contenido). Añade nuevos sitemaps en /admin/config/search/simplesitemap/variants/add, luego configura qué Entity bundles se indexan en cada sitemap a través de la configuración de Entity bundle. Usa el tipo sitemap index para crear un índice que liste todos los sitemaps.

Gestión Programática de Sitemap

Usa la API del servicio Generator para gestionar sitemaps programáticamente: $generator = \Drupal::service('simple_sitemap.generator'); Habilitar un tipo de Entity: $generator->entityManager()->enableEntityType('commerce_product'); Establecer configuración de bundle: $generator->entityManager()->setSitemaps(['default'])->setBundleSettings('commerce_product', 'default', ['index' => TRUE, 'priority' => 0.8]); Activar regeneración: $generator->rebuildQueue()->generate();

Enlaces Personalizados para Páginas que No Son Entities

Añade rutas internas personalizadas que no son Entities a los sitemaps. Navega a /admin/config/search/simplesitemap/custom e introduce rutas como '/about-us 0.8 monthly' (ruta, prioridad, changefreq). Añadir enlaces personalizados programáticamente: $generator->customLinkManager()->setSitemaps(['default'])->add('/custom-page', ['priority' => '0.7', 'changefreq' => 'weekly']);

Tips

  • Usa la opción de hoja de estilos XSL para hacer los sitemaps legibles por humanos con columnas ordenables - útil para depuración y presentaciones a clientes
  • La función sitemap index permite crear un índice de múltiples sitemaps - habilítala y establécela como predeterminada para que /sitemap.xml liste todos tus sitemaps
  • La configuración de instancia de Entity en los formularios de edición permite sobrescribir los valores predeterminados del bundle - útil para excluir páginas específicas o aumentar la prioridad de contenido importante
  • Ejecuta el script de prueba de rendimiento incluido para medir la velocidad de generación: drush scr modules/simple_sitemap/tests/scripts/performance_test.php
  • IndexNow es preferido sobre el ping tradicional de sitemap ya que notifica a múltiples motores de búsqueda con una sola solicitud y proporciona indexación instantánea
  • Considera almacenar la clave de IndexNow en settings.php en lugar de state para mejor persistencia entre sincronizaciones de entorno
  • El Module respeta automáticamente el acceso de Entity - solo el contenido accesible a usuarios anónimos se incluye en el sitemap
  • Usa hook_simple_sitemap_links_alter() para lógica de filtrado compleja que no puede lograrse a través de la interfaz
  • Se pueden crear plugins de generador de URL personalizados para soportar tipos de Entity personalizados o fuentes de datos externas
  • El enfoque basado en cola del Module significa que la generación puede continuar a través de múltiples ejecuciones de cron sin perder progreso

Technical Details

Admin Pages 10
Simple XML Sitemap - Sitemaps /admin/config/search/simplesitemap

Página principal de resumen que lista todos los sitemaps configurados con su estado, progreso de generación y acciones. Muestra el número de enlaces, cantidad de fragmentos y marca de tiempo de la última generación para cada sitemap.

Simple XML Sitemap - Configuración /admin/config/search/simplesitemap/settings

Configura los ajustes globales del sitemap incluyendo comportamiento de generación, optimización de rendimiento, opciones de idioma y configuración avanzada.

Simple XML Sitemap - Entidades /admin/config/search/simplesitemap/entities

Habilita el soporte de sitemap para tipos de entidad y visualiza qué bundles están actualmente indexados en cada sitemap.

Simple XML Sitemap - Configurar Tipo de Entidad /admin/config/search/simplesitemap/entities/{entity_type_id}

Configura los ajustes del sitemap para cada bundle de un tipo de entidad. Los ajustes pueden configurarse por sitemap para cada bundle.

Simple XML Sitemap - Enlaces personalizados /admin/config/search/simplesitemap/custom

Añade rutas internas personalizadas de Drupal a sitemaps específicos con ajustes opcionales de prioridad y frecuencia de cambio.

Simple XML Sitemap - Tipos de Sitemap /admin/config/search/simplesitemap/types

Gestiona los tipos de sitemap que definen la estructura y los generadores de URL utilizados por los sitemaps.

Añadir sitemap /admin/config/search/simplesitemap/variants/add

Crea una nueva instancia de sitemap con un tipo específico.

Añadir tipo de sitemap /admin/config/search/simplesitemap/types/add

Crea un nuevo tipo de sitemap con plugins generadores específicos.

Configuración de Motores de Búsqueda /admin/config/search/simplesitemap/engines/settings

Configura la notificación instantánea IndexNow y el envío de ping del sitemap a motores de búsqueda (requiere el submódulo simple_sitemap_engines).

Configuración de Sitemap para Views /admin/config/search/simplesitemap/views

Resumen de views que están incluidas en los sitemaps (requiere el submódulo simple_sitemap_views).

Permissions 3
Administrar configuración del sitemap

Administrar la configuración de Simple XML Sitemap, modificar la configuración de inclusión del contenido y generar sitemaps bajo demanda. Este es un permiso restringido.

Editar configuración de sitemap de Entity

Editar la configuración de Simple XML Sitemap en formularios de Entity (por ejemplo, formularios de edición de Node).

Indexar Entity al guardar

Permite enviar opcionalmente un aviso de cambio a motores de búsqueda compatibles con IndexNow al guardar el formulario de Entity (requiere el submódulo simple_sitemap_engines).

Hooks 9
hook_simple_sitemap_entity_process

Actúa sobre una entidad antes de que sea procesada para la generación del sitemap. Puede usarse para modificar la entidad o lanzar SkipElementException para excluirla del sitemap.

hook_simple_sitemap_links_alter

Altera los datos de enlaces generados antes de que se guarde un fragmento del sitemap. Se llama para cada fragmento del sitemap durante la generación.

hook_simple_sitemap_arbitrary_links_alter

Añade enlaces arbitrarios a los sitemaps. Funciona con sitemaps que usan el plugin generador de URL 'arbitrary'. Los enlaces no son validados.

hook_simple_sitemap_attributes_alter

Altera los atributos XML del sitemap antes de la generación del documento. Permite añadir, modificar o eliminar declaraciones de espacios de nombres XML.

hook_simple_sitemap_index_attributes_alter

Altera los atributos XML del índice del sitemap antes de la generación del documento.

hook_simple_sitemap_url_generators_alter

Altera las propiedades de los plugins generadores de URL o los elimina por completo.

hook_simple_sitemap_sitemap_generators_alter

Altera las propiedades de los plugins generadores de sitemap o los elimina por completo.

hook_entity_query_tag__simple_sitemap_alter

Altera la consulta de entidades usada para obtener entidades para la generación del sitemap. Usa el sistema de consultas etiquetadas de Drupal.

hook_entity_query_tag__ENTITY_TYPE__simple_sitemap_alter

Altera la consulta de entidades para un tipo de entidad específico durante la generación del sitemap.

Drush Commands 2
drush simple-sitemap:generate

Regenera todos los sitemaps o continúa la generación desde la cola. Si no hay nada en cola, primero reconstruye la cola para todos los sitemaps.

drush simple-sitemap:rebuild-queue

Elimina la cola existente y pone en cola los elementos para todos o sitemaps específicos para la próxima generación.

Troubleshooting 6
El sitemap no se genera o muestra 0 enlaces

Asegúrate de que los tipos de Entity estén habilitados en /admin/config/search/simplesitemap/entities y que los bundles estén configurados para ser indexados. Verifica que 'Index' esté marcado para los bundles deseados. Verifica que el contenido exista y sea accesible para usuarios anónimos. Ejecuta cron o activa la generación manualmente en la página de sitemaps.

Errores de timeout o memoria de PHP durante la generación

Reduce 'Entities per queue item' en la configuración para disminuir el uso de memoria. Disminuye 'Maximum links in a sitemap' para crear fragmentos más pequeños. Reduce 'Sitemap generation max duration' para completar lotes más pequeños. Considera ejecutar la generación vía Drush (drush ssg) que típicamente tiene límites más altos que las solicitudes web.

Los enlaces en el sitemap tienen dominio o protocolo incorrecto

Establece la 'Default base URL' en la configuración avanzada para sobrescribir la URL detectada automáticamente. Esto es especialmente importante cuando se ejecuta cron desde línea de comandos donde Drupal no puede determinar la URL correcta del sitio.

IndexNow no funciona o los motores de búsqueda no reciben notificaciones

Verifica que la clave de verificación esté generada en /admin/config/search/simplesitemap/engines/settings. Asegúrate de que el archivo de clave sea accesible en /simple_sitemap_engines/index_now_key/[key]. Verifica que las Entities estén incluidas en la configuración del sitemap. Para producción, almacena la clave en settings.php para persistencia entre despliegues.

Las Views no aparecen en el sitemap

Habilita el submodule simple_sitemap_views. Asegúrate de que el generador de URL 'views' esté añadido a tu tipo de sitemap. Edita la View y configura los ajustes de sitemap en las opciones de display. Para Views con argumentos, los visitantes deben primero acceder a la View con esos argumentos antes de que sean indexados.

Enlaces duplicados o URLs incorrectas en el sitemap

Habilita 'Exclude duplicate links' en la configuración avanzada. Verifica si hay path aliases o reescrituras de URL que puedan crear rutas duplicadas. Revisa las implementaciones de hook que puedan estar modificando URLs. Asegúrate de que las URLs canónicas de Entity estén correctamente configuradas.

Security Notes 4
  • El permiso 'administer sitemap settings' está marcado como acceso restringido debido a sus capacidades administrativas
  • Los sitemaps solo incluyen contenido accesible a usuarios anónimos por defecto, pero hooks personalizados pueden eludir las verificaciones de acceso
  • La clave de verificación de IndexNow debe tratarse como sensible - almacénala en settings.php en lugar de configuration para producción
  • Los enlaces personalizados añadidos vía hooks no se validan para acceso - asegúrate de que apunten a contenido públicamente accesible