Los XPath ese lenguaje a medio camino entre los Regex y volverte loco con los selectores (que también hablaremos de ellos)
Básicamente lo que nos permite hacer XPath es buscar y seleccionar teniendo encuenta la estructura jerárquica de XML.
Entendiendo la sintaxis de los Xpath
Xpath usa expresiones de ruta para seleccionar nodos o conjunto de nodos en un documento XML. El nodo se selecciona siguiente una ruta o pasos.
| Expresión | Descripción |
| / | Selecciona el nodo de la raiz |
| // | Selecciona los nodos del documento a partir del nodo actual que coinciden con la selección sin importar dónde se encuentren |
| . | Nodo actual |
| .. | Padre del nodo actual |
| @ | Selecciona el atributo |
Para poder prácticar vamos a utilizar la extensión de Xpath helper para poder hacer pruebas y prácticar con Helper.
Primeras prácticas básicas con XPath en Analaizer
Cómo vemos con las expresiones que tenemos arriab ya podemos hacer una primeras pruebas para sacar cierta información de la web, en este caso usaremos para la práctica analaizer.digital.
Si utilizamos la expresión //title podemos ver que nos devuelve Cursos Analítica Web y programación – AnalAIzer Digital con lo que si, de esta manera ya podemos extraer el título de una manera fácil y sencilla de nuestra página.
Quizas pienses qeu es una tontería pero también podemos probar en sacar los H1 o H2 de la misma manera. Así que con //h1 nos devuelve Cursos de Analítica web y Programación.
Otro ejemplo que podemos utilizar para detectar por ejemplo los anchor text de los enlaces que sería con la expresión //a/text() que en el caso de la página de analaizer nos revuelve los siguientes textos anclas.
- Todos los cursos
- Membresias
- Profesores
- Contacto
- Blog
- Elige tu plan mensual
- Elige tu plan anual
- Analítica
He quitado los anclas repetidos por los códigos que detecta para las versiones y cortes de la implementación para el móvil.
Pero vamos ahora a por una expresión más complicada, en este caso sería //meta[@property=’og:updated_time’]/@content ahora esta información nos la da Screaming frog, pero en su momento era una forma de ver cuando un artículo fue actualizado y como podemos ver, la home de Analaizer fue el 2025-01-10T11:51:19+01:00. Era una forma de hacer una criba de que artículos necesitaban ser actualizados y ya os digo que ahorraba un montón de trabajo.
XPath para Schema
Ahora por hacer unos apaños para las páginas que tengan schemas podemos usar también //*[@itemtype]/@itemtype que nos darán el tipo de Schema que estamos utilizando en el caso de analaizer.digital no tenemos schemas metido pero si uso otra página vemos que la respuesta es https://schema.org/Blog o para sacar el contenido schema podemos usar el //script[@type=»application/ld+json»] que nos devolverá el siguiente código:
{"@context":"https://schema.org","@graph":[{"@type":["Person","Organization"],"@id":"https://arriakamarketing.com/#person","name":"Arriaka Marketing & Consulting","logo":{"@type":"ImageObject","@id":"https://arriakamarketing.com/#logo","url":"https://arriakamarketing.com/wp-content/uploads/arriaka-marketing-250x140.webp","contentUrl":"https://arriakamarketing.com/wp-content/uploads/arriaka-marketing-250x140.webp","caption":"Arriaka Marketing & Consulting","inLanguage":"es"},"image":{"@type":"ImageObject","@id":"https://arriakamarketing.com/#logo","url":"https://arriakamarketing.com/wp-content/uploads/arriaka-marketing-250x140.webp","contentUrl":"https://arriakamarketing.com/wp-content/uploads/arriaka-marketing-250x140.webp","caption":"Arriaka Marketing & Consulting","inLanguage":"es"}},{"@type":"WebSite","@id":"https://arriakamarketing.com/#website","url":"https://arriakamarketing.com","name":"Arriaka Marketing & Consulting","publisher":{"@id":"https://arriakamarketing.com/#person"},"inLanguage":"es"},{"@type":"ImageObject","@id":"https://arriakamarketing.com/wp-content/uploads/Mentoria-Copiar-scaled.webp","url":"https://arriakamarketing.com/wp-content/uploads/Mentoria-Copiar-scaled.webp","width":"2560","height":"1884","caption":"Mentoria seo","inLanguage":"es"},{"@type":"ItemPage","@id":"https://arriakamarketing.com/producto/mentoria-seo/#webpage","url":"https://arriakamarketing.com/producto/mentoria-seo/","name":"Mentor\u00eda SEO - Arriaka Marketing & Consulting","datePublished":"2023-07-07T22:48:43+01:00","dateModified":"2024-08-09T10:58:14+01:00","isPartOf":{"@id":"https://arriakamarketing.com/#website"},"primaryImageOfPage":{"@id":"https://arriakamarketing.com/wp-content/uploads/Mentoria-Copiar-scaled.webp"},"inLanguage":"es"},{"@type":"Product","name":"Mentor\u00eda SEO - Arriaka Marketing & Consulting","description":"Conseguite tu mentor\u00eda SEO para tus proyectos web, donde durante 9 meses te acompa\u00f1aremos en tu proyecto para que crezca contigo","category":"Mentoria","mainEntityOfPage":{"@id":"https://arriakamarketing.com/producto/mentoria-seo/#webpage"},"image":[{"@type":"ImageObject","url":"https://arriakamarketing.com/wp-content/uploads/Mentoria-Copiar-scaled.webp","height":"1884","width":"2560"}],"offers":{"@type":"Offer","price":"2450.00","priceCurrency":"EUR","priceValidUntil":"2026-12-31","availability":"https://schema.org/InStock","itemCondition":"NewCondition","url":"https://arriakamarketing.com/producto/mentoria-seo/","seller":{"@type":"Person","@id":"https://arriakamarketing.com/","name":"Arriaka Marketing & Consulting","url":"https://arriakamarketing.com"},"priceSpecification":{"price":"2450","priceCurrency":"EUR","valueAddedTaxIncluded":"false"}},"@id":"https://arriakamarketing.com/producto/mentoria-seo/#richSnippet"},{"@type":"VideoObject","name":"Testimonio Pilar Pla (Tradupla) de mentor\u00eda SEO","description":"Pilar fue una de las primeras personas que mentoric\u00e9, alguien de quien aprendes y da gusto trabajar, Tradupla era un proyecto ambiciosos, donde hab\u00eda que pon...","uploadDate":"2023-11-23T09:15:02-08:00","thumbnailUrl":"https://arriakamarketing.com/wp-content/uploads/hqdefault.jpg","embedUrl":"https://www.youtube.com/embed/Qd-C1BkmBNU","duration":"PT3M13S","width":"640","height":"360","isFamilyFriendly":"True","@id":"https://arriakamarketing.com/producto/mentoria-seo/#schema-3339","isPartOf":{"@id":"https://arriakamarketing.com/producto/mentoria-seo/#webpage"},"publisher":{"@id":"https://arriakamarketing.com/#person"},"inLanguage":"es"}]}Pero también podemos sacar con añadiendo un count() a la expresión el número de schemas qeu tenemos en el texto, en este caso sería 1 count(//script[@type=»application/ld+json»]).
Xpath para SEO
Te voy a dejar un listado de las expresiones más utilizadas en SEO con Xpath
| Expresión | Descripción |
| //title | Extrae el título |
| //meta[@name=’description’]/@content | Extrae la meta decripción |
| //h1 | Extrae el H1 |
| //h1 | //h2 | //h3 | //h4 | //h5 | //h6 | Extrae todos los encabezados |
| //img[not(@alt)] | Extrae imágenes sin atributos Alt |
| //a[contains(@href, ‘tu-dominio.com’)] | Extrae enlaces internos |
| //a[not(contains(@href, ‘tu-dominio.com’)) and starts-with(@href, ‘http’)] | Extrae enlaces externos |
| //table//tr/td[1] | Extrae datos de tablas |
| //table//tr/td | Extrae datos de una tabla |
| //script[contains(text(), ‘GTM-‘)] | Comprueba el script de Google Tag Maganer |
| //script[contains(text(), ‘G-‘)] | Comprueba el script de Analytics |
| //*[contains(text(), ‘frase específica’)] | Detecta un contenido duplicado |
| //link[@rel=’canonical’]/@href | Detecta la etiqueta canonical |
Xpath y las presencias de Open Graph
Las redes sociales no iban a ser menos para nosotros y aquí te mostramos como sacarlos
| Expresión | Descripción |
| //meta[@property=’og:title’]/@content | Extrae el título OG |
| //meta[@property=’og:description’]/@content | Extrae la descripción OG |
| //meta[@property=’og:image’]/@content | Extrae la imagen OG |
Xpath con JS
Una de las manera que podemos comprobar que tal va los datos de nuestra o cualquier web es mediante la consola del navegador, creando una variable donde evaluamos el documento (código HTML) y mostramos la cadena resultante, por ejemplo:
document.valuate(xpathExpression,contexNode,null,resultType,null);Esto al final quedaría de la siguiente manera
let resultXpath=document.valuate(‘//title’,document,null,XPathResult.STRING_TYPE,null);
console.log(result.stringValue);
El resultado sería el título de la página
Los datos que introducimos son los siguientes
xpathExpression: Tu consulta XPath (como'//title'para extraer el título)contextNode: El nodo de referencia donde empieza la búsqueda (normalmentedocumentpara todo el HTML)null: Siempre se deja ennull(para el resolver de espacios de nombres)resultType: Especifica el tipo de resultado que quieres (más detalles abajo)null: Es para iteradores, normalmente se deja comonull.
Tipos de Resultados (resultType)
XPathResult.FIRST_ORDERED_NODE_TYPE: Devuelve el primer nodo encontradoXPathResult.STRING_TYPE: Devuelve una cadena (ejemplo: texto de un nodo).XPathResult.NUMBER_TYPE: Devuelve un número (ejemplo: cuenta de nodos).XPathResult.BOOLEAN_TYPE: Devuelvetrueofalse.XPathResult.UNORDERED_NODE_ITERATOR_TYPE: Para recorrer nodos múltiples.


