La consulta de una URL es lo que sigue a ? : pares nombre=valor unidos por &
En una dirección web, la consulta va desde el primer ? hasta un #. En https://shop.example.com/products?color=white&size=42 la consulta es color=white&size=42: dos pares separados por &, con los nombres color y size y los valores white y 42. La consulta lleva al servidor o al script de la página cosas como una búsqueda, un número de página, filtros o etiquetas de publicidad. Cada sitio decide qué significa cada nombre.
Esta herramienta separa la consulta de la URL que pegas en una tabla de nombres y valores, y reconstruye la URL mientras editas. El texto con porcentajes se muestra como caracteres legibles y los pares que no tocas conservan su escritura original. Los parámetros de rastreo que añaden las empresas de publicidad y analítica se marcan solo si su documentación oficial los confirma, y puedes quitarlos de una vez. También muestra qué valor leen PHP, Python, Java y otros servidores cuando un mismo nombre aparece varias veces. La URL que pegas no sale de tu navegador.
Cuándo conviene ver la consulta como tabla
- Antes de compartir un enlace: los enlaces de anuncios y boletines suelen acabar en una cola larga de
utm_source,gclidofbclid. Sin ella la URL es más corta, y un ID que señala un clic de anuncio o un destinatario de correo no se reutiliza en la visita de otra persona. - Crear o revisar enlaces de campaña: se ve de un vistazo si utm_source, utm_medium y utm_campaign están bien escritos y si algún nombre aparece dos veces. '+ UTM' añade los tres como filas vacías.
- Comprobar la URL de una petición a una API: cambia un valor y vuelve a enviar, o mira cómo se transmiten un valor vacío y un nombre sin =. El resultado también se copia como JSON.
- Corregir la URL de retorno tras un login o un pago: la dirección dentro de
redirect_urionextestá codificada por segunda vez y cuesta leerla. 'Abrir como tabla' permite editar la URL interior por separado y devolverla a la exterior. - Comprobar que los filtros llegan al servidor: PHP lee
color=white&color=blackcomo un solo valor (el último), mientras que Python lee una lista de dos. Así comparas lo que recibe realmente el servidor. - Leer URL de registros de acceso: los registros del servidor y las herramientas de analítica guardan búsquedas y filtros codificados. Decodifícalos elemento por elemento.
Cómo se usa
- Pegar: escribe en 'URL original' una URL completa (
https://…), una consulta que empiece por?o soloname=kim&page=2. La consulta se separa en una tabla de nombres y valores, y el principio de la URL y lo que va tras#tienen su propia casilla. - Quitar el rastreo: en la barra de longitud, las celdas rayadas son ID de clic o de visita y las celdas naranja claro son etiquetas de campaña. 'Quitar ID de clic' elimina solo ID como gclid y fbclid. 'Quitar todo el rastreo' elimina también etiquetas de campaña como UTM. 'Deshacer' las recupera al instante.
- Editar la tabla: escribe los valores como texto normal, sin codificar. Intro pasa a la celda siguiente y en la última fila crea un elemento nuevo (Mayús+Intro hace un salto de línea dentro del valor). × quita una fila, 'Ordenar por nombre' ordena y 'Restablecer' vuelve al principio.
- Abrir una URL dentro de un valor: cuando un valor es una URL, en la columna de marcas aparece 'Abrir como tabla'. Edita la URL interior igual que la exterior y pulsa 'Volver a la URL exterior' para ponerla en el valor exterior.
- Copiar: copia la URL reconstruida como URL completa, solo consulta o JSON. Los elementos editados van subrayados. También eliges si los espacios editados se escriben como
+o%20, y si los elementos intactos conservan su escritura original. - Ver lo que lee el servidor: al pulsar una fila, las tarjetas de abajo muestran cómo lee ese nombre cada uno de ocho entornos. El color del borde izquierdo indica la forma de leer (primer valor, último valor, lista, unido con comas, descartado).
Los caracteres que separan la consulta
Las reglas de análisis de consultas del estándar WHATWG URL (application/x-www-form-urlencoded) cortan la consulta en &, separan cada trozo en su primer = en nombre y valor, convierten + en espacio, devuelven %XX a bytes y los leen como UTF-8. El URLSearchParams del navegador sigue exactamente esas reglas, y esta herramienta también al construir la tabla.
| Carácter | Qué hace | Ejemplo | Valor que se ve en la tabla |
|---|---|---|---|
? | Empieza la consulta, justo tras el primer ? de la URL. Un ? dentro de la consulta suele ser un carácter más | /search?q=a?b | q → a?b |
& | Frontera entre elementos | a=1&b=2 | a → 1, b → 2 |
= | Frontera entre nombre y valor. Solo cuenta el primer = | a=1=2 | a → 1=2 |
# | Termina la consulta y empieza el fragmento. El fragmento no se envía al servidor | ?q=a#top | q → a, fragmento top |
+ | Un espacio | q=red+shoe | q → red shoe |
%XX | Un byte (dos dígitos hexadecimales) | k=%C3%A9 | k → é |
; | No es un separador | z=1;w=2 | z → 1;w=2 |
Un flag suelto, sin signo igual, se lee como un elemento de valor vacío, igual que flag=, y un trozo vacío como && se salta. La especificación HTML 4.01 recomendaba que los servidores aceptaran ; en lugar de &, pero el estándar URL actual y parse_qs de Python usan solo &. Go considera inválido un par que contenga ; y lo descarta.
Cómo se leen nombres y valores
| Consulta original | Valor en la tabla | Por qué |
|---|---|---|
q=red+shoe | red shoe | + es un espacio |
lang=C%2B%2B | C++ | Un signo más literal se escribe %2B |
lang=C++ | C seguida de dos espacios | Los dos + se leen como espacios |
p=100% | 100% | Un % sin dos dígitos hexadecimales detrás se queda como carácter (en la columna de marcas aparece '% mal') |
b=%2526 | %26 | Se decodifica una sola vez. Un valor codificado dos veces conserva una capa |
e=%E9 | � | Es la 'é' de Windows-1252, un byte que no es UTF-8 válido (marca 'No es UTF-8') |
flag | (valor vacío) | Sin signo igual, el valor queda vacío (marca 'Sin =') |
Los valores escritos en una codificación antigua que no sea UTF-8 se ven rotos en la tabla. Si no editas ese elemento, 'Conservar notación original' deja intactos los bytes originales y la URL reconstruida se abre como antes. Para saber qué caracteres eran, usa la detección automática de codificación del codificador y decodificador de URL.
Parámetros de rastreo: qué se puede quitar
Un parámetro de rastreo no tiene que ver con el contenido de la página. Indica al sitio de qué anuncio, correo o campaña viene el visitante. Sin él normalmente se abre la misma página, pero el responsable del sitio ya no sabe de dónde llegó esa visita. La herramienta marca solo los nombres confirmados en la documentación oficial de cada empresa y los reparte en dos grupos.
- ID de clic o de visita (celdas rayadas de la barra): valores que señalan un clic de anuncio, un destinatario de correo o una visita concretos. No hay motivo para pasárselos a otra persona, así que conviene quitarlos antes de compartir.
- Etiquetas de campaña (celdas claras): rótulos que indican a qué fuente, medio y campaña pertenece el enlace. Consérvalas en los enlaces de campaña que creas tú. Si reenvías el enlace de otra persona, puedes quitarlas.
| Nombre | Quién lo añade | Significado | Grupo |
|---|---|---|---|
utm_source utm_medium utm_campaign utm_term utm_content | El anunciante que crea el enlace (los lee Google Analytics) | Fuente, medio, campaña, palabra clave, contenido del anuncio | Etiqueta de campaña |
utm_id utm_source_platform utm_creative_format utm_marketing_tactic | El anunciante (la plataforma de origen la rellenan solas algunas plataformas de Google) | ID de campaña, plataforma de origen, formato del anuncio, táctica de segmentación | Etiqueta de campaña |
gclid gbraid wbraid | Etiquetado automático de Google Ads | ID de clic de anuncio (gbraid y wbraid sirven para medir conversiones en iOS) | ID de clic o visita |
gad_source gad_campaignid | Google Ads | Origen del anuncio e ID de la campaña que generó el clic | Etiqueta de campaña |
dclid | Campaign Manager 360, Display & Video 360 | ID de clic de anuncio de display | ID de clic o visita |
srsltid | Etiquetado automático de Google Merchant Center | Señala una visita llegada desde una ficha gratuita de Google Shopping | ID de clic o visita |
_gl | Etiqueta de Google (medición entre dominios) | Valor de enlace que pasa los datos de la visita a otro dominio | ID de clic o visita |
fbclid | Meta | ID de clic en enlaces de Facebook e Instagram | ID de clic o visita |
msclkid | Etiquetado automático de Microsoft Advertising | ID de clic de anuncio | ID de clic o visita |
ttclid twclid li_fat_id | TikTok · X · LinkedIn | ID de clic de anuncio de cada empresa | ID de clic o visita |
mc_eid | Mailchimp (campañas con seguimiento de comercio electrónico activado) | ID del destinatario del correo | ID de clic o visita |
mc_cid | Mailchimp | ID de la campaña de correo que contiene el enlace | Etiqueta de campaña |
_hsenc _hsmi | Correo de HubSpot | Identificación del destinatario y seguimiento de clics en el correo | ID de clic o visita |
yclid | Yandex Direct | ID de clic de anuncio | ID de clic o visita |
mtm_campaign pk_campaign y otros | Analítica de Matomo | Rótulos de nombre de campaña, palabra clave y fuente | Etiqueta de campaña |
NaPm | Naver Ads (buscador surcoreano) | Se añade al hacer clic en un anuncio y sirve para el seguimiento de conversiones | ID de clic o visita |
Los valores sin explicación oficial, como si en los enlaces para compartir de YouTube o igsh en los de Instagram, no están en la lista. Si sabes lo que hacen y quieres quitarlos, pulsa × en la fila. Los nombres que solo se parecen, como ref, source o from, no se tocan porque algunos sitios los usan para el contenido de la página.
Un mismo nombre repetido: cada servidor lo lee a su manera
Cuando un nombre se repite, como en tag=red&tag=blue, el estándar URL conserva los dos elementos en orden. Qué valor usa luego el código depende del lenguaje o del framework que recibe la petición, y varían. Muchas tiendas envían varios valores a propósito para los filtros, de modo que un servidor que lea un solo valor pierde parte de la selección.
| Entorno | Código que lo lee | Resultado | Cómo lo lee |
|---|---|---|---|
| JavaScript | new URLSearchParams(q).get('tag') | "red" | Primer valor (getAll devuelve los dos) |
| PHP | $_GET['tag'] | "blue" | Último valor |
| Python | parse_qs(q)['tag'] | ["red", "blue"] | Todos en una lista |
| Django | request.GET['tag'] | "blue" | Último valor (getlist devuelve los dos) |
| Node · Express 5 | req.query.tag | ["red", "blue"] | Todos en una lista (analizador por defecto: querystring) |
| Java Servlet | request.getParameter("tag") | "red" | Primer valor (getParameterValues devuelve los dos) |
| Go | r.URL.Query().Get("tag") | "red" | Primer valor |
| ASP.NET Core | Request.Query["tag"] | "red,blue" | Unidos con una coma al convertir en texto |
PHP lee tag[]=red&tag[]=blue, con corchetes tras el nombre, como un array, y convierte en guiones bajos los puntos y espacios del nombre. Así, price.min=10000 pasa a ser $_GET['price_min'] y puede chocar con otro elemento llamado price_min. El parse_qs de Python descarta por defecto los valores vacíos, de modo que flag y empty= ni siquiera dejan clave; para conservarlos se pasa keep_blank_values=True. Go descarta los pares que contienen ; o un % incorrecto. 'Lo que lee el servidor', debajo de la herramienta, calcula estas diferencias para el elemento que elijas.
Cuando el valor lleva otra URL
Cuando una URL entera va dentro de un valor, como en redirect_uri, next o returnUrl, hay que codificar todos los ? & = # de la URL interior para que no se lean como caracteres de la consulta exterior. Si la pegas sin codificar, lo que sigue al & interior se convierte en otro elemento de la URL exterior.
| Cómo se inserta | Elementos que lee la URL exterior |
|---|---|
Pegada tal cual?next=https://shop.example.com/cart?item=12&size=L | next → https://shop.example.com/cart?item=12 size → L (se parte en dos) |
Codificada?next=https%3A%2F%2Fshop.example.com%2Fcart%3Fitem%3D12%26size%3DL | next → https://shop.example.com/cart?item=12&size=L |
Si la URL interior tiene valores codificados propios, se codifican una vez más y aparecen como %252F. 'Abrir como tabla' muestra aparte la URL interior, con una capa menos que el valor exterior. Tras editarla, 'Volver a la URL exterior' la codifica de nuevo y la devuelve a su sitio. En el ejemplo 'Redirección de login', el redirect_uri lleva una capa más: next=%2Fcart.
Qué cambia al reconstruir la URL
Una misma consulta se puede escribir de varias formas. Un espacio como + o %20, flag o flag=, los dígitos hexadecimales en mayúscula %C3 o en minúscula %c3 se leen como el mismo valor. A la mayoría de los servidores les da igual, pero una URL firmada puede dejar de valer, según el servidor, si se escribe distinto de como se firmó. Por eso 'Conservar notación original' viene activado y solo se vuelven a codificar los elementos editados.
| Elemento original | Conservar notación original | Desactivado · espacio como + | Desactivado · espacio como %20 |
|---|---|---|---|
q=red%20shoe | q=red%20shoe | q=red+shoe | q=red%20shoe |
flag | flag | flag= | flag= |
n=%c3%a9 | n=%c3%a9 | n=%C3%A9 | n=%C3%A9 |
t=~tilde | t=~tilde | t=%7Etilde | t=~tilde |
a=x;y | a=x;y | a=x%3By | a=x%3By |
La regla del + es la de los formularios HTML y de URLSearchParams, y la del %20 es la de encodeURIComponent() de JavaScript. El URLSearchParams del navegador reescribe todos los elementos aunque borres solo uno, y entonces %20 se convierte en + (véase el código de abajo). Las URL firmadas, como una URL prefirmada de AWS S3 (X-Amz-Signature) o una SAS de Azure Storage (sig), no deben editarse: hace falta una firma nueva. La herramienta avisa cuando editas una URL que lleva firma.
Hacerlo en código
// JavaScript
const u = new URL('https://shop.example.com/p?color=white&color=black&q=red%20shoe&utm_source=boletin');
u.searchParams.getAll('color'); // ['white', 'black']
u.searchParams.delete('utm_source');
u.toString(); // 'https://shop.example.com/p?color=white&color=black&q=red+shoe' (%20 pasó a +)
# Python
from urllib.parse import urlsplit, parse_qsl, urlencode, urlunsplit
s = urlsplit('https://shop.example.com/p?color=white&color=black&flag&utm_source=boletin')
pairs = [(k, v) for k, v in parse_qsl(s.query, keep_blank_values=True) if not k.startswith('utm_')]
urlunsplit(s._replace(query=urlencode(pairs)))
# 'https://shop.example.com/p?color=white&color=black&flag=' (flag pasó a flag=)
// PHP
parse_str('tag=red&tag=blue&size[]=S&size[]=M&price.min=10000', $q);
// $q = ['tag' => 'blue', 'size' => ['S', 'M'], 'price_min' => '10000']
http_build_query(['tag' => ['red', 'blue']]);
// 'tag%5B0%5D=red&tag%5B1%5D=blue'
Los tres analizan la consulta y la vuelven a escribir, así que ninguno conserva la escritura original. Si esta importa, hay que recortar de la cadena de consulta los trozos que sobran y unir el resto a mano. Es lo que hace 'Conservar notación original' en esta herramienta.
Errores frecuentes
- Escribir %20 en una celda de valor: los valores de la tabla son texto ya decodificado. Si escribes
%20, la herramienta ve los caracteres %, 2 y 0 y envía%2520. Escribe un espacio normal. - Pegar C++ directamente en una consulta:
lang=C++se lee como 'C' y dos espacios. Si escribes C++ en una celda de valor, la herramienta lo escribe comoC%2B%2B. - Borrar un nombre repetido pensando que es un error:
color=white&color=blackpuede ser un filtro con varias opciones. Comprueba antes cómo lo lee el servidor. - Borrar los elementos de valor vacío:
empty=oflagtambién pueden significar algo. Algunos servidores activan una función solo porque el elemento existe. - Tratar como consulta lo que va tras #: el
x=1de/page#tab?x=1forma parte del fragmento, no viaja al servidor, y la herramienta lo deja en la casilla del fragmento. - Olvidar codificar una URL dentro de un valor: el
&de la URL interior parte en dos el elemento exterior. - Alargar solo la caducidad de una URL firmada: cambiar
X-Amz-Expiresinvalida la firma y se rechaza la petición.
Límites
- La herramienta separa la consulta solo en
&, como el estándar URL. No separa los sitios que dividen los elementos con;o,ni los parámetros dentro de la ruta (/a;b=1/). - Los valores se decodifican solo como UTF-8. Los valores en codificaciones antiguas se ven rotos, y al editar ese elemento se vuelve a codificar como UTF-8.
- El principio de la URL (esquema, host y ruta) y el fragmento
#se tratan tal como están escritos, sin codificar ni limpiar. - Incluso con 'Conservar notación original', si cambias cualquier elemento desaparecen los trozos vacíos (
&&) y el&final. - Solo se marcan los parámetros de rastreo confirmados en documentación oficial. Cualquier otro valor de rastreo tienes que quitarlo tú.
- 'Lo que lee el servidor' muestra el comportamiento por defecto de cada entorno. Si cambias la configuración o usas otro analizador (qs, Rack, etc.), el resultado varía, y límites como max_input_vars de PHP no se tienen en cuenta.
- La herramienta no se conecta a la URL, así que no comprueba si la dirección abre ni si es segura.
Base: el análisis de la consulta sigue las reglas application/x-www-form-urlencoded del estándar WHATWG URL, los parámetros de rastreo proceden de las páginas de ayuda oficiales de cada empresa, y el comportamiento de cada servidor se comprobó el 22 de octubre de 2026 con ejecuciones de PHP 8.5, Python 3.14 y Node.js 26 y con la documentación oficial de Java Servlet, Go, ASP.NET Core, Django y Express 5.
Fuentes
- 01WHATWG URL Standard: application/x-www-form-urlencodedCorte en &, primer =, + como espacio, decodificación de porcentajes y serialización
- 02MDN: URLSearchParamsget, getAll, delete, toString
- 03Ayuda de Google Analytics: recopilar datos de campaña con URL personalizadasSignificado de los nueve parámetros utm
- 04Ayuda de Google Ads: identificador de clic de Google (GCLID)El valor que el etiquetado automático añade a cada clic de anuncio
- 05Ayuda de Google Ads: gbraid y wbraidParámetros para medir conversiones en iOS
- 06Ayuda de Google Ads: gad_source y gad_campaignidOrigen del anuncio e ID de campaña
- 07Etiqueta de Google: medición entre dominiosEl parámetro de enlace _gl
- 08Meta: parámetros fbp y fbcEl ID de clic que se añade a los enlaces (fbclid)
- 09Documentación de empresas de anuncios y correo: dclid · srsltid · ID de clic de Microsoft · ttclid · twclid · li_fat_id · mc_cid, mc_eid · _hsenc, _hsmi · yclid · Matomo · NaPmExplicación oficial de la empresa que añade cada parámetro
- 10PHP: Variables From External SourcesPuntos y espacios del nombre pasan a guion bajo; arrays con []
- 11Python: urllib.parse.parse_qskeep_blank_values es False por defecto; solo & separa
- 12Django: QueryDict__getitem__ devuelve el último valor, getlist devuelve todos
- 13Express 5: app settings (query parser)El valor por defecto "simple" es el querystring de Node
- 14Java EE: ServletRequest.getParameterCon varios valores, el primero de getParameterValues
- 15Go: net/urlValues.Get devuelve el primer valor; un par con ; es inválido
- 16.NET: StringValues.ToStringVarios valores unidos con comas en un texto
- 17HTML 4.01, apéndice B.2.2La antigua recomendación de aceptar ; en lugar de &
Preguntas frecuentes
¿Qué es la consulta de una URL (query string)?
Es la parte de la URL que va después del ? y antes de un posible #. Pares como color=white&size=42 unidos con & que llevan al servidor búsquedas, números de página, filtros o valores de rastreo. Cada sitio decide qué significa cada nombre.
¿Puedo pegar solo name=kim&page=2 sin el signo de interrogación?
Sí. La herramienta acepta una URL completa, una consulta que empiece por ? y una consulta sin interrogación. Con una URL completa, el principio de la dirección y el fragmento # tienen su propia casilla, y puedes copiar la URL completa reconstruida o solo la consulta.
¿Se abre la misma página si quito los parámetros de rastreo?
Normalmente sí, porque valores como utm o gclid sirven para contar de dónde viene una visita. Algunos sitios sí muestran un aviso o un cupón distinto según el origen, así que si la página se ve diferente, usa la URL original. También puedes quitar solo los ID de clic y dejar UTM.
Con tag=red&tag=blue, ¿qué valor se usa?
Depende del servidor. PHP y Django leen el último valor, blue. El get() de JavaScript, Java Servlet y Go leen el primero, red. El parse_qs de Python y Express 5 dan una lista con los dos, y ASP.NET Core los une como red,blue. Pulsa un elemento y la comparación aparece debajo de la herramienta.
¿Por qué el + de q=red+shoe se ve como un espacio?
En las reglas de formulario con las que se lee una consulta, + significa espacio. Un signo más literal hay que escribirlo %2B, y si escribes C++ en una celda de valor, la URL reconstruida contiene C%2B%2B.
Edité la tabla y %20 pasó a +. ¿Es el mismo valor?
Sí, al leer una consulta, %20 y + son ambos un espacio. Con 'Conservar notación original' activado, los elementos que no tocas quedan tal como estaban escritos y solo los editados usan la regla que elijas (+ o %20). Una URL firmada exige que coincida cada carácter, así que necesita una firma nueva.
¿Cómo edito una URL que va dentro de un valor?
Cuando un valor como redirect_uri o next es una URL, en la columna de marcas aparece 'Abrir como tabla'. Abre la URL interior como tabla propia y, después de editarla, 'Volver a la URL exterior' la codifica de nuevo y la pone en el valor exterior.
¿La URL que escribo se envía a un servidor o se guarda?
No. La separación, la reconstrucción, la detección de rastreo y la comparación por servidor se calculan en este navegador. La URL no se envía ni se guarda, no se añade a la dirección de la página y la herramienta nunca se conecta a ella.