Saltar al contenido
Juan Carlos Angulo

Construyo software rápido y hago que se encuentre en Google

Ingeniería de software y SEO técnico, trabajados como una sola disciplina, no por separado.

Juan Carlos Angulo, ingeniero de software y consultor SEO técnico

Con quiénes trabajé

SEO15

money.com logo
Miami Herald logo
Holafly logo
Souma Hotel Lima logo
TheSmokyRolling logo
DSLX logo
Vallas Venezuela logo
TheSmokyBox logo
Florida Health Care Academy logo
Delta Cloudz logo
Tursi Digital Nomads logo
The Sosa Team logo
Florida Top Roofs logo
Felipe Vergara logo
Storybook app logo

Desarrollo13

Luxembourg Philharmonie Logo
Arianna Lupi logo
Apturio logo
Childrenchic logo
TuMundoSalud logo
Crédito USS logo
Wiñaypaq logo
Dr. Manuel A. Vargas Hidalgo logo
Puntada con Amor logo
Aprendoclub logo
Pro Torque Diesel Logo
Cresory Logo
Estylopia logo

Errores reales, con el commit que los corrige

Cada uno de estos problemas estaba en este mismo sitio, y abajo está el cambio exacto que lo resolvió. El repositorio es público, así que podés abrir el commit y leerlo completo, no solo el pedazo que elegí mostrar.

Ver el repositorio completo

Google recibía dos anotaciones de hreflang que se contradecían

El middleware de next-intl arma los alternates a partir del prefijo de idioma: toma el pathname y le antepone /en. Eso acierta en todas las plantillas que comparten slug y falla justo en la única que lo tiene traducido, /servicios contra /en/services. En /servicios anunciaba por header un /en/servicios que resuelve, pero cuyo canonical apunta a otra URL, así que la misma respuesta se desmentía a sí misma.

src/middleware.tsts
return stripIntlAlternateLinks(intlMiddleware(request))

function stripIntlAlternateLinks(response: NextResponse): NextResponse {
  const link = response.headers.get('link')
  if (!link) return response

  const kept = link
    .split(/,\s*(?=<)/)
    .filter((entry) => !/rel="?alternate"?/i.test(entry))
    .join(', ')

  if (kept) {
    response.headers.set('link', kept)
  } else {
    response.headers.delete('link')
  }

  return response
}
23646a1

Una sola anotación, la del head

El sitemap devolvía 500 y un urlset vacío en producción

Corría cinco consultas en Promise.all más una sexta en secuencia, o sea hasta seis conexiones simultáneas contra la conexión directa de Postgres, que es la que no pasa por el pooler. Bajo esa presión el archivo se caía entero y quedaba servido el fallback vacío que la ruta ya tenía cableado para exactamente ese caso.

src/lib/sitemap-data.tsts
const getCachedSitemapEntries = unstable_cache(
  fetchSitemapEntries,
  ['sitemap-entries'],
  {
    tags: [CACHE_TAGS.posts(), CACHE_TAGS.caseStudies(), CACHE_TAGS.categories()],
    // Crawlers read the sitemap on their own schedule, so a slightly stale
    // listing costs nothing while a failed request under DB pressure costs
    // the whole file.
    revalidate: 900,
  },
)
6849e95

De 6 conexiones a 1 consulta cacheada

Las imágenes salían en WebP aunque el navegador aceptaba AVIF

El array de formats de Next tenía WebP y nada más. Next devuelve el primer formato de esa lista que el header Accept del pedido permite, así que con una sola entrada nunca había nada mejor para elegir, por más que el navegador lo estuviera pidiendo.

next.config.mjsjs
images: {
  // AVIF first, WebP as the fallback for anything that cannot decode it.
  // Next picks the first entry the request's `Accept` header allows.
  formats: ['image/avif', 'image/webp'],
},
4f8942e

AVIF servido donde el navegador lo acepta

Construí mi propio auditor SEO

Es la misma herramienta que uso en mis propios proyectos y en los de mis clientes, no la vendo como servicio, es software que construí y que mantengo en producción.

29

checks técnicos

5

categorías

500

URLs por auditoría

CWV

Core Web Vitals (PageSpeed Insights)

Probar el auditor (se abre en una pestaña nueva)

Plan gratuito: 1 auditoría por semana, por email verificado.

Mi enfoque en Consultoría Técnica

No veo el SEO y el desarrollo web como disciplinas aisladas. Los motores de búsqueda modernos evalúan la limpieza del código, la velocidad de carga y la arquitectura de la información, y por eso construyo sobre Next.js y CMS headless como Payload, con el SEO técnico diseñado en el código desde el primer commit en vez de parchado después con plugins genéricos sobre un WordPress estándar. Mi metodología parte de auditar antes de construir, hasta que la infraestructura técnica se vuelve el motor principal del crecimiento orgánico y tu web no solo funciona bien, sino que gana terreno real en los resultados de búsqueda.

Juan Carlos Angulo dando el taller de SEO técnico, con la diapositiva de introducción al SEO técnico detrás

SEO Técnico

Auditoría profunda de infraestructura, rendering y datos estructurados (Schema) para mejorar la visibilidad en buscadores.

Rendimiento web

Mi obsesión es el 100/100. Optimizo la ruta crítica de renderizado para que la carga se sienta prácticamente inmediata.

Arquitectura escalable

Diseño sistemas modulares y limpios sobre Next.js y CMS headless como Payload: código propio, auditable y mantenible, sin builders ni plugins de terceros, que le permite al proyecto crecer sin acumular deuda técnica.

Ingeniería de UX

Construyo interfaces adaptables y accesibles (A11Y), con un enfoque mobile-first real: no solo visual, funcional también.

Empecemos por una auditoría técnica

Reviso rastreo, indexación, renderizado, Core Web Vitals y datos estructurados sobre tu código, no sobre lo que dice un reporte automático. Te entrego los problemas ordenados por impacto y, al lado de cada uno, la corrección concreta que hay que hacer.

  • Rastreo e indexación: qué ve Google de tu sitio y qué se está perdiendo
  • Renderizado: qué contenido depende de JavaScript y qué llega ya en el HTML
  • Core Web Vitals medidos en campo, no solo en laboratorio
  • Datos estructurados, validados contra lo que realmente emite el sitio
  • Cada problema con su corrección concreta, ordenado por impacto

600 USD

Auditoría SEO técnica completa

Entrega en 10 días hábiles

Si después me contratas la implementación, esos 600 se descuentan del trabajo. La auditoría no es un producto aparte, es por donde empiezo.

Contacto

Hablemos

¿Tienes un proyecto en mente? Cuéntame de qué se trata.

Charlemos sobre tu próximo proyecto

Disponible para consultoría en ingeniería de software y SEO técnico.

Suelo responder en menos de 48 horas.