The problem
Dubai has thousands of salons and no fair way to find one. Discovery runs through booking platforms, which only show the businesses paying to be on them, and through Google Maps, which ranks on how well a listing is optimised rather than on how well it fits what you asked for. A few thousand independent salons have no route to being found on merit. Building the alternative meant starting with no authority, no traffic and no reputation, and solving a marketplace from both directions at once.
What I built
- Scraped 10,566 salons across the UAE from Google Maps, salon websites and other marketplaces, collected the images, then verified every record. 3,000+ of those were Dubai, and 2,777 are published today after a second restructure and re-verification once businesses closed.
- Ran roughly 6 weeks of design and UX iterations with a designer and 3 developers, against one goal: a premium, modern directory where a visitor picks the right salon in the fewest possible steps.
- Built the catalogue as 2,700+ programmatic pages across 207 locations, 205 services and 38 venue types, with a 5-way filter and a points system that ranks salons on verified information, service quality and ratings.
- Rebuilt the technical layer in place from August 2025 after the deindexing: URL structure, crawlability and templates. No CMS migration, and no page redesigned.
- Built an agentic content engine rather than another n8n workflow, chaining research, planning, writing, scheduling and publishing, and deliberately throttled it to a few posts a day. First post shipped 26 April 2026.
The result
From near zero to 3,900 monthly sessions and 200,000 monthly impressions, growing 40% month over month, with Authority Score at 20. Around 13% of that traffic now arrives from AI assistants rather than from search. The interface never changed through any of it. All of the growth came from the layer beneath it.
Why finding a salon in Dubai was broken
Dubai has thousands of salons and no fair way to find one. Discovery runs through 2 channels, and neither of them ranks on whether a salon actually suits you.
The first is booking platforms. Fresha is the big one here, and the booking product itself is good. But a booking marketplace can only show you the businesses that are on it, and its own Dubai page lists 1,156 venues against the 2,777 salons in this catalogue. It also charges a fee on every new client it introduces, around 20%, which is a real cost for a small salon and a reason plenty of them stay off it.
The second is Google Maps, which ranks on how well a listing is optimised rather than on how well it matches what you asked for. A salon with a complete profile, a steady flow of reviews and someone doing local SEO wins. A better salon with none of that does not exist as far as the map is concerned.
So a few thousand independent salons have no route to being found on merit. That is the gap I wanted to fill: one place that covers all of them, ranks on verified information rather than on ad spend or optimisation, and pulls its signals from the salons' own websites and other directories rather than from whoever pays.
Starting that is harder than it sounds, for 2 reasons. A new platform has no domain authority, no traffic, no reputation and no reason for anyone to believe it. And a marketplace only works in both directions at once: salon owners will not maintain a listing nobody visits, and visitors will not use a catalogue that is thin or out of date. Both sides have to be solved by the same moves, which makes it a B2B2C problem rather than a directory one.
Why I built it on WordPress
The first real decision was the platform, and I made it for speed rather than for elegance. I had already worked with freelancers and contractors who knew WordPress, I knew it myself, and the people I trust who publish content at scale had good things to say about running it there. Picking anything else would have meant hiring differently and learning the platform at the same time as building the product.
WordPress has drawbacks and I hit most of them. I still think it was the right call, and the proof is that I never migrated: when the site broke badly 8 months later, holding the platform is what made the repair survivable rather than a restart.
I directed a contract team of 4 on the build. A designer, a full-stack developer, and 2 developers covering front end and back end. Working that way forces a discipline that turned out to matter: nothing gets built until it is specified well enough to hand to someone else.
The data was the real product
A directory has a harder version of the cold-start problem than most sites, because it cannot publish anything at all until it has data, and for the UAE that data does not exist in one place. Before a single page existed I needed a verified record of every salon in the country.
I scraped 10,566 salons across the UAE, pulling from Google Maps, the salons' own websites and other marketplaces, and collected the images alongside the records. Just over 3,000 of those were Dubai. Then the slow part started.
Collecting is the easy half. Validation is what decides whether the site is worth anything: is this website still live, is this contact real, is this the same business appearing twice under two spellings, is this place still trading at all. I think a directory is only as good as its worst record, because a visitor who clicks through to a salon that shut down last year stops trusting the rest of them.
So the dataset has been through 2 passes, not one. The first took about 2 months and produced the catalogue that launched. Later, once enough businesses had closed, I restructured the data and re-verified the whole thing. 2,777 salons are live today, with 377 held back and flagged as closed rather than published. Those were not missing inventory. Every one of them failed validation, and publishing them would have meant hundreds of pages about places nobody can visit.
- 10,566 records scraped UAE-wide from Google Maps, salon websites and other marketplaces, not a single feed or a bought list
- Images collected alongside the records, so listings did not launch as text
- Every record checked for a live website, a valid contact, and whether it already existed under another spelling
- Re-verified end to end a second time after closures, rather than letting the catalogue quietly rot
Designed around one decision
About 6 weeks of design and UX iteration went in before the catalogue was worth showing anyone. The brief I gave the designer was narrow on purpose: premium and modern enough that a Dubai audience takes it seriously, and simple enough that someone picks the right salon in the fewest possible steps.
Those two pull against each other, which is why it took 6 weeks rather than 1, and why the Figma file ended up with 686 comments on it. Premium usually means more space and more photography, and deciding fast usually means more density. The version that shipped is the one where a visitor can compare on the things they actually choose between: area, service, price and rating.
This is also the decision that paid off twice. The design was built to hold at several thousand pages rather than to look right on the 12 that existed at launch, so when the rebuild came it needed no redesign at all.
The design file
Three systems on top of the catalogue
A grid of pages is not a product. Three systems sit on top of it, and the third is the one I would point at first.
The programmatic layer. 2,700+ pages generated from structured data across 207 locations, 205 services and 38 venue types, so the catalogue covers the whole grid a person might search: this service, in that area, at this salon. I gated it instead of generating it blindly. A service-and-area combination with fewer than 3 real listings is set to noindex, because a page with one result on it is a thin page, and generating thousands of those is basically how programmatic SEO fails.
The filters. 5 ways to narrow the catalogue: salon type, area, service, price range and rating. They exist because they match how someone actually decides, rather than because they map neatly to the taxonomy underneath.
The points system, which is the part I am most pleased with. Every salon is ranked by a transparent points score built on verified information, service quality and ratings, and the site says so publicly. A more complete listing ranks higher in its category and its filters. That gives salon owners a reason to claim their listing and keep it current, which means the people best placed to maintain the data have an incentive to do it. Stale data is what makes a directory useless, and this keeps it current at no cost and with nobody chasing it.
Then it broke
The early signs were fine. Pages began to index and a first trickle of organic traffic arrived. Then a change to the URL structure broke the mapping between the catalogue and what search engines had already indexed. The listing pages fell out of the index and the traffic went with them.
The symptom was blunt. A lot of pages returned a 404 instead of the page that should have been there, so part of the catalogue had stopped existing as far as a visitor or a crawler could tell.
What kept it broken was the repair loop. Each change fixed one symptom and introduced another somewhere else, and every cycle took weeks to go live and longer to verify. A directory has thousands of near-identical templated pages, so a small template defect is never small: it repeats across the entire catalogue at once.
That ran for about 8 months, and it is the most demoralising kind of broken. Nothing looks wrong when you open it. The site loads, the listings are all there, every page is exactly what it should be, and none of it counts for anything.
Search Console only keeps 16 months, so the drop itself has already aged out of it. Semrush kept the longer history.
Rebuilt in place, same decision held
From August 2025 I rebuilt the technical layer without migrating the CMS and without redesigning a single page. That is the same call I made on day one, held under pressure: a migration would have reset whatever authority had survived, and the design had been built for this scale, so it held.
I could not find the cause of the 404s. I paid a contractor to read the code and find it, and they could not either. That is the honest state it was in: 2 people who knew the codebase, looking directly at it, and neither of us could say why a page that existed was returning a 404.
What worked was reading the whole templated surface at once with AI rather than going file by file, which is how the URL slugs and the routing that generated them turned out to be the problem. Once that was fixed I went back to Search Console, submitted the affected pages for validation, and waited. Google recrawled, the validation passed, and the pages came back.
AI did the parts that had made the old loop slow: reading the whole templated surface at once to find where it diverged, generating the repetitive fixes, and checking the result against what a crawler actually receives rather than what the page looks like in a browser. I ran a second round in November 2025.
- URL structure repaired so the catalogue mapped cleanly to what was already indexed
- Templates fixed to render their links server-side, so a crawler and a browser receive the same page
- Archive and hub pages returned to indexable, self-canonical, and linked into the catalogue
An agentic content engine, throttled on purpose
Fixing the technical layer made the catalogue visible again. It did not make it rank for anything a person searches before they pick a salon. A directory answers "which one", but almost every query that comes before that is informational, and a catalogue cannot answer those.
I had already built content automation in n8n and could have done it again. I went agentic instead, for a reason worth being precise about: the fragility. A single upstream API problem takes an n8n workflow down and the whole chain stops, and keeping it healthy is ongoing maintenance rather than a build. Friends of mine run n8n at real scale and it works for them. For a system I wanted to leave alone for weeks, I wanted something that could handle a step going wrong without me watching it.
The engine chains skills in sequence: research, planning, writing, scheduling, publishing, with a lot of steps in between. Every piece comes out in the same structured components, built for search rather than decorated for it afterwards.
The most important setting is the throttle. It publishes a few posts a day and no more. Everything about the tooling would let me publish hundreds, and that is exactly the behaviour Google has spent 2 years learning to catch. The other control that matters at this scale is cannibalization: adding hundreds of articles on top of 2,700 templated pages in one narrow vertical is the fastest way to make a site compete with itself, so every piece is checked against what already ranks before it is written rather than after it underperforms. First post shipped 26 April 2026.
Where it is now
Roughly 3 months after the first post, the site runs at 3,900 monthly sessions and 202,000 monthly search impressions, growing 40% month over month. Authority Score sits at 20, up from nothing.
The Search Console chart shows what happened better than any single number does. Impressions sat near zero through most of 2025, climbed slowly after the rebuild, then turned sharply upward in the weeks after the first post went out. Across the full range that is 965,000 impressions and 6,020 clicks.
The average position is 12.6 and the click-through rate is 0.6%. Both are what a site looks like just after it becomes visible: most of those impressions sit on page 2, where almost nobody clicks. Closing that gap is the current job, and the number is more use to you than a curve with the awkward part cropped out.
The same dashboard carries the numbers that are less comfortable. Tracked visibility is 1%, 1 keyword sits in the top 3, and referring domains are down 3% over the quarter. That is the same story as the position figure above rather than a different one: a directory 3 months into publishing, with most of its visibility still on page 2 and a link profile that is still thin. The keyword in position 1 is "how much does a pedicure cost", which is exactly the kind of question a catalogue could never answer on its own.
What the AI channel is doing
Around 13% of sessions now arrive from AI assistants rather than from a search results page. Semrush counts 98 mentions and 499 cited pages across the assistants, and 493 of those citations are ChatGPT. That channel did not meaningfully exist when this started, and it rewards exactly the kind of specific, structured content that answers the question a person actually typed.
The number I did not expect sits on the AI side. In the answers where the directory appears at all, Semrush counts fresha.com cited 42 times, salonsindubai.ae 34, and google.com 27. Being cited nearly as often as the platform this page opened by describing, in a channel where the citation is the visibility, is the part I would not have predicted at the start.
What I would do differently now
I would pick a different market. Salons in Dubai is a crowded one, and crowded on its own is survivable. The harder part is what the customers can spend: a lot of these businesses run on small marketing budgets, which caps what a directory can charge for placement no matter how well the directory works. And I am not interested in the salon industry. That third reason sounds like the softest of the three, and I think it is the one that costs the most, because a catalogue only pays off if you are still working on it in year 2. Starting again I would build it for gyms and fitness.
I might not build it on WordPress either, and that is not a criticism of the call at the time. WordPress put a catalogue live in weeks when the alternative was writing the whole thing from scratch, and under those constraints I would take that trade again. What changed is that the thing it was buying me, speed without building everything myself, is no longer scarce.
The developers are the clearest case of that. The fix came out of reading the whole surface at once with AI, and I have kept going that way since: the repairs, the improvements and the new features on this site are mine, with nobody else in the loop. Knowing what I know now I would build it end to end myself.
Design is the exception, and I would rather be straight about it than pretend otherwise. It is where I am weakest. AI gets me to something respectable and a good designer or UX person still beats it, and on a product whose whole promise is that you can decide fast, that gap is worth paying for.
Article sources
This is a first-hand account of work I did, so the primary source is the site itself. The Search Console figures are the ones in the screenshot above. Traffic and Authority Score come from its Google Analytics and Semrush properties, which are private.
- SalonsInDubai.ae: The live directory. The filters, the points system and the catalogue can all be checked against the site itself (salonsindubai.ae)
- How the ranking works: The supply side, where salon owners claim and complete a listing (salonsindubai.ae)
- Fresha, Dubai: Their own Dubai page, for the count of venues they list in Dubai. Checked 7 August 2026 (fresha.com)