Como usar la funcion IMPORTXML en Google Sheets para SEO

Llevo años usando IMPORTXML en Google Sheets para auditorías SEO y sigue siendo una de las funciones más infravaloradas del ecosistema de herramientas gratuitas. No sustituye a Screaming Frog ni a SEMrush, pero para revisar un listado de 30-50 URLs en un cliente que acaba de llamarme, abre una hoja y en diez minutos ya tengo los H1, los titles y los canonicals delante sin pagar nada ni instalar nada.

La función acepta dos argumentos: la URL que quieres analizar y una expresión XPath que le dice exactamente qué elemento del HTML quieres extraer. En la práctica, la URL casi siempre la referencio desde otra celda (por ejemplo, A2), así puedo arrastrar la fórmula hacia abajo para todo el listado. El XPath va entre comillas dobles como segundo argumento, y ahí es donde está el 80% del aprendizaje.

Las fórmulas que uso en cualquier auditoría básica

Cuando arranco una auditoría rápida, tengo una plantilla con cinco columnas fijas que sirve para casi cualquier cliente. Cada fila es una URL del listado y cada columna extrae un dato concreto con una expresión diferente.

Para el H1 uso =IMPORTXML(A2,"//h1"). Para el title, =IMPORTXML(A2,"//title"). Hasta ahí todo es directo porque apuntas al elemento por su nombre. La cosa cambia cuando necesitas atributos, no texto: para la meta description tienes que buscar la etiqueta meta cuyo atributo name sea description y luego pedir el valor de su atributo content. La fórmula queda así: =IMPORTXML(A2,"//meta[@name='description']/@content"). Fíjate en las comillas simples alrededor de description: si usas dobles ahí, la hoja cierra la cadena antes de tiempo y la fórmula falla sin que el error sea obvio.

Siguiendo esa misma lógica de atributos, el canonical sale con //link[@rel='canonical']/@href y los meta robots con //meta[@name='robots']/@content. Con esas cinco expresiones cubro el 90% de lo que necesito ver en una revisión inicial. Si quieres profundizar en combinaciones más complejas, en la guía de funciones XPath avanzadas para auditorías SEO desarrollo bastante más casuística.

Contar elementos y detectar problemas estructurales

Más allá de extraer texto, IMPORTXML permite contar elementos directamente en celda envolviendo el XPath con count(). Esto me ahorra revisar a mano si una página tiene imágenes sin atributo alt, cuántos H2 acumula o cuántos enlaces internos apuntan al dominio.

Para contar todas las imágenes de una URL la expresión es count(//img). Para contar solo las que no tienen alt —que es lo que realmente me interesa en una auditoría de accesibilidad y SEO— uso count(//img[not(@alt) or @alt='']). El truco de anidar not() dentro del predicado lo aplico constantemente para filtrar exactamente lo que quiero, en vez de obtener todos los elementos y luego filtrar a mano en otra columna.

Para los enlaces internos, contains() dentro del atributo href hace el trabajo: count(//a[contains(@href,'midominio.com')]). Y si quiero los externos, basta con negar: count(//a[not(contains(@href,'midominio.com')) and starts-with(@href,'http')]). Puede parecer verboso, pero una vez que lo tienes en la plantilla solo cambia el dominio.

Alex Amigo

¿Necesitas ayuda con tu estrategia SEO?

Trabajemos juntos para hacer crecer tu negocio con una estrategia digital personalizada.

Los límites reales de IMPORTXML y cómo trabajar con ellos

Aquí está lo que no te explica ningún tutorial genérico: IMPORTXML tiene un límite aproximado de 50 peticiones simultáneas por hoja. Si metes 200 URLs en una columna y en las columnas B, C, D, E, F tienes cinco fórmulas por fila, la hoja intenta resolver miles de llamadas a la vez y empieza a devolver #N/A de forma aparentemente aleatoria, aunque la URL sea perfectamente válida.

Mi workaround habitual es dividir el trabajo en hojas separadas dentro del mismo archivo, con no más de 40-50 URLs por hoja activa, y usar una pestaña de consolidación que tira de IMPORTRANGE para juntar los resultados. Es un paso extra, pero elimina casi todos los #N/A por sobrecarga.

El otro error frecuente viene de URLs lentas o que devuelven redirects en cascada: IMPORTXML hace timeout antes de que el servidor responda y la celda se queda en #N/A indefinidamente. Cuando me pasa, lo primero que compruebo es si la URL redirige con IMPORTDATA o simplemente la abro en una pestaña para ver si tarda más de dos segundos en cargar. Si el problema es el servidor, no hay fórmula que lo resuelva; hay que auditar ese grupo de URLs por separado con otra herramienta.

Un tercer caso problemático son páginas que renderizan el contenido con JavaScript: IMPORTXML solo ve el HTML estático que devuelve el servidor, así que en SPAs o páginas con lazy load de metadatos la función devuelve vacío aunque el elemento exista visualmente. Para ese tipo de páginas uso Screaming Frog con JavaScript rendering activado; si te interesa también combinar ambas aproximaciones, la guía de extracción personalizada con Screaming Frog y XPath cubre esa integración en detalle.

Un caso de uso real con cliente de ecommerce

Hace unos meses trabajé con una tienda de unos 400 productos donde el equipo interno había cambiado la estructura de URLs sin redirigir correctamente. El cliente no sabía cuántas páginas tenían canonical apuntando a una URL que ya no existía. El rastreo completo con Screaming Frog habría tardado horas en ese servidor lento; en cambio, monté una hoja con las 400 URLs en columna A y dos fórmulas: una para el canonical y otra para el título. En veinte minutos tenía los datos crudos y pude filtrar los canonicals que apuntaban al dominio antiguo.

El proceso fue así: exporté el listado de URLs desde Search Console, lo pegué en la columna A, puse en B2 la fórmula del canonical (=IMPORTXML(A2,"//link[@rel='canonical']/@href")) y en C2 la del title, arrastré ambas hasta la fila 400, esperé unos minutos a que la hoja resolviera las peticiones en lotes, y luego apliqué un filtro en columna B buscando el dominio antiguo. Aparecieron 47 páginas con el canonical roto. Eso es accionable en una reunión sin necesidad de herramientas de pago ni informes elaborados.

La limitación que encontré ese día fue precisamente el throttling: con 400 filas y dos columnas de fórmulas, varias celdas tardaron más de diez minutos en resolverse y algunas devolvieron #N/A. Dividí el listado en tres hojas de unos 130 URLs cada una y el problema desapareció. No es elegante, pero funciona.

Preguntas frecuentes

¿Que argumentos necesita la formula IMPORTXML?

Requiere dos argumentos obligatorios. El primero es la URL que deseas analizar y el segundo es la consulta XPath entre comillas dobles.

¿Por que me da error la formula al extraer atributos?

Generalmente ocurre por un conflicto tipografico. Debes usar comillas simples dentro de tu consulta XPath si la expresion completa ya esta envuelta en comillas dobles.

¿Se puede usar IMPORTXML para contar elementos HTML?

Si, puedes utilizar la funcion count() de XPath dentro de tu expresion. Es muy util para sumar el numero total de imagenes o enlaces internos de una pagina.