Script en Python 3 para crear un Feed RSS orientado a Google News y descubrimiento SEO
El objetivo de este tutorial es la creación de un fichero RSS.xml apto para exponerse como feed de descubrimiento en google news .
¿Por qué es útil tener un fichero RSS.xml?
Básicamente por la automatización de tareas. A partir de este fichero puedes avisar a lectores, alimentar una newsletter, revisar URLs recientes, conectar paneles editoriales y complementar el sitemap XML con una lista fresca de contenidos recién publicados.Contexto SEO actual: Google Search acepta feeds RSS 2.0 y Atom 1.0, pero un feed no sustituye al sitemap normal ni a un buen enlazado interno. Piensa en RSS como la capa de actualización rápida: artículos recientes, URLs canónicas, títulos limpios, fechas y descripciones coherentes con la página pública.
Pueden consultar el repositorio https://github.com/al118345/rss-python dónde está almacenado el ejemplo citado en esta web. Además, tenéis el siguiente video ejemplo para su consulta https://www.youtube.com/watch?v=k8mVioEJLL8:Estructura rss.xml
Primero de todo, un ejemplo de este fichero lo encontráis en la siguiente dirección del New York Times https://rss.nytimes.com/services/xml/rss/nyt/World.xml. Su estructura es parecida a la de la siguiente extracción: De todos estos elementos, los principales campos que necesitamos rellenar son: | Elementos obligatorios | Función |
|---|---|
| title | El elemento title contiene el título del canal RSS. |
| link | El elemento link contiene el enlace a la página web. |
| description | El elemento description contiene una descripción del canal RSS. |
Implementación
Con este ejemplo y toda la información recopilada se ha generado el siguiente repositorio https://github.com/al118345/rss-python que contiene el siguiente código: Cómo veis, no tiene ningún misterio. Primero de todo hay que rellenar una parte estática cómo el nombre de la web, correo, etc. Una vez rellenado, estos datos son utilizados para identificar el sitio web y su autor. Posteriormente, cargamos el documento csv con la siguiente estructura | titulo | url | temática |
|---|---|---|
| Fundamentos de redes bayesianas | https://1938.com.es/redes-bayesianas | matemáticas |
| Introducción a MongoDB. Ejemplos de consultas en documentos. | https://1938.com.es/mongodb | mongodb nosql |
Que espera Google News de un feed
Un feed no deberia tratarse como una lista cualquiera de enlaces. Google News, Google Search y otros lectores pueden usarlo como una senal estructurada sobre que ha cambiado en la web, cual es la URL canonica, cuando se publico cada entrada y si el contenido pertenece a una fuente editorial reconocible. Por eso el script debe generar URLs estables, titulos con sentido, descripciones limpias y fechas en un formato estandar.
El error mas habitual es crear un XML valido que sigue siendo pobre desde el punto de vista editorial. Si todas las entradas tienen una descripcion generica, si varios titulos son casi iguales o si el feed apunta a paginas con redirecciones o contenido escaso, el documento sera correcto tecnicamente pero debil para descubrimiento e indexacion.
Checklist de validacion antes de publicarlo
- Abre el XML generado en el navegador y revisa que no haya errores de escapado ni caracteres rotos.
- Comprueba que cada enlace devuelve HTTP 200 y usa la misma URL canonica que aparece en el HTML de la pagina.
- Usa un titulo de canal descriptivo, enlace real al sitio, idioma correcto y fecha de generacion actualizada.
- Evita duplicados: cada articulo debe aparecer una vez, con una URL permanente y una tematica clara.
- Mantén el CSV fuente bajo control de versiones para revisar cambios del feed como cualquier otro contenido.
Flujo de publicacion recomendado
En un proyecto real, este script puede ejecutarse justo despues de publicar un articulo. El flujo habitual seria: actualizar el CSV o la base de contenidos, regenerar el RSS, subirlo junto con los assets estaticos, solicitar rastreo si el articulo es importante y revisar Search Console si aparecen problemas de indexacion. No obliga a Google a indexar, pero da a los rastreadores una ruta de descubrimiento limpia y coherente.
Tambien encaja con otras automatizaciones: una entrada RSS puede alimentar una newsletter, una cola de publicaciones sociales o un panel interno que compruebe si los articulos recientes tienen title, description, canonical y sitemap. Lo importante es que el RSS refleje la web publica y no se convierta en una fuente paralela con URLs o resumenes distintos.
Otra mejora util es anadir validacion automatica antes de escribir el fichero final. El script puede rechazar titulos vacios, URLs relativas, tematicas ausentes o enlaces duplicados antes de generar XML. Asi se evita publicar en el feed entradas pobres que despues habria que retirar de Google News o Search Console.
Si el feed se genera desde un CMS o durante la build de una web estatica, aplica las mismas reglas que al sitemap: incluye solo paginas indexables, canonicas y utiles para lectores. Etiquetas, URLs temporales, resultados de busqueda y pruebas no deberian mezclarse con articulos editoriales. Las senales limpias de descubrimiento parecen aburridas, pero son justo lo que necesitan los rastreadores.
Una comprobacion final consiste en comparar RSS, sitemap y listado visible de articulos. Las URLs importantes deberian aparecer en los tres sitios con la misma direccion final. Si una pagina solo esta en el feed pero no tiene enlaces internos, puede descubrirse igualmente, pero envia una senal de calidad mas debil que un articulo conectado desde contenidos relacionados.
Lecturas relacionadas: usar una API desde Angular, recoger datos sociales con Python y SEO en Angular SSR.
El resultado obtenido ha sido el siguiente: