Two websites, one application, and finally visible to search engines.

The product site of an AI consultancy had zero indexed pages: its pages were built only in the browser and crawlers saw them empty. We moved it, together with the corporate site, into a single application that renders complete HTML on the server.

Sector
Business services
Practice
Software engineering
Year
2026
How it works
Visitors
Crawlers and AI agentsno JavaScript
Peoplebrowser
Domains
Corporate sitewith press review
Product sitewith demo form
One application
Site chosen by the request host
Server-side HTMLBlock pagesPer-page SEORoles2FAOne database
Output
Complete pagestext in HTML
JSON-LD and sitemapper site
Enquiriespanel and email
In brief

Two websites, one corporate and one for a product, were single pages built in JavaScript in the browser, alongside a WordPress install for the press review and forms. We replaced them with a single Laravel 13 and Filament 5 application that picks the site from the requested host, renders every page on the server with meta tags and JSON-LD, and has one panel for pages, articles, SEO and enquiries. We removed WordPress and handed over a server the client can run without us.

0
indexed pages on the product site before the project
2
sites served from the same code and database
148
automated tests passing before go-live
15.10.2026
both sites went live together

Context

The client is an artificial intelligence consultancy with a product for legal, compliance and procurement teams. Both sites had been exported from a design tool as single pages: good looking, but with all the text built by JavaScript on load. The press review and forms ran on a separate WordPress install, reached through proxies on the web server.

The problem

A crawler that doesn't run JavaScript finds an empty page: Search Console reported zero indexed pages for the product site. On top of that, form notifications from the old WordPress weren't being sent: a real sales enquiry received on 10 October had been sitting unseen.

What we did

  1. 01

    One application, two sites

    Laravel 13 and Filament 5 serve both domains from the same code and database, picking the site from the request host. An unknown host gets a 404, preview hosts send noindex.

  2. 02

    Complete server-side HTML

    Every page is rendered on the server with title, meta tags, JSON-LD and a sitemap per site. The two single pages became several pages, with redirects from the old addresses. The JSON-LD graph identifiers stayed exactly the same, because an external graph references them: one different character would have broken the link.

  3. 03

    Goodbye WordPress

    The 32 press review articles and the form history were imported into the new database. Articles that reproduced third-party texts in full became an original summary with a link to the source. Forms send notifications and receipts through Amazon SES, and the stuck enquiry was recovered and passed to the client.

  4. 04

    One panel for the editors

    Block-based pages, articles, SEO, form enquiries and users in a single panel, with Admin, Editor and Sales roles and two-factor authentication. Cookie consent goes through CF-Consent with Consent Mode v2.

  5. 05

    A server that can be handed over

    No third-party management panel: the EC2 server lives in the client's AWS account, is built by a script in the repository, deploys with GitHub Actions and Deployer, and has disk snapshots plus a nightly database dump. The old server stayed on for 14 days after go-live as a rollback path.

How it went

On 15 October 2026 both domains moved to the new server together, by changing two DNS records, with the old server ready for rollback. The sitemaps were submitted to Search Console and the main pages sent for indexing; the editors work from the panel, and form enquiries reach the people who need to read them.

Tools

Laravel 13Filament 5MySQL 8BladeJSON-LDAmazon SESGitHub ActionsDeployerAWS EC2

FAQ

Why isn't a JavaScript-built site indexed?

Many crawlers, and almost all AI agents, read the HTML the server sends without running scripts. If the text only appears afterwards, the page is empty to them.

Is it worth serving two sites from one application?

When they share editors, content types and infrastructure, yes: one panel, one database and one server to maintain instead of two. Each site stays separate in domain, SEO and design.

What does a server you can hand over mean?

That the client can take control without depending on us: it lives in their account, can be rebuilt from a documented script and needs no subscriptions to third-party tools.

Contact

Facing something similar?

Tell us what you run today and what isn't working. We'll reply within one business day with a first technical read.

Email
hello@cloudfactory.it
Address
Viale di Trastevere 114, 00153 Rome, Italy