01Qué es y cómo funciona
XPath modela un documento XML o HTML como un árbol de nodos: elementos, atributos, texto, comentarios y más. Una ruta de localización consiste en pasos separados por / o //. Cada paso tiene un eje (por defecto child), una prueba de nodo (como div o @href) y predicados opcionales entre corchetes que filtran el conjunto de nodos (p. ej., [@class='price']). El motor evalúa la ruta desde un nodo de contexto —a menudo la raíz del documento— y devuelve un conjunto de nodos en orden de documento. Los ejes como ancestor, following-sibling o descendant permiten navegar lateralmente o hacia arriba, no solo hacia abajo. Los predicados pueden utilizar funciones como contains(), starts-with() o position() para refinar las coincidencias. Debido a que XPath 1.0 está implementado en todos los navegadores y en la mayoría de las librerías de scraping, funciona de la misma manera en Chrome DevTools, Python lxml, Screaming Frog y crawlers personalizados.
XPath es una forma de encontrar y seleccionar fragmentos específicos del código de una página web, como extraer todos los encabezados o comprobar si existe una etiqueta meta.
02Qué hacer al respecto
Comienza aprendiendo el 20% de la sintaxis que usarás a diario: // para cualquier descendiente, @attr para atributos, text() para el texto interno y predicados para filtrar. Abre Chrome DevTools, presiona Ctrl+F en el panel de Elements y escribe un XPath como //meta[@property='og:title'] para verificar que selecciona la etiqueta correcta. Crea una guía rápida de los patrones recurrentes de tu sitio —tarjetas de producto, enlaces de paginación, elementos de breadcrumb— y conviértelos en expresiones XPath reutilizables. Añade esas expresiones a la configuración de tu crawler (Screaming Frog custom extraction, Sitebulb o un script de Python) para que cada auditoría extraiga automáticamente los mismos puntos de datos. Programa una verificación semanal: ejecuta el XPath en un puñado de URLs en vivo y confirma que los valores extraídos sigan coincidiendo con lo que ves en el navegador.
03Cómo se mide o se detecta
Verás XPath en tres lugares. Primero, en la configuración de herramientas de SEO: los campos de extracción personalizados, las reglas de renderizado de JavaScript o los validadores de datos estructurados suelen aceptar XPath. Segundo, en los repositorios de código: busca xpath, lxml, selenium o // en los scrapers y suites de pruebas de tu equipo. Tercero, en las consolas del navegador: escribir $x("//h1") devuelve los nodos coincidentes al instante. Si un crawler reporta falta de datos, comprueba si el XPath sigue coincidiendo con el DOM en vivo; los rediseños de sitios suelen cambiar los nombres de las clases o los elementos contenedores, rompiendo rutas que antes eran estables. Una caída repentina en los campos extraídos en múltiples URLs es una señal clara de que un XPath necesita actualizarse.
04Errores comunes
- Usar rutas absolutas como
/html/body/div[2]/section/div: se rompen cuando se añade o elimina cualquier contenedor. - Confiar en nombres de clases generados automáticamente como
css-1x2y3z: estos cambian en cada despliegue. - Ignorar los namespaces en sitemaps XML o feeds de Atom:
//urlno devuelve nada si el namespace por defecto no está registrado. - Asumir que XPath ve contenido renderizado por JavaScript: solo ve el HTML inicial a menos que lo ejecutes dentro de un navegador headless.
- Escribir expresiones demasiado amplias como
//divque devuelven miles de nodos y ralentizan los rastreos.
05Límites
XPath opera sobre el árbol DOM analizado, no sobre el diseño visual. No puede seleccionar elementos basados en estilos CSS calculados, posición en pantalla o interacciones del usuario. Tampoco entiende el JSON-LD incrustado en etiquetas ``; primero debes extraer el texto del script y luego analizar el JSON por separado. XPath 1.0 carece de expresiones regulares y manipulación avanzada de cadenas; para eso necesitas XPath 2.0/3.0 (Saxon, BaseX) o post-procesamiento en tu lenguaje de programación. A menudo se confunde con los selectores CSS, que son más cortos para casos simples pero menos potentes para el recorrido de hermanos/ancestros y el filtrado basado en texto. Finalmente, XPath no puede realizar consultas a través de iframes o límites de shadow DOM sin cambiar el contexto.
06Ejemplo práctico
Esta expresión encuentra cada tarjeta de producto mediante una coincidencia parcial de clase estable, luego profundiza hasta el span del precio que contiene un itemprop de Schema.org y, finalmente, devuelve el valor del atributo content: el precio legible por máquinas. Sobrevive a un rediseño que añada divs envolventes o cambie el sufijo exacto de la clase, porque contains(@class,'product-card') sigue coincidiendo. Pruébalo en DevTools con $x("//div[contains(@class,'product-card')]//span[@itemprop='price']/@content") y obtendrás un array de nodos de atributos cuyas propiedades value son los precios que necesitas.
//div[contains(@class,'product-card')]//span[@itemprop='price']/@content
La entrada anterior está escrita por GetLoopLoop. Lo que sigue es lo que los catálogos independientes recogen sobre el mismo término; nada de ello es la fuente de esta página.
- También llamado
- XML Path Language
- Introducido
- 1999
- Desarrollado por
- World Wide Web Consortium
- Parte de
- Extensible Stylesheet Language Transformations, XQuery, Extensible Stylesheet Language
- Tipo de cosa
- lenguaje de consulta, lenguaje de programación
El mismo término en Wikipedia
Catalogado en 33 idiomas07Preguntas frecuentes
¿Qué es XPath y por qué las herramientas de SEO lo utilizan?
XPath es un lenguaje de consulta para seleccionar nodos en un árbol de documentos XML o HTML. Los crawlers, scrapers y herramientas de auditoría lo utilizan porque ofrece una forma precisa y repetible de apuntar a elementos como el canonical link, el H1 o el precio de un producto sin depender de la posición visual en la página.
¿En qué se diferencia XPath de los selectores CSS?
Ambos seleccionan nodos del DOM, pero XPath puede moverse en cualquier dirección a través del árbol, filtrar por contenido de texto y apuntar a nodos por su posición. Los selectores CSS solo se desplazan hacia abajo y coinciden por etiqueta, clase o atributo, por lo que tareas como "encontrar el enlace cuyo texto de anclaje contiene 'Privacidad'" suelen requerir XPath.
¿Necesito aprender XPath para SEO técnico?
Depende de qué tan profundo quieras llegar. Si solo realizas auditorías, la mayoría de las herramientas te permiten usar el sistema de "clic y apuntar". Si creas extracciones personalizadas en Screaming Frog, scrapers propios o conectores de Looker Studio, aprender XPath básico se amortiza en una tarde.
¿Por qué mi XPath no coincide con nada cuando la página claramente tiene el elemento?
La razón más común es el manejo de namespaces, especialmente con feeds o SVG. Otra causa frecuente es intentar coincidir con texto renderizado cuando el elemento está oculto, o usar text() cuando necesitas string(.) para concatenar nodos hijos.
¿Puede XPath ver elementos que se renderizan con JavaScript?
Solo después de que existan en el DOM. XPath evalúa el HTML analizado, por lo que si tu herramienta obtiene el código fuente sin procesar antes de que se ejecute el JS, los nodos inyectados dinámicamente faltarán y tu expresión no devolverá resultados.
08Preguntado en voz alta
El mismo término en las palabras que alguien usa al hablar con un asistente en lugar de escribir en un buscador: escrito desde la situación, y por eso cada pregunta lleva la situación de la que salió.
Usa //span[@itemprop='price']/@content para capturar directamente el atributo de precio de Schema.org, o //*[contains(@class,'price')] si el marcado es inconsistente. Pega la expresión en el campo de extracción, realiza una prueba y confirma que la vista previa muestra los valores que esperas antes de la reunión.
Sí, casi con seguridad. Las páginas renderizadas con JavaScript suelen tener nodos que no existen en el HTML sin procesar que descargó tu scraper. Cambia tu fetcher a un navegador headless, o apunta al JSON subyacente del que la página se hidrata, y el mismo XPath empezará a devolver valores.
Apóyate en el schema, no en el estilo. Algo como //h1 o //*[@itemprop='name'] sobrevive a los rediseños porque el significado no cambia, mientras que una clase como .product-title__heading--xl rara vez lo logra. Haz pruebas con un puñado de páginas de diferentes plantillas antes de confiar en ello.