โ† Back to Blog๐Ÿ‡ฎ๐Ÿ‡น Leggi in Italiano

Programmatic SEO for a Craftsman: a Roman Carpenter's Website

A technical case study on a Next.js showcase site for an artisan carpenter: why market research came before code, SEO pages generated from data instead of written by hand, and where to start for the first backlinks.

Not every project needs a database or a form that saves leads to a CRM. Sometimes the interesting technical problem isn't the infrastructure, it's getting found. Joele Saporito's showcase site, an artisan carpenter in Rome, is exactly that case: static, fast, built around one precise question, not "how do we build the site" but "who will search for it, and how."

Research before code

As with the Ristrutturazioni Preventivi case study, this project also started with keyword mapping for the sector, not a generic prompt. The goal was figuring out what was worth competing on. Established competitors in the sector, some active for over forty years, dominate generic searches: "carpenter Rome" is ground where accumulated authority outweighs any new site, however well built. The choice was to not compete there, but on more specific searches: precise types of work, specific geographic zones, and a separate channel for people searching for a craftsman not for their own home but on behalf of a company, an architecture firm, a general contractor.

That distinction, generalist versus specialist, is what shaped the page structure before a single line of code.

SEO pages generated from data, not written one by one

With dozens of possible combinations of service type and geographic zone, writing each page by hand doesn't scale, and it isn't the right choice either: every page would risk being an almost identical copy of the last, exactly the kind of content search engines penalize. The solution was treating services and zones as data, not pages: TypeScript arrays describing each combination, and Next.js dynamic routes generating the page from that data.

Every generated page carries structured Schema.org data specific to its content: a service page carries a Service markup with a related FAQPage, a zone page carries markup combining Carpenter and City. This isn't a decorative detail: it's built explicitly to be read by generative search too, not just classic Google indexing, the same GEO principle behind the other projects we've written about on this blog.

A centering bug, and the difference between a fix and the right fix

While building the photo gallery of completed work, photos opened in a modal (the lightbox) weren't centering correctly on screen when opened from photos near the top or bottom of the page. The cause isn't obvious at first glance: some page components use the CSS transform property for hover-tilt effects, and transform has a lesser-known side effect, it anchors a position: fixed descendant to itself instead of to the browser viewport. The modal, technically "fixed," ended up fixed to the wrong reference point.

The correct fix wasn't a CSS coordinate adjustment, which would have worked only for that one case and broken on the next layout change. It was moving the modal's rendering into a React Portal, directly onto document.body, with the page scroll locked while it's open. The modal stops depending on its parent's position in the DOM, and the bug can't resurface somewhere else on the page.

A new site in a sector with long-established competitors starts with no authority in search engines' eyes, and that authority is partly built with inbound links from other sites relevant to the sector. The research pointed to Houzz, a platform specific to construction and home renovation, as the first step: a profile with photos of completed work generates both a showcase visible to the right audience and a link back to the site, plus a direct contact channel.

Not every suggested channel was activated. The owner explicitly chose not to open a Google Business profile, despite it being the highest-priority recommendation in the local backlink plan: a legitimate choice about one's own online presence, one the technical plan can only suggest, not impose.

The site has been live for a short time, and traffic numbers are still those of a young domain: we don't have contact figures to cite here, only a structure built to grow as indexing matures. If you want to see how we approached research and SEO structure on another project with the same method, the Ristrutturazioni Preventivi article covers the GDPR compliance and analytics side that wasn't relevant here, since this is a site with no structured data collection.