Saltar al contenido
Landing pageCliente real2025

Gesso Grande Rocha

Sitio React con 5 rutas SEO, páginas por ciudad generadas dinámicamente y reseñas de Google en tiempo real

React 19Vite 7Tailwind CSS 3Framer Motion 12
gessogranderocha.com.br
Portada — Gesso Grande Rocha

01

Visión General

Desarrollo del sitio de Gesso Grande Rocha — empresa especializada en drywall, cielorrasos, molduras de yeso y armarios a medida en el litoral sur de São Paulo. El proyecto priorizó un SEO local granular: además de la página de inicio, hay páginas independientes para cada ciudad de actuación (/gesso-mongagua, /gesso-itanhaem, /gesso-praia-grande), cada una con contenido único, un FAQ de 6 preguntas específico para la ciudad y su propio Schema.org LocalBusiness. Las páginas de ciudad se generan a partir de un único componente CityPage.jsx alimentado por un archivo de datos cities.js, lo que permite escalar a nuevas ciudades sin duplicar código.

Mi rol

Full-stack en solitario — diseño, desarrollo en React, arquitectura de rutas por ciudad, SEO técnico, integración de reseñas de Google (Elfsight), formulario con EmailJS y deploy en Vercel.


Categoría

Landing page

Año

2025

Estado

Cliente real

02

El Problema

La empresa operaba sin presencia digital y perdía clientes frente a competidores que sí se encuentran en Google. El desafío técnico era crear páginas por ciudad con contenido único y SEO específico — sin usar un CMS ni backend, solo un sitio estático en React.

03 — La Solución

SPA React con React Router y arquitectura de datos centralizada: un componente CityPage reutilizable consume los datos de cities.js para generar páginas únicas por ciudad, cada una con metadata específica mediante react-helmet-async, FAQ en acordeón, listado de barrios atendidos, servicios detallados y Schema.org. Reseñas de Google integradas con el widget de Elfsight — actualizadas en tiempo real sin mantenimiento manual.


04

Funcionalidades Principales

01

Páginas por Ciudad con SEO Local

Rutas /gesso-mongagua, /gesso-itanhaem y /gesso-praia-grande con contenido único, URL canónica, FAQ de 6 preguntas específico por ciudad y lista de barrios atendidos — generadas dinámicamente por un único componente + un archivo de datos.

02

Reseñas de Google en Tiempo Real

Widget de Elfsight integrado que importa las valoraciones directamente desde el Google Maps de la empresa, actualizadas automáticamente — sin testimonios falsos y sin mantenimiento manual de contenido.

03

Schema.org LocalBusiness

JSON-LD completo con la dirección real (R. Monsenhor Seckler, 771, Mongaguá), geolocalización, teléfono, horario, redes sociales, areaServed y hasOfferCatalog con los 6 servicios — inyectado en todas las páginas mediante SEOHead.

04

Galería de Obras con Lightbox

Más de 7 obras reales en formato WebP que se abren en un lightbox (AnimatePresence + Framer Motion) — prueba social visual para nuevos clientes.

05

6 Servicios con Presentación Animada

Cuadrícula de servicios con stagger animation (Framer Motion whileInView): Drywall, Cielorrasos y Molduras, Armarios a Medida, Revestimientos Decorativos, Divisiones Corporativas y Remodelaciones.

06

Formulario con EmailJS

Formulario de contacto funcional sin backend — los mensajes se envían directamente con EmailJS, sin necesidad de servidor ni de una API propia.


05

Tecnologías

Front-end

React 19Vite 7Tailwind CSS 3Framer Motion 12

Despliegue

Vercel

Integraciones

EmailJSElfsight (Google Reviews)WhatsApp Business

Bibliotecas

React Router DOM 7react-helmet-asyncLucide React

06

Decisiones de Diseño

Paleta naranja/terracota (#C75B17, #E67E22) sobre fondo oscuro (#1C1C1C) en el hero, invirtiéndose a claro en las secciones de contenido — crea un contraste fuerte y una identidad distinta para un sector (la construcción) que suele usar azul y gris. Un slideshow automático de 3 fotos del equipo real en la sección Sobre nosotros refuerza la credibilidad de la empresa local.

07

Desafíos Técnicos

Generar páginas con SEO único por ciudad en una SPA React sin SSR: la solución fue react-helmet-async para inyectar metadata distinta por ruta y vercel.json con rewrites para que Googlebot encuentre cada URL como una página independiente. El componente CityPage lee el citySlug de la ruta, busca los datos en cities.js y renderiza contenido 100% único — incluido el FAQ, los barrios y los servicios detallados — sin duplicación de plantilla.


08

Resultados

  • Empresa encontrable en Google para búsquedas locales de drywall en 3 ciudades del litoral paulista
  • 3 páginas de ciudad con SEO independiente generadas a partir de un único componente React
  • Reseñas de Google importadas en tiempo real mediante Elfsight — ningún testimonio escrito a mano

09

Aprendizajes

  • Arquitectura de datos para SEO local: centralizar el contenido de varias páginas en un archivo cities.js permite escalar a nuevas ciudades sin duplicar código ni componentes
  • React Router en una SPA para SEO: configurar vercel.json con rewrites garantiza que todas las rutas (/, /gesso-mongagua, /galeria) respondan correctamente a Googlebot sin SSR
  • Elfsight como alternativa práctica a la Google Places API: un widget que importa reseñas de Google Maps sin necesitar clave de API ni procesamiento del lado del servidor
  • react-helmet-async para metadata por ruta en una SPA: inyectar title, description, canonical y JSON-LD distintos en cada página sin un framework SSR