Technical SEO cleanup for two Laravel travel websites

After a difficult migration history, two travel websites had canonical, sitemap, redirect and indexation problems. We cleaned up the technical foundation as part of ongoing maintenance.

10 classes of technical SEO issues fixed
2 websites brought to one consistent URL scheme

The same two travel websites we maintain long-term carried SEO baggage from earlier migrations: search engines were seeing duplicate, staging and non-canonical URLs alongside the real pages.

The challenge

None of the individual issues was dramatic; together they blurred the sites’ picture in search engines:

  • Google indexed several versions of the same page — with and without www, with and without a trailing slash, and even on the staging subdomain.
  • The two sites shared one codebase, and the sitemaps mixed one site’s URLs into the other’s.
  • Pages carried duplicate meta description tags, and many articles had no H1 heading at all.
  • Search results showed the bare domain instead of the site name, with the wrong icon — small things that quietly cost clicks.
  • Structured data was missing, internal links pointed at non-canonical URLs, and the .htaccess carried years of legacy rules nobody could explain.

What we did

As part of the maintenance engagement we ran a full technical SEO audit, then worked through the findings systematically:

  • Added and corrected canonical tags, aligned www / non-www and trailing-slash behaviour, and took the staging site out of the index.
  • Rebuilt robots.txt and the XML sitemaps so each site declares exactly its own URLs, with noindex handling for search pages.
  • Removed the duplicated meta descriptions, added the missing structured data, and fixed how the sites appear in Google — proper site name and icon instead of a bare domain.
  • Fixed missing H1s, cleaned internal links to point at canonical URLs, repaired redirect behaviour including index.php, and cleared the legacy .htaccess rules.
  • Supported cleanup and re-indexing actions in Google Search Console.

The outcome

Search engines now crawl one consistent set of production URLs per site, duplicate and staging URLs dropped out of the picture, and the sites have a clean technical base for any future content work.

Technical hygiene like this is part of what “someone owns the platform” means in our Laravel maintenance engagements — not a separate project.

More case studies

Laravel maintenance for two established travel websites

Maintenance & Support Laravel maintenance for two established travel websites

How we took ongoing technical ownership of two live Laravel travel websites — cutting a key search page from about 17 seconds to about 1 second along the way.

Stabilising an inherited Laravel platform nobody dared to restart

Maintenance & Support Stabilising an inherited Laravel platform nobody dared to restart

A half-finished Typo3-to-Laravel migration, a 15 GB repository and a production server nobody dared to reboot. Audit first — then backups, security fixes, Docker and ~500 tests.

MySQL upgrade that cut about $10k a year in AWS costs

Modernisation & Upgrades MySQL upgrade that cut about $10k a year in AWS costs

An outdated MySQL 5.7 database was quietly adding about $900 a month in AWS Extended Support fees. We planned and ran a safe upgrade to 8.0 around a live legacy application.

SAP–Shopify sync rebuilt from legacy PHP to Symfony

Modernisation & Upgrades SAP–Shopify sync rebuilt from legacy PHP to Symfony

Six storefronts depended on a fragile black-box sync with SAP. We took it over and replaced it step by step with a Symfony middleware — without stopping the business.

Culinary events platform: years of maintenance and a UK launch

Maintenance & Support Culinary events platform: years of maintenance and a UK launch

We keep a Dutch culinary events platform stable through high-traffic ticket sales — and refactored its legacy Symfony core so the same system could launch in the UK.

300,000-SKU product catalogue: instant search and stable syncs

Maintenance & Support 300,000-SKU product catalogue: instant search and stable syncs

A custom PHP product information system struggled under 300k+ SKUs: slow searches and fragile Shopify and Shopware syncs. We modernised it in place — no rewrite.

REST API on a legacy Symfony app for a headless React frontend

Modernisation & Upgrades REST API on a legacy Symfony app for a headless React frontend

Instead of rewriting a Symfony 3.4 events platform, we exposed its existing business logic through 20+ REST endpoints — unblocking a full React migration at a fraction of rewrite cost.

From no-code prototype to a production SaaS platform

Product Development From no-code prototype to a production SaaS platform

A validated MVP built on Make, Bubble and Replit had hit its ceiling. We re-platformed it into a multi-tenant Symfony + React SaaS with a grounded AI content engine.

An AI legal-training MVP, live in about two weeks

Product Development An AI legal-training MVP, live in about two weeks

Law students practise argumentation against AI judge personas grounded in real legal documents. We designed and shipped the production-ready MVP in roughly two weeks.

Keeping a Symfony 1 / PHP 5.4 website safely in business

Maintenance & Support Keeping a Symfony 1 / PHP 5.4 website safely in business

A property website on Symfony 1 and PHP 5.4 still earned its keep. We maintain it carefully — SEO updates, feeds, cache issues — and brought production changes back under Git control.

The outage that wasn’t the application: a Route 53 DNS story

Rescue & Incident Response The outage that wasn’t the application: a Route 53 DNS story

Internal business systems stopped resolving even though the servers were healthy. We traced the outage layer by layer to incomplete Route 53 delegation and restored access.

A real-time crypto signals SaaS on Symfony and ClickHouse

Product Development A real-time crypto signals SaaS on Symfony and ClickHouse

Tick-by-tick market data from major exchanges, analysed and delivered as trading signals in under half a second — through a web dashboard and a Telegram bot.

Monetising AI chatbots in WordPress — with no user accounts

Product Development Monetising AI chatbots in WordPress — with no user accounts

Five AI personas, a freemium paywall and Nordic Swish payments — built as a custom WordPress plugin that charges users without ever asking them to register.

industry

Travel & hospitality

tech stack

Laravel, Nginx, Google Search Console

service

Maintenance & Support

system risk check

Want results like these for your application?

Start with a System Risk Check — a fixed-price technical audit of your application with a written, prioritised report. The report is yours, whatever you decide next.