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

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
ComponenteNombre técnicoObligatorioEjemplo
httpsEsquema (scheme)https, http, ftp
edcilo.comAutoridad — Hostexample.com, 192.168.1.1
8080Autoridad — PuertoNo443, 8080, 3000
/aboutRuta (path)No/blog/mi-articulo
id=345Consulta (query string)Nopage=2&sort=date
#skillsFragmento (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.

ConceptoSignificadoIdentifica porEjemplo
URIUniform Resource IdentifierNombre o ubicación(término genérico)
URLUniform Resource LocatorUbicación (dónde)https://edcilo.com/about
URNUniform Resource NameNombre (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 ://.

EsquemaProtocoloPuerto por defectoUso
httpHyperText Transfer Protocol80Tráfico web sin cifrar
httpsHyperText Transfer Protocol Secure443Tráfico web cifrado (TLS)
ftpFile Transfer Protocol21Transferencia de archivos
mailtoDirecciones de correo electrónico
telNúmeros de teléfono
fileArchivos locales del sistema
wsWebSocket80Comunicación bidireccional sin cifrar
wssWebSocket Secure443Comunicació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:

TipoDescripciónEjemplos
gTLDGenéricos.com, .org, .net, .io, .dev
ccTLDCódigo de país.mx, .es, .ar, .co, .uk
sTLDPatrocinados.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.

SubdominioUso común
wwwSitio web principal
blogBlog del sitio
apiAPI del servicio
appAplicación web
stagingEntorno de pruebas
docsDocumentación
cdnRed 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.

PuertoProtocoloCuándo se omite
80HTTPhttp://example.com (implícito)
443HTTPShttps://example.com (implícito)
21FTPftp://example.com (implícito)
3000Común en desarrollo (Node.js, React)
5173Vite dev server
8080Proxies, servidores de desarrollo
5432PostgreSQL
3306MySQL

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ónEjemploDescripción
Ruta raíz/Página de inicio
Ruta estática/aboutPágina estática
Ruta jerárquica/blog/mi-articuloRecurso anidado
Ruta con parámetro/users/42Identificador dinámico
Ruta con extensión/docs/manual.pdfArchivo específico
Trailing slash/about/ vs /aboutDepende 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ácterCodificadoDescripción
(espacio)%20 o +Espacio en blanco
&%26Separador de parámetros
=%3DAsignación de valor
?%3FInicio de query string
#%23Inicio de fragment
/%2FSeparador de ruta
@%40Separador de usuario
%%25Carácter de escape
ñ%C3%B1Caracteres fuera de ASCII
á%C3%A1Caracteres 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.

TipoEjemploSe resuelve como (desde https://edcilo.com/blog/)
Absolutahttps://edcilo.com/abouthttps://edcilo.com/about
Relativa al root/abouthttps://edcilo.com/about
Relativa al directoriomi-articulohttps://edcilo.com/blog/mi-articulo
Relativa con protocolo//cdn.example.com/img.pnghttps://cdn.example.com/img.png
Relativa al padre../abouthttps://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.