Own project · Documented technical case
A Nuxt 4 portfoliowith measurable acquisition foundations
I used my own production site to move from Nuxt 3.7 to Nuxt 4 and build the search, measurement and contact foundations around it.
Documented scope
Facts before conclusions
The figures below come from dated repository, production and Search Console observations, with their limits stated alongside them.
- Framework upgrade
- 3.7 → 4
- Declared Nuxt version
- Languages retained
- 3
- English, Spanish and Catalan
- URLs already discovered
- 18
- Search Console before this case was published
- Priority Spanish pages indexed
- 4/4
- Four ES routes checked on 14 September 2026
The search data is an early observation, not proof that the implementation caused growth. Publishing this case expands the technical sitemap from 18 to 21 localised URLs; Search Console will continue to show the earlier 18 until Google processes the updated sitemap. This is a small portfolio project, not a claim of enterprise migration scale.
The starting point
A real system, with honest boundaries
This is not a client story or a borrowed testimonial. It is the product I own and operate, so its architecture, code, deployment and measurement can be examined together.
- Project type
- Own multilingual portfolio running in production
- My role
- Product owner and current evolution lead: scope, technical direction, implementation and verification. The repository retains earlier contributions
- Boundary
- Evidence of applied Nuxt work on a portfolio; not a fictional client project or an enterprise-scale claim
What changed
Four reviewable layers
The framework upgrade was one step. Search visibility, contact reliability and ongoing observation were treated as separate pieces of the system.
- 01
20 April 2026
Nuxt 4 and multilingual foundation
The project moved from Nuxt 3.7 to a Nuxt 4 codebase while its three-language structure was reorganised for the newer i18n module.
- Updated Nuxt, i18n, gtag, Tailwind, VueUse and Swiper together.
- Moved locale configuration into the current i18n structure and retained English, Spanish and Catalan routes.
- The visual redesign and dependency upgrade happened in the same change, so I do not claim an isolated performance uplift.
- 02
19 August 2026
Search and acquisition layer
The site gained a focused Nuxt 3 to 4 service page and a deliberate technical SEO contract for every locale.
- Added server-rendered migration pages with localised titles, descriptions and service/FAQ structured data.
- Validated canonical URLs, hreflang groups, robots rules, redirects and a curated sitemap that grew from 15 to 18 URLs.
- Added privacy-conscious CTA, form-start and contact-intent events plus real-user performance collection.
- 03
7 September 2026
A contact route that can be verified
The mailto-only journey was extended with a server endpoint and an explicit distinction between user intent, provider acceptance and a real lead.
- Added input validation, a honeypot, body-size and origin checks, idempotency and a basic per-instance limit; the platform firewall rule remains in observation mode.
- Connected Resend and recorded technical acceptance without sending personal data to Analytics.
- Kept provider acceptance separate from a received, qualified or won lead.
- 04
Weekly
Observation before optimisation
A read-only review compares search, traffic, contact signals and real-user performance before proposing the next change.
- Search Console is the source of truth for impressions, clicks and indexation.
- Vercel Analytics separates content engagement from contact intent; tests are not counted as clients.
- Core Web Vitals are interpreted only with their p75 sample size, not as a score without context.
Reusable approach
The migration checklist behind the work
A Nuxt upgrade is safer when compatibility and business-critical behaviour are made explicit before changing code.
- 01
Inventory the runtime
Record Nuxt, Node, modules, integrations, build settings and test coverage before choosing a migration sequence.
- 02
Protect routes and locales
Map public URLs, redirects and language variants so a structural upgrade does not create silent 404s or duplicate pages.
- 03
Compare rendered behaviour
Check server rendering, hydration, data fetching and client-only code on the journeys users actually rely on.
- 04
Treat SEO as an interface
Verify titles, rendered content, canonical links, hreflang, robots, structured data and sitemap output.
- 05
Exercise critical flows
Build successfully, then test navigation, forms, validation, analytics and deployment-specific configuration.
- 06
Observe after release
Watch errors, 5xx responses, indexation, real-user performance and commercial signals before declaring success.
Dated observation
Early search visibility, not a victory lap
The first comparable Search Console window after the acquisition work covers 5–11 September 2026 versus the previous seven days.
58 impressions and 2 clicks
The previous window recorded 8 impressions and 0 clicks. The increase is directional; the volume is still too small for a reliable trend.
Relevant Nuxt migration queries appeared
Search Console showed terms around Nuxt migration services and moving from Nuxt 3 to Nuxt 4, which supports continuing to test this offer.
The on-site contact journey is observable
CTA clicks, form starts, contact intent and provider acceptance are distinct events, so a technical test is not silently reported as a customer.
For another project
What transfers
The reusable result is the method: inventory, migrate, protect discoverability, verify the journey and observe the business signal.
For a company application, I would adapt the same sequence to its modules, integrations, release process, traffic risk and critical user journeys. Scope and proof would come from that system, not from this portfolio.
See how I approach a Nuxt 3 to Nuxt 4 migration →Do you have an older Nuxt application?
Start with a clear technical review
Tell me the Nuxt version, important modules and what cannot afford to break. I will suggest the clearest next step without inflating the scope.