Saltar al contenido principal
Volver al blog
· 12 min de lectura

Anatomía de una URL: estructura completa para desarrollo web

Guía completa de la estructura de una URL: protocolo, dominio, puerto, path, query string, fragment, diferencia entre URL/URI/URN, encoding, URLs absolutas vs relativas y buenas prácticas para construir URLs limpias.

web frontend networking

Contenido

URL (Uniform Resource Locator) es la dirección que identifica y localiza un recurso en la web. Cada vez que un navegador carga una página, descarga una imagen o se comunica con una API, interpreta una URL para determinar el protocolo de comunicación, el servidor destino y la ubicación exacta del recurso solicitado.

Para el desarrollo web, entender la estructura de una URL es una habilidad fundamental. Las URLs determinan cómo funciona el routing de una aplicación, cómo los motores de búsqueda indexan el contenido, cómo las SPAs gestionan la navegación del lado del cliente y cómo se construyen las peticiones a APIs REST. Una URL mal formada puede romper la navegación, afectar el posicionamiento SEO o exponer datos sensibles en la barra de direcciones.

Estructura general de una URL

Toda URL sigue una estructura definida por el estándar RFC 3986. Cada componente tiene una función específica. A continuación se muestra la URL https://edcilo.com:8080/about?id=345#skills desglosada en sus partes:

  https://edcilo.com:8080/about?id=345#skills
  \___/   \_________/ \__/\_____/ \____/ \____/
    |          |        |    |       |      |
 protocolo  dominio  puerto path  query  fragment
Componente Nombre técnico Obligatorio Ejemplo
https Esquema (scheme) Sí https, http, ftp
edcilo.com Autoridad — Host Sí example.com, 192.168.1.1
8080 Autoridad — Puerto No 443, 8080, 3000
/about Ruta (path) No /blog/mi-articulo
id=345 Consulta (query string) No page=2&sort=date
#skills Fragmento (fragment) No #seccion, #top

El esquema y el host son los únicos componentes obligatorios. El resto son opcionales y su presencia depende del tipo de recurso y la aplicación.

URL, URI y URN

Los términos URL, URI y URN se usan con frecuencia en documentación técnica y especificaciones, pero no significan lo mismo.

URI (Uniform Resource Identifier) es el término genérico que engloba cualquier cadena que identifique un recurso. URL y URN son subtipos de URI: la URL identifica un recurso por su ubicación (dónde está), mientras que la URN lo identifica por su nombre (qué es), independientemente de dónde se encuentre.

Concepto Significado Identifica por Ejemplo
URI Uniform Resource Identifier Nombre o ubicación (término genérico)
URL Uniform Resource Locator Ubicación (dónde) https://edcilo.com/about
URN Uniform Resource Name Nombre (qué) urn:isbn:978-3-16-148410-0

Nota: en la práctica, los términos URL y URI se usan de forma intercambiable en el contexto del desarrollo web. La distinción es relevante principalmente en especificaciones formales (RFC 3986).

Esquema (protocolo)

El esquema es el primer componente de una URL y define el protocolo de comunicación que el cliente debe usar para acceder al recurso. Técnicamente se denomina “scheme” en la especificación RFC 3986, aunque coloquialmente se le llama protocolo. Aparece antes del separador ://.

Esquema Protocolo Puerto por defecto Uso
http HyperText Transfer Protocol 80 Tráfico web sin cifrar
https HyperText Transfer Protocol Secure 443 Tráfico web cifrado (TLS)
ftp File Transfer Protocol 21 Transferencia de archivos
mailto — — Direcciones de correo electrónico
tel — — Números de teléfono
file — — Archivos locales del sistema
ws WebSocket 80 Comunicación bidireccional sin cifrar
wss WebSocket Secure 443 Comunicación bidireccional cifrada

Nota: HTTPS es el estándar actual para cualquier sitio web. Los navegadores modernos marcan las conexiones HTTP como “No seguras”. Además, el mecanismo HSTS (HTTP Strict Transport Security) permite a los servidores indicar que solo deben ser contactados a través de HTTPS, forzando la redirección automática desde HTTP.

Dominio (host)

El dominio es el nombre legible que identifica al servidor donde se aloja el recurso. Cuando un navegador encuentra un dominio en una URL, consulta el sistema DNS (Domain Name System) para resolver ese nombre a una dirección IP, que es la que realmente se usa para establecer la conexión TCP con el servidor.

Estructura de un dominio

Un nombre de dominio se compone de varios niveles, separados por puntos y leídos de derecha a izquierda:

  blog.edcilo.com
  \__/ \____/ \_/
   |      |    |
   |      |   TLD (dominio de nivel superior)
   |   dominio de segundo nivel (SLD)
  subdominio

