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.
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:
- Ruta relativa a la base. Por ejemplo, para la página de inicio es
/
y si hubiera una de contacto sería/contacto
- Prioridad, que va del
0
al1.0
. A las páginas más importantes les ponemos1.0
, y a las demás tal vez una menor; pero siempre respetando los límites. - Cada cuánto es posible que cambie el contenido de esa página. Las opciones son:
always
,hourly
,daily
,weekly
,monthly
,yearly
ynever
- 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í.