Ital Cheese Food
One experience, in three languages, for a consultancy that works outside Italy
My role in this project was to design and develop the website. The dairy consultancy the site describes belongs to the client: I built the way it is explained and reached.
- Type
- Web experience, Multilingual · Lead
- My role
- Website design & development

The problem
Almost fifty years inside production don’t fit in a brochure.
People looking for this consultancy come from different countries and languages, often with a specific problem (a plant to start up, a production that won’t hold steady) and need to understand within seconds whether they’ve found the right person. A single-language site with a list of services doesn’t tell them that.
One experience, adapted to three markets instead of translated three times. Method and person first, then services: readers should recognize their own case before they find a form. And contact must stay within reach from any point, because people decide while they read, not at the end.
What I built
The three home pages (Italian, Spanish, English) with reciprocal hreflang and `x-default` on the Italian one: each language is canonical to itself, none points to another.
URLs translated language by language, declared in a single registry from which sitemap, canonical and alternate tags are derived.
The method in four elements (structure, technology, people, support) and the comparison between online and on-site consulting.
The plant journey: from analysis to start-up, with equipment as part of the project rather than a catalog.
The map of the countries where the consultancy has worked, drawn from geographic data instead of an image.
The request form with server-side delivery and an email fallback when the service doesn’t respond: no request gets lost silently.
Visit statistics behind explicit consent, with six events that measure contacts and no personal data.
The product






The decisions
Three languages, not three sites
Italian, Spanish and English live in the same structure: the content changes, not the framework. Each home page is canonical to itself and declares the other two as alternates, with Italian as the default language for visitors from countries that aren’t covered. The two in-depth pages exist only in Italian and don’t announce translations that aren’t there: declaring a language that doesn’t exist is a mistake Google remembers.
Routes as the single source
Status, indexability and URL for each language are declared in one registry. Sitemap, canonical and hreflang read from there: a new page enters the site map because it’s declared, not because someone remembered to add it. It’s also why drafts stay out of the sitemap while they’re drafts.
- Five indexable URLs, all 200 and canonical
- Legal pages kept out of the sitemap until the texts are final
- No language canonicalized to another
Method before services
The central section doesn’t list services: it shows four elements (structure, technology, people, support) and the journey that runs through them, from plant analysis to start-up with the staff. Producers recognize their own sticking point in there, and reach the list of services already knowing what to ask for.
Measuring without slowing down
Statistics start only after explicit consent, and the tag loads last, when the content is already on screen. This isn’t abstract caution: loaded earlier, on a slow network it competes for bandwidth with the opening photo (measured: more than two extra seconds of LCP). The events measure contacts (WhatsApp, phone, email, form submission, language switch) and carry nothing a person types.
How it’s made
Next.js with the language segment in the route and the copy in typed files, one per language: one structure, three sets of content, no duplicate pages to keep in sync. Routes live in a registry that declares status, indexability and slug per language: sitemap, canonical and hreflang are derived from it, so a new page can’t be created outside the site map. Static pages on a distributed network; the form is the only thing that runs on the server.
- Stack
- Next.js, React, TypeScript, Tailwind CSS, Vercel, Multilingual IT/ES/EN, Technical SEO, GA4 with consent
- My role
- Product thinking, UX/UI, Frontend, Multilingual content structure, Technical SEO, Analytics and consent, Deployment
The result
- Five indexable URLs, all self-canonical, with reciprocal hreflang across the three languages.
- A sitemap generated from the route registry and accepted by Search Console, with no test pages or drafts.
- Contact events verified on the requests actually sent, not just in the browser queue: none of them contain personal data.
- The measurement tag loads last, after the content: loading it earlier cost, measured on a slow network, more than two seconds of LCP on the opening photo.
The site launched with more markets planned than the ones published: pages by service and by geographic area are already provided for in the route registry and will open when the copy truly exists in each language. Real searches will set the direction, not assumptions.
Ital Cheese Food is live: open itWhat I built here: Websites
Need something similar?
Tell me about it: I’ll start from where you are now.
