Guías

Añade un desplegable de país con un valor predeterminado según la IP

Un desplegable de país que toma como valor predeterminado el país que sugiere la dirección IP del visitante ahorra a la mayoría de las personas recorrer una lista larga, siempre que les permita cambiarlo cuando el valor predeterminado es incorrecto.

Obtener el valor predeterminado

Consulta la dirección IP del visitante en tu servidor cuando se solicita la página y lee el campo country_code de la respuesta para establecerlo como opción seleccionada del desplegable antes incluso de enviar la página al navegador.

GET /v1/ip?ip=192.0.2.15
{
  "status": "ok",
  "ip": "192.0.2.15",
  "version": 4,
  "found": true,
  "country": "Spain",
  "country_code": "ES",
  "region": "Madrid",
  "city": "Madrid",
  "postcode": "28001",
  "lat": 40.4168,
  "lon": -3.7038,
  "timezone": "Europe/Madrid",
  "asn": 5678,
  "org": "Example Networks"
}

Renderizarlo en el servidor

Como todo ocurre en el servidor, antes de renderizar la página, no aparece un valor predeterminado incorrecto que después se corrige en el navegador, que es lo que pasa con los enfoques del lado del cliente que hacen la llamada cuando la página ya se ha cargado. Pon el atributo selected en la opción correspondiente directamente en el HTML que generas, comparando country_code con los códigos ISO que ya usen los valores de tus opciones.

Un segundo ejemplo: rellenar de antemano el campo de país del checkout

La misma llamada funciona igual de bien en una página de checkout que en un formulario de registro. Consulta la IP del comprador una vez cuando se carga la página de checkout, compara country_code con tu lista de países de envío y selecciónalo por defecto. Como el país de envío afecta a los impuestos y a las opciones de entrega que se muestran más abajo en la página, acertar antes de que se renderice evita una recolocación brusca del contenido si el visitante tuviera que corregirlo después de que todo lo demás ya se hubiera cargado en torno a un valor predeterminado incorrecto.

Permite siempre cambiarlo

Trata el país basado en la IP como un punto de partida, no como una respuesta cerrada. Un visitante que está de viaje, que usa una VPN del trabajo o que simplemente vive en un lugar que no coincide con la dirección registrada de su proveedor de red tendrá que elegir otra opción, así que nada en el formulario debe dar por hecho que el valor predeterminado es correcto.

Un error habitual que debes evitar

No almacenes en caché la página completamente renderizada detrás de una CDN o un proxy inverso sin variarla por visitante, ya que una página renderizada una vez para la IP del primer visitante y servida después desde la caché a todos los demás mostrará el país de ese primer visitante a todos los visitantes posteriores, estén donde estén realmente. Si tus páginas se almacenan en caché, excluye este fragmento de la caché o renderízalo mediante un pequeño include del lado del servidor que se ejecute en cada solicitud.

Qué hacer cuando la consulta no encuentra nada

Si found devuelve false, algo que ocurre con algunos rangos privados o no asignados, recurre a un valor predeterminado neutro, como una selección vacía o tu país más habitual, en lugar de dejar el campo en un estado indefinido.

Los visitantes con IPv6 funcionan igual

Un visitante que se conecta por IPv6 recibe el mismo campo country_code del mismo endpoint, solo que resuelto sobre una red /48 en lugar de /24. No hay que cambiar nada en la lógica del desplegable según la versión de IP de la solicitud. Consulta la documentación de consulta de IPv6 si quieres los detalles específicos de cada versión.

Coste de esta función

Es una solicitud por cada nueva sesión de visitante, almacenada en caché durante la sesión para que una sola visita no provoque consultas repetidas en varias páginas de formulario. Así la función queda holgadamente dentro de las 2.500 solicitudes gratuitas al día incluidas con cada clave, o disponibles desde una sola dirección sin clave, salvo en los sitios con más tráfico.

Un valor predeterminado sensato ahorra recorrer una lista de cien elementos, y el visitante sigue teniendo el control total si la suposición falla. Los detalles de los campos están en la documentación de consulta de IPv4.