Regex en Search Console: filtros que ahorran horas

El informe de Rendimiento de Search Console guarda, dentro del filtro de consultas o de páginas, una opción llamada Personalizada que casi nadie activa del todo: la casilla Expresión regular. Sin marcarla, ese cuadro solo entiende texto literal: contiene, no contiene, coincidencia exacta. Con la casilla activada, acepta alternancias, clases de caracteres y cuantificadores, y con un solo filtro puede aislar un grupo de consultas o de URLs que de otro modo exigiría exportar todo a una hoja de cálculo y separar filas a mano.
Este artículo se queda en ese filtro concreto: qué sintaxis acepta, qué patrones resuelven lo más habitual — preguntas, ruido de marca, carpetas de URL, consultas largas — y dónde se queda corto. No repite lo que ya cubre una guía general del informe de Rendimiento; el objetivo aquí es que el patrón salga bien a la primera.
Dónde vive el filtro y cómo activarlo
Dentro de Rendimiento, el botón + junto a los filtros ya aplicados abre un panel con dos pestañas: Consultas y Páginas. Cada una ofrece el mismo desplegable — Contiene, No contiene, Coincidencia exacta y Personalizada — y solo bajo Personalizada aparece la casilla Expresión regular junto con un interruptor entre Coincide con la expresión regular y No coincide con la expresión regular. Ese interruptor hace de negación: se escribe el patrón positivo y se invierte con él, en vez de negar algo dentro de la propia expresión.
La pestaña Páginas no filtra solo la ruta: compara contra la URL completa, protocolo y dominio incluidos. Un patrón que en la cabeza parece empezar por barra (/blog/) nunca hace match si no se ancla después del dominio, porque la cadena real empieza por https://tudominio.com/blog/, no por /blog/.
- Consultas: el patrón se compara contra el texto de búsqueda tal como llega a Search Console.
- Páginas: el patrón se compara contra la URL completa, incluido https:// y el dominio.
- El filtro no se guarda como segmento permanente: cerrar el informe lo borra, aunque el enlace de la vista conserva los parámetros si se copia antes de salir.
La sintaxis es RE2, no PCRE
Search Console no usa el motor de expresiones regulares de PHP, Python o JavaScript; usa RE2, el motor que Google desarrolló y publicó como código abierto para garantizar que ninguna expresión regular pueda colgar un proceso. Esa garantía tiene un coste: para que el tiempo de coincidencia sea siempre lineal, RE2 renuncia a las construcciones que permiten ese comportamiento explosivo, justo las que muchos usan por costumbre en otros motores: no hay retrorreferencias (\1, \2), no hay lookahead ((?=...), (?!...)) ni lookbehind ((?<=...), (?<!...)).
Lo que sí soporta cubre casi todo lo que este filtro necesita: alternancia (a|b|c), clases de caracteres ([aeiou], [^0-9]), anclas de inicio y fin (^ y $), cuantificadores (*, +, ?, {n,m}), grupos no capturantes ((?:...)) y clases abreviadas (\d, \w, \s). También acepta (?i) al principio del patrón para ignorar mayúsculas, aunque en Consultas rara vez hace falta porque casi todo llega ya en minúsculas.
- No existen: retrorreferencias, lookahead, lookbehind.
- Sí existen: alternancia, clases de caracteres, anclas ^ y $, cuantificadores {n,m}, grupos no capturantes, (?i).
- Si el patrón no es válido en RE2, Search Console lo rechaza con un error visible; no lo ejecuta a medias ni devuelve resultados parciales.
Aislar consultas con forma de pregunta
Las consultas informativas casi siempre empiezan por un interrogativo, y eso es justo lo que un ancla de inicio de cadena puede capturar en un solo filtro. El patrón ^(qué|como|cómo|cuando|cuándo|donde|dónde|cuál|cual|quien|quién|cuanto|cuánto) sobre Consultas, en modo Coincide con la expresión regular, devuelve solo las búsquedas que arrancan con alguna de esas palabras. Conviene incluir la versión con y sin tilde: muchas consultas se escriben sin acentos, y RE2 no normaliza eso por ti.
El ancla al inicio (^) importa más de lo que parece. Sin ella, qué también hace coincidir cualquier consulta que la contenga en cualquier posición — 'mejor crm y qué precio tiene', por ejemplo — mezclando preguntas reales con menciones sueltas dentro de una frase más larga. Por qué conviene tratarlo en un grupo propio, porque la partícula lleva espacio en medio y muchas consultas la escriben junta, como porque.
- ^(qué|cómo|cuándo|dónde|cuál|quién|cuánto) — la forma más simple, solo con las variantes con tilde; añade las formas sin tilde a la misma alternancia.
- ^(por qué|porque) — como grupo aparte, porque la partícula lleva espacio y muchas consultas la escriben junta.
- \?$ — como segundo filtro combinado en AND con el anterior, para quedarse solo con las consultas que además terminan en signo de interrogación.
Excluir la marca sin perder consultas útiles
Cuando una marca se escribe de formas distintas, el filtro simple No contiene se queda corto: solo admite un texto literal por condición. Con regex, todas las variantes entran en una sola alternancia y el interruptor No coincide con la expresión regular las excluye de una sola vez.
Ejemplo con una marca ficticia que a veces se escribe junta y otras con espacio, con y sin tilde: (?i)(acme|acmé|acme software|acme soft) sobre Consultas, en modo No coincide con la expresión regular, deja fuera cualquier mención de la marca y conserva el resto — la consulta genérica que interesa para el análisis de intención. El (?i) evita escribir cada variante dos veces por mayúsculas.
El error habitual es escribir el patrón pensando en excluir y olvidar cambiar el interruptor: dejado en Coincide con la expresión regular, el filtro hace justo lo contrario y el informe se llena de consultas de marca. Comparar el total antes y después del filtro delata el fallo: una caída demasiado pequeña suele ser la señal.
- (?i)(marca|variante1|variante2) + No coincide con la expresión regular — patrón base para cualquier exclusión de marca.
- Añadir \s? o -? entre partes del nombre cuando la marca a veces se escribe con espacio o guion y otras veces junta.
- Comparar el total de consultas antes y después del filtro: si apenas cambia, el interruptor probablemente está invertido.
Filtrar por carpeta o profundidad de la URL
En la pestaña Páginas, el patrón se compara contra la URL completa, así que el primer paso es anclar después del dominio y escapar el punto (\.), porque sin escapar significa cualquier carácter, no un punto literal. El patrón ^https://tudominio\.com/blog/ aísla solo las páginas de esa carpeta; sin el ^ inicial, el mismo fragmento también haría match si apareciera en un parámetro o en cualquier otra parte de la URL.
Para varias carpetas a la vez, la alternancia agrupada evita repetir el filtro: ^https://tudominio\.com/(blog|guias|recursos)/. Para excluir una subcarpeta dentro de otra que sí interesa — todo /blog/ salvo /blog/borradores/ — no hay lookahead negativo para resolverlo en un único patrón; la forma práctica es un segundo filtro en modo No coincide sobre ^https://tudominio\.com/blog/borradores/, combinado en AND con el primero.
La profundidad de la ruta también se acota contando barras: ^https://tudominio\.com/[^/]+/[^/]+/ exige al menos dos segmentos, útil para páginas de producto, que suelen vivir dos niveles bajo la home, a diferencia de las categorías, casi siempre en uno solo.
- Escapar siempre el punto del dominio: \. en vez de .
- Anclar con ^ tras el protocolo para no capturar coincidencias dentro de parámetros de la URL.
- Varias carpetas a la vez: (blog|guias|recursos) en una sola alternancia dentro del mismo filtro.
- Excluir una subcarpeta: segundo filtro en modo No coincide, combinado en AND — no un lookahead, porque RE2 no lo soporta.
Detectar long-tail contando palabras
Search Console no tiene una columna de número de palabras, pero RE2 permite aproximarla contando separadores. La base es (\S+\s+){n,}\S+ anclado con ^ y $: (\S+\s+) es una palabra seguida de espacio, {n,} exige que se repita al menos n veces, y \S+ al final captura la última palabra.
Para long-tail de cinco palabras o más: ^(\S+\s+){4,}\S+$ — cuatro repeticiones del bloque más la palabra final suman cinco como mínimo. Para un rango exacto, {2,4} en vez de {4,} limita también el máximo: ^(\S+\s+){2,4}\S+$. Funciona porque RE2 soporta cuantificadores con rango sobre un grupo, aunque ese grupo no pueda usarse después como retrorreferencia — aquí no la necesita.
Tiene dos límites prácticos: cuenta espacios simples, así que un doble espacio accidental o un guion en vez de espacio distorsiona el resultado; y no distingue una palabra de una cifra o de un símbolo suelto, así que 'zapatillas talla 42 rojas' cuenta como cuatro tokens igual que si fueran cuatro palabras completas. Para un filtro exploratorio es suficiente; para un conteo exacto conviene exportar y contar aparte.
- ^(\S+\s+){4,}\S+$ — cinco palabras o más.
- ^(\S+\s+){2,4}\S+$ — entre tres y cinco palabras, rango acotado por ambos lados.
- Cuenta separadores por espacio, no palabras en sentido estricto: dobles espacios y guiones distorsionan el resultado.
Los límites reales de RE2 en Search Console
El primero y más repetido: sin retrorreferencias, lookahead ni lookbehind, un patrón copiado de una herramienta con PCRE probablemente falle, con un error de expresión no válida en vez de un resultado vacío. La solución es siempre la misma: lo que se resolvería con lookahead negativo en otro motor, aquí son dos filtros en AND, uno positivo y uno en modo No coincide.
El segundo es menos evidente: la coincidencia es de subcadena por defecto, no de cadena completa. Sin ^ ni $, el patrón hace match si aparece en cualquier parte del texto, igual que Contiene — la ventaja de regex aparece cuando hace falta esa posición exacta, o una alternancia entre varias formas. Si el resultado parece demasiado amplio, casi siempre falta un ancla.
El tercero: alternancias muy largas — pegar de golpe varias decenas de variantes en una sola lista puede hacer que el filtro tarde o se rechace — así que conviene agrupar por prefijo común o dividir en dos o tres filtros más cortos. El cuarto es el límite de palabra \b con letras acentuadas, que RE2 puede no tratar como letras de palabra: conviene comprobar el patrón con datos reales antes de aplicarlo a un rango largo, porque un filtro que descarta consultas por error no avisa de nada.
- Sin retrorreferencias, lookahead ni lookbehind: lo que se resolvía con eso en otro motor, aquí son dos filtros combinados en AND.
- Coincidencia de subcadena por defecto: sin ^ y $ el patrón se comporta como un Contiene con esteroides, no como una igualdad.
- Alternancias muy largas pueden fallar o ir lentas: preferir clases de caracteres o dividir en varios filtros más cortos.
- \b con vocales acentuadas: probar siempre con una muestra real antes de aplicar el filtro a un rango de fechas largo.
El mismo motor en la API y en BigQuery
El filtro de la interfaz no es un atajo aparte: la API de Search Console acepta los mismos patrones dentro de dimensionFilterGroups, con los operadores includingRegex y excludingRegex en lugar del interruptor. Cualquier patrón que funcione en el informe funciona igual en la API, lo que permite repetir la misma segmentación sobre datos históricos sin reconstruir el filtro a mano cada vez.
Quien exporta el informe completo a BigQuery encuentra la misma sintaxis otra vez: la función REGEXP_CONTAINS también usa RE2, así que un patrón ya probado en la interfaz se traslada sin reescritura a una consulta SQL. No es casualidad: Google usa RE2 de forma consistente porque garantiza ese tiempo de ejecución lineal.
- Interfaz: interruptor Coincide / No coincide con la expresión regular.
- API: dimensionFilterGroups con operador includingRegex / excludingRegex, mismo patrón.
- BigQuery (exportación masiva): REGEXP_CONTAINS(columna, patrón), mismo motor RE2.
Preguntas frecuentes
¿El filtro regex de Search Console distingue mayúsculas de minúsculas?
En Consultas casi nunca importa, porque el texto llega prácticamente siempre en minúsculas. En Páginas la URL sí puede tener mayúsculas reales en la ruta, así que si hace falta ignorarlas conviene añadir (?i) al principio del patrón en vez de escribir cada variante dos veces.
¿Puedo guardar un filtro regex para reutilizarlo cada semana?
El filtro no queda guardado como segmento dentro de la interfaz: al cerrar el informe se pierde y hay que volver a escribirlo. El enlace de la vista sí conserva los parámetros del filtro si se copia antes de salir, así que guardar ese enlace es la forma práctica de reutilizarlo sin memorizar el patrón.
¿Aplicar un filtro regex en el informe cambia el rastreo o la indexación del sitio?
No. El filtro solo cambia qué filas del informe se muestran; es una lente sobre datos ya recopilados, no una instrucción hacia el rastreador ni hacia el índice. No tiene relación con robots.txt ni con las directivas de indexación.
Mi expresión regular parece correcta pero el filtro no devuelve nada, ¿por qué?
Las causas más comunes son el interruptor Coincide/No coincide en la posición contraria a la esperada, otro filtro activo a la vez que reduce el resultado a cero por AND, o un patrón que solo hace match si aparece exactamente al inicio (con ^) cuando el texto real empieza distinto. Si el patrón no fuera válido en RE2, Search Console mostraría un error, no un resultado vacío.
¿Necesito escapar el punto al filtrar por dominio en la pestaña Páginas?
Sí. Un punto sin escapar en una expresión regular significa cualquier carácter, no un punto literal, así que tudominio.com sin el escape también haría coincidencia con variaciones como tudominioXcom. Escribir tudominio\.com evita ese falso positivo.