Dominios de nivel superior (TLD)

El TLD es el nivel más alto en la jerarquía de nombres de dominio. Existen diferentes categorías:

Tipo Descripción Ejemplos
gTLD Genéricos .com, .org, .net, .io, .dev
ccTLD Código de país .mx, .es, .ar, .co, .uk
sTLD Patrocinados .edu, .gov, .mil

Subdominios

Un subdominio es un prefijo que se antepone al dominio de segundo nivel para organizar secciones o servicios de un sitio. No requiere registrar un dominio nuevo; se configura como un registro DNS adicional.

Subdominio Uso común
www Sitio web principal
blog Blog del sitio
api API del servicio
app Aplicación web
staging Entorno de pruebas
docs Documentación
cdn Red de distribución de contenido

Direcciones IP como host

El host de una URL no tiene que ser necesariamente un dominio. También puede ser una dirección IP directa, como http://192.168.1.10:3000 o http://127.0.0.1:8080. Esto es común en entornos de desarrollo local, donde no se configura un dominio para el servidor de desarrollo.

Puerto

El puerto es un número entre 1 y 65535 que identifica un servicio específico en el servidor. Se separa del dominio con el carácter :. Cuando se usa el puerto por defecto del protocolo, se omite de la URL porque el navegador lo asume implícitamente.

Puerto Protocolo Cuándo se omite
80 HTTP http://example.com (implícito)
443 HTTPS https://example.com (implícito)
21 FTP ftp://example.com (implícito)
3000 — Común en desarrollo (Node.js, React)
5173 — Vite dev server
8080 — Proxies, servidores de desarrollo
5432 — PostgreSQL
3306 — MySQL

Nota: los puertos se dividen en tres rangos. Los puertos 0-1023 son well-known ports, reservados para servicios estándar y requieren privilegios de superusuario. Los puertos 1024-49151 son puertos registrados, asignados por IANA a aplicaciones específicas. Los puertos 49152-65535 son puertos dinámicos o efímeros, usados temporalmente por el sistema operativo para conexiones salientes.

Ruta (path)

La ruta indica la ubicación del recurso dentro del servidor. Históricamente correspondía a la ruta de un archivo en el sistema de archivos del servidor web. En las aplicaciones modernas, la ruta es una abstracción gestionada por el router del framework, que la mapea a un controlador, una función o un componente.

Convenciones de rutas en la web

Patrón Ejemplo Descripción
Ruta raíz / Página de inicio
Ruta estática /about Página estática
Ruta jerárquica /blog/mi-articulo Recurso anidado
Ruta con parámetro /users/42 Identificador dinámico
Ruta con extensión /docs/manual.pdf Archivo específico
Trailing slash /about/ vs /about Depende del framework

Rutas y SEO

Los motores de búsqueda consideran la URL como una señal de relevancia. Las rutas con palabras descriptivas posicionan mejor que las rutas con identificadores numéricos o parámetros crípticos. El concepto de slug se refiere a la versión legible y optimizada de un título que se usa como parte de la ruta, por ejemplo: /blog/anatomia-de-una-url en lugar de /blog/post?id=347.

Query string (cadena de consulta)

La query string permite enviar pares de clave-valor al servidor como parte de la URL. Comienza con el carácter ? y cada par se separa con &.

Sintaxis

  ?page=2&sort=date&order=desc
   |       |          |
   |       |        tercer parámetro
   |     segundo parámetro
  primer parámetro (inicia con ?)

Usos comunes en desarrollo web

  • Paginación — ?page=3&limit=20
  • Filtrado — ?category=frontend&level=senior
  • Ordenamiento — ?sort=date&order=desc
  • Búsqueda — ?q=estructura+url
  • Tracking y analytics — ?utm_source=twitter&utm_medium=social
  • Configuración de vista — ?theme=dark&lang=es

Consideraciones

Nota: la especificación HTTP no define un límite para la longitud de una URL, pero los navegadores y servidores sí lo imponen en la práctica. La mayoría de navegadores soportan URLs de hasta 2048 caracteres, aunque algunos servidores aceptan más. Los parámetros en la query string son visibles en la barra de direcciones, en el historial del navegador y en los logs del servidor, por lo que nunca deben contener datos sensibles como contraseñas o tokens. Desde el punto de vista SEO, las URLs con query strings excesivas pueden dificultar la indexación, ya que los motores de búsqueda pueden interpretar cada combinación de parámetros como una página diferente.

Fragment (fragmento)

