php

Crear Google sitemap (Mapa del sitio) XML con PHP y Sitemap.php

Hoy veremos cómo crear un archivo de mapa de sitio XML con PHP; también conocido como sitemap. Para ello vamos a usar una librería ligera llamada sitemap-php.

Generar sitemap con PHP

Google creó Google Sitemaps? (Mapas de sitio de Google en inglés) para que los desarrolladores web pueden publicar listas de enlaces de sus sitios.

Incluir librería

Si utilizas composer ejecuta:

composer require evert/sitemap-php

Incluye el autoload y listo. En caso de que no uses composer, incluye el archivo llamado Sitemap.php que está aquí.

Sin importar la forma en la que incluyas, recuerda indicar que usarás el namespace así:

<span class="pl-k">use</span><span> </span><span class="pl-c1">SitemapPHP\Sitemap</span><span>;</span>

Eso es en la parte superior de tu código.

Generar sitemap con PHP

Primero se debe crear una nueva instancia de Sitemap; pasando la URL absoluta del sitio en el constructor.

En mi caso, para mi sitio, sería así:

$sitemap = new Sitemap("https://parzibyte.me");

Una vez que definimos la URL del sitio, podemos opcionalmente ponerle un nombre de archivo llamando al método setFilename:

$sitemap->setFilename("nombre");

Lo pasamos sin extensión; y cosas como la extensión o sufijos no se pueden cambiar.

Agregar elemento

Para agregar un elemento llamamos al método addItem. Los argumentos en orden son:

  1. Ruta relativa a la base. Por ejemplo, para la página de inicio es / y si hubiera una de contacto sería /contacto
  2. Prioridad, que va del 0 al 1.0. A las páginas más importantes les ponemos 1.0, y a las demás tal vez una menor; pero siempre respetando los límites.
  3. Cada cuánto es posible que cambie el contenido de esa página. Las opciones son: always, hourly, daily, weekly, monthly, yearly ynever
  4. Fecha de modificación, lo cual puede ser una fecha como cadena (la cual será convertida a fecha unix con strtotime) o la marca de tiempo de Unix como entero.

Así que en mi caso agrego la de inicio así:

$sitemap->addItem("/", "1.0", "yearly", "Today");

Estoy agregando un sitio con la máxima prioridad; indicando que se podría actualizar cada año y que la fecha de generación es hoy; aunque en realidad en el XML se quedará la fecha real, no la cadena Today.

Así podemos agregar miles de enlaces, con prioridad distinta. Igualmente podemos llamar a addItem dentro de un ciclo, usar una base de datos y todo eso que permita la programación.

Terminar generación

Cuando hayamos terminado de agregar todos los elementos llamamos al método createSitemapIndex, pasándole la URL relativa a la ubicación del archivo XML.

Normalmente debería ser la misma ruta pero con una barra al final; ya que los sitemap deberían estar en la raíz.

$sitemap->createSitemapIndex("https://parzibyte.me/", "Today");

Código completo

Aquí pondré el código necesario para generar el mapa del sitio. Eso va a crear dos archivos: el índice del sitemap (sitemap-index) y los mapas (sitemap-1, sitemap-2, o sitemap si es únicamente uno).

El índice es creado para que se soporten múltiples mapas de sitio; eso en caso de que agreguemos millones de enlaces.

No te preocupes, si vas a enviar el mapa del sitio a los motores de búsqueda envía el índice, ya que ahí hay enlaces hacia los otros mapas de sitio.

<?php
/**
 * Generar un sitemap con PHP y Sitemap.php
 * 
 * @author parzibyte
 */# Incluye clase, o autoloader
include_once "Sitemap.php";
# Indica que vas a usar el namespace
use SitemapPHP\Sitemap;
# Crear sitemap
$sitemap = new Sitemap("https://parzibyte.me");

# Agrega todas las URL
$sitemap->addItem("/", "1.0", "yearly", "Today");
$sitemap->addItem("/blog", "0.9", "daily", "Today");
$sitemap->addItem("/apps/cotizaciones", "0.9", "daily", "Today");
# Genera el sitemap
$sitemap->createSitemapIndex("https://parzibyte.me/", "Today");
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
 <sitemap>
  <loc>https://parzibyte.me/sitemap.xml</loc>
  <lastmod>2019-03-23</lastmod>
 </sitemap>
</sitemapindex>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
 <url>
  <loc>https://parzibyte.me/</loc>
  <priority>1.0</priority>
  <changefreq>yearly</changefreq>
  <lastmod>2019-03-23</lastmod>
 </url>
 <url>
  <loc>https://parzibyte.me/blog</loc>
  <priority>0.9</priority>
  <changefreq>daily</changefreq>
  <lastmod>2019-03-23</lastmod>
 </url>
</urlset>

Recuerda que si escribes “Today” el sitemap tendrá la fecha en la que fue generado, recomiendo refrescarlo cada cierto tiempo.

Con eso terminamos por hoy. Si quieres aprender más sobre PHP haz click aquí.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

5 horas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

6 horas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

6 horas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

7 horas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

7 horas hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

20 horas hace

Esta web usa cookies.