Crea tu propio SITEMAP automatizado con Php y MySql


Muchas veces tenemos el problema de generar un SITEMAP para nuestra web que se actualice cada vez que tenemos un cambio o una nueva publicación... En Internet tenemos muchos servicios online gratuitos para generar nuestro SITEMAP, pero con limitaciones de un número de links; existe la solución de crear un Scrip en PHP para autogenerar nuestro SITEMAP con un solo click cada vez que lo necesitemos.
Sigue este artículo donde te enseño como lograr lo antes dicho...
Para empezar...
Qué es un sitemap
El Sitemap es un archivo que consiste en un listado de las páginas que contiene un sitio web y que se utiliza por los webmasters o desarrolladores web,  para informar a los buscadores de las mismas, facilitando que sus robots, al leer este archivo, rastreen de manera más óptima la totalidad del sitio web.
Los buscadores que utilizan este protocolo de Sitemaps son: Google, pionera creando Google Sitemaps, Yahoo!, Bing, Ask.com y MSN.
El formato que se debe usar a la hora de crear este archivo es .XML, aunque los motores de búsqueda también admiten y leen otros archivos de texto y fuentes web RSS. Se listan en él las URL que queremos indexar del sitio web yse suele acompañar de metadatos que aportan información fundamental a los buscadores sobre la fecha de su última actualización, jerarquía de las URL y la frecuencia de modificación del mismo.
Ventajas del sitemap
Ayudan a los buscadores a rastrear de manera más óptima e inteligente nuestro sitio web, pudiendo llegar, gracias a su jerarquización, a niveles más profundos e indexar así el contenido que deseamos tener en Google.
Por tanto, mejoran la indexación, de manera que pueden estar tus contenidos disponibles para el usuario en los buscadores cuando éstos estimen oportuno mostrarlos por considerarlos relevantes para las búsquedas realizadas.
Normalmente un sitio web bien enlazado, estructurado y de una arquitectura jerárquicamente bien construida, puede ser rastreado sin problemas por losbots de los buscadores, pero se hace fundamental tenerlo cuando es un sitio web muy grande, en el que pueden no llegar a rastrear páginas muy profundamente o deficientemente enlazadas; para sitios nuevos, con pocos enlaces externos y que queremos indexar lo antes posible; o si tienes una web de noticias u otros contenidos de soporte interactivo, para que Google los categorice y gestione de manera óptima.
Facilitan el trabajo a los rastreadores al indicarle con los metadatos el tipo de contenido que contiene cada URL o grupo de éstas, al poder especificar en el sitemap el tipo de archivos que va a encontrar: vídeos, imágenes o para móviles.
Formato XML de SITEMAPS
Este documento describe el esquema XML para el protocolo Sitemap.
El formato del protocolo Sitemap consta de etiquetas XML. Todos los valores de datos de un Sitemap deben incluir caracteres de escape de entidad. El propio archivo debe estar codificado en UTF-8.
El Sitemap debe:
Comenzar con una etiqueta de apertura <urlset> y terminar con una de cierre </urlset>.
Especificar el espacio de nombres (protocolo estándar) en la etiqueta urlset.
Incluir una entrada <url> para cada dirección URL como una etiqueta XML principal.
Incluir una entrada secundaria <loc> para cada etiqueta principal <url>.
Las demás etiquetas son opcionales. La compatibilidad de estas etiquetas opcionales puede variar en función del motor de búsqueda. Consulte la documentación específica de cada uno de ellos para obtener información detallada.
Ejemplo de un Sitemap en formato XML
El siguiente ejemplo muestra un Sitemap que contiene únicamente una URL y usa todas las etiquetas opcionales. Las etiquetas opcionales están en cursiva.
<?xml version="1.0" encoding="UTF-8"?><

urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"

>   <url

>      <loc>http://www.example.com/</loc>

      <lastmod>2005-01-01</lastmod>

      <changefreq>monthly</changefreq>

      <priority>0.8</priority>

   </url></urlset>

Teniendo en cuenta los conceptos y la estructura de un Sitemap en XML, procederemos ha explicar el archivo PHP, cane resaltar que no soy un profesional en informática o algo similar, solo soy un aficionado y quería compartir algo que se me ocurrió hacer. Obviamnete el scrip requiere de ajustes o correcciones para que tenga una mejor estructura y funcionalidad.
*Para que funcione necesita contar ya con una base de datos BD.

Conexión con la BD
Se hace la consulta a la Tabla ENTRADAS en la BD (en este caso solo se está consultando la ID y Fecha ya que son los únicos campos que requerimos) y se ordena de mayor a menor ORDER  BY id DESC por la ID para que la ultima entrada o post este primero.

include("conexion.php");
$sql = "SELECT id, fecha FROM entradas ORDER  BY id DESC";
!$resultado = $mysqli->query($sql);

Creación del archivo XML
Se asigna a la variable $nombre_archivo en nombre que queremos darle a nuestro archivo XML, que en este caso es SITEMAP.XML

 $nombre_archivo = "sitemap.xml"; 
 if(file_exists($nombre_archivo)){
        $mensaje = "El Archivo $nombre_archivo se ha modificado";   
    }else{ 
        $mensaje = "El Archivo $nombre_archivo se ha creado";
        }

Creación del cuerpo del archivo XML
Creamos la cabecera del XML y ponemos como primer enlace la dirección WEB de nuestra página (esto sería opcional, si es necesario podríamos empezar solo con los enlaces de las publicaciones, entradas o post) y tendríamos que dejar lo que está entre las etiquetas URL (azul).

                $cuerpo1=" ";
                $cuerpo1.= '<?xml version="1.0" encoding="UTF-8"?>
                <urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
                 xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
                      //se podría obviar esta parte
                     <url>
                        <loc>http://MIWEB.com/</loc>
                        <lastmod>2018-06-12</lastmod>
                        <changefreq>daily</changefreq>
                        <priority>1</priority>
                    </url>';

                //Aquí irían los enlaces de nuestras publicaciones o posts ya sean 10 o 1000 enlaces, todos se auto generán repetidamente con la estructura XML.

                $cuerpo2= " ";
                 while (($row = $resultado->fetch_row()) ) {

                        //La varible $row[0] contiene el ID de la entrada con el que se conforma el ULR de cada entrada en la WEB, esta parte creara tantas lineas como entradas o post tenga mi WEB.

                         $cuerpo2.= '<url>      
                              <loc>http://MIWEB.com/entrada.php?valor1='.$row[0].'</loc>
                              <lastmod>'.$row[1].'</lastmod>
                              <changefreq>daily</changefreq>
                              <priority>0.8</priority>
                              </url>';
                 }

                //Aquí puse los enlaces estáticos, como son los enlaces de los menus pagina de contacto, quienes somos, home, etc etc..

                $cuerpo3= " ";  
                $cuerpo3.= '<url>      
                    <loc>http://MIWEB.com/home.html</loc>
                    <lastmod>2018-06-12</lastmod>
                    <changefreq>daily</changefreq>
                    <priority>0.8</priority>
                </url>
                <url>      
                    <loc>http://MIWEB.com/contacto.html</loc>
                    <lastmod>2018-06-12</lastmod>
                    <changefreq>monthly</changefreq>
                    <priority>0.8</priority>
                </url>
                </urlset>';

//Variables que conforman el cuerpo del XML que se actualizará.

$cuerpo= $cuerpo1.$cuerpo2.$cuerpo3;
 if($archivo = fopen($nombre_archivo, "c")){
  if(fwrite($archivo,  $cuerpo)){
            //echo "Se ha ejecutado correctamente";
  }else{
   echo "Ha habido un problema al crear el archivo";
    }
  fclose($archivo);
 }

Lectura del archivo XML en PHP

 $nombre_archivo = "sitemap.xml"; 
 if(file_exists($nombre_archivo)) {
  echo  nl2br(file_get_contents($nombre_archivo));
 }else{
  $mensaje = "El archivo no existe";
    }

Hasta aquí sería el archivo PHP para generar el SITEMAP, para implementarlo se podría poner en un botón en nuestro panel de administrador web, así podríamos generar un nuevo SITEMAP cada vez que queramos. También se podría incorporar en el scrip que nos permite generar entradas, publicaciones o post nuevos para que cada vez que pongamos algo nuevo se genere automáticamente sin necesidad de darle a un botón.

DESCARGA AQUÍ EL ARCHIVO SITEMAP.PHP

Comentarios

Entradas populares de este blog

Redes Sociales y mi Negocio

20 remedios caseros para acabar con el acné y las espinillas