El fragmento es la parte de la URL que comienza con el carácter #. Referencia una sección específica dentro del documento y se procesa exclusivamente en el lado del cliente.

Uso en páginas estáticas

En páginas HTML convencionales, el fragmento apunta a un elemento que tiene el atributo id correspondiente. El navegador realiza un scroll automático hacia ese elemento al cargar la página. Por ejemplo, la URL https://edcilo.com/about#skills desplaza la vista directamente al elemento con id="skills".

Fragments en SPAs

Antes de la adopción generalizada de la History API, muchas aplicaciones de página única (SPAs) utilizaban fragmentos para implementar routing del lado del cliente, con URLs como https://app.example.com/#/dashboard o https://app.example.com/#/users/42. Este patrón se conoce como hash-based routing. Los frameworks modernos como React Router, Vue Router y similares prefieren rutas basadas en path usando la History API, que produce URLs más limpias y compatibles con SEO.

Nota: el fragmento no se incluye en las peticiones HTTP al servidor. Si la URL es https://example.com/page#seccion, el navegador envía una petición a https://example.com/page y luego navega al fragmento localmente.

Encoding de caracteres especiales

Las URLs solo admiten un subconjunto de caracteres ASCII. Los caracteres reservados (que tienen un significado especial en la estructura de la URL) y los caracteres fuera de ASCII deben codificarse usando percent-encoding: se reemplazan por % seguido de su valor hexadecimal en UTF-8.

Carácter Codificado Descripción
(espacio) %20 o + Espacio en blanco
& %26 Separador de parámetros
= %3D Asignación de valor
? %3F Inicio de query string
# %23 Inicio de fragment
/ %2F Separador de ruta
@ %40 Separador de usuario
% %25 Carácter de escape
ñ %C3%B1 Caracteres fuera de ASCII
á %C3%A1 Caracteres acentuados

Ejemplo práctico: la búsqueda “café con leche” se codifica en la query string como ?q=caf%C3%A9%20con%20leche.

URLs absolutas y relativas

Una URL absoluta incluye el esquema y el dominio completo, proporcionando la dirección completa del recurso. Una URL relativa omite parte de la estructura y se resuelve respecto al documento actual.

Tipo Ejemplo Se resuelve como (desde https://edcilo.com/blog/)
Absoluta https://edcilo.com/about https://edcilo.com/about
Relativa al root /about https://edcilo.com/about
Relativa al directorio mi-articulo https://edcilo.com/blog/mi-articulo
Relativa con protocolo //cdn.example.com/img.png https://cdn.example.com/img.png
Relativa al padre ../about https://edcilo.com/about

Las URLs absolutas son necesarias para enlaces a dominios externos. Para la navegación interna de un sitio, las URLs relativas al root (/about) son la opción más robusta: funcionan independientemente de la ruta actual del documento y evitan problemas cuando la base del sitio cambia.

Buenas prácticas para construir URLs limpias

  • Usa HTTPS siempre — el tráfico cifrado protege la integridad y privacidad de la comunicación. Los navegadores penalizan las conexiones HTTP y los motores de búsqueda priorizan sitios con HTTPS.
  • Usa rutas descriptivas con palabras clave — una URL como /blog/anatomia-de-una-url comunica el contenido de la página tanto a los usuarios como a los motores de búsqueda.
  • Separa palabras con guiones (-), no guiones bajos (_) — los motores de búsqueda tratan los guiones como separadores de palabras, mientras que los guiones bajos no se interpretan de la misma forma.
  • Usa minúsculas en las rutas — las URLs son case-sensitive en la mayoría de servidores. Usar minúsculas de forma consistente evita duplicados y errores 404.
  • Evita parámetros innecesarios en la query string — cada parámetro adicional hace la URL más difícil de leer, compartir y cachear.
  • Mantén las URLs cortas y significativas — elimina palabras vacías y segmentos redundantes. Una URL concisa es más fácil de memorizar, compartir y analizar en logs.
  • Define una convención para trailing slashes — decide si las rutas terminan con / o sin ella y aplícalo de forma consistente en todo el sitio. Configura redirecciones para evitar contenido duplicado.
  • No expongas datos sensibles en la URL — tokens, contraseñas o identificadores internos en la URL quedan registrados en el historial del navegador, logs del servidor y cabeceras Referer.
  • Usa fragmentos para navegación dentro de la página — los fragmentos permiten enlazar a secciones específicas sin recargar la página, mejorando la experiencia de usuario en documentos largos.
  • Codifica correctamente los caracteres especiales — los caracteres fuera del subconjunto ASCII permitido deben usar percent-encoding para evitar URLs rotas o interpretaciones ambiguas.

Compartir