Local SEO for a 29-year-old salon in Rajshahi: what actually moved the needle
A friend of the family runs a ladies' beauty parlour in Rajshahi, Bangladesh. It has been open since 1997, which means it survived every shift this country's retail sector went through and still fills its appointment book mostly by word of mouth.
It also had no idea where it appeared online. That gap is worth writing about, because the technical work involved almost nothing exotic and the hard part was not the code.
The setup
Google Business Profile existed and was verified. The website existed. Both listed the same address in two different spellings, and the phone number appeared in three formats across the handful of directories that had picked the business up.
If you have ever tried to fix this at scale, you know the pattern: the entity is fine, the data around it is not, and search engines are conservative about guessing which version is true.
What I actually changed
The first thing was a single source of truth. One address string, one phone format, one name, written down and used verbatim everywhere from that point on:
Name: Keya Beauty Salon Address: Dorikhorbona, Upposhor Link Road (Near Nogor Bhaban More), Rajshahi 6202, Bangladesh Phone: +8801711810832 That is boring and it matters more than any single backlink. Half of local SEO is refusing to let a business describe itself two different ways.
Second, schema. BeautySalon extending LocalBusiness, with geo pinned to the rooftop coordinates, openingHoursSpecification covering the daily 9 to 9 window, and areaServed naming the actual neighbourhoods rather than the whole city. Naming Upposhor and Shaheb Bazar and Kazihata does something that "Rajshahi" alone cannot: it tells the index which queries this entity is plausibly relevant to.
Third, the bilingual problem. The site serves English and Bengali, and the queries do not split cleanly by language. People search "beauty parlour in rajshahi" and "রাজশাহীর বিউটি পার্লার" in the same session on the same phone. Writing the Bengali copy as a translation of the English produced stilted text that nobody would type, so it had to be rewritten from scratch as its own copy.
That was the single most useful lesson: machine-mirrored bilingual copy never matches real query phrasing. Write each language as if it were the only one.
Where the local pack actually comes from
Proximity dominates. This is uncomfortable because you cannot optimise for it. A salon two hundred metres closer to the searcher wins the three-pack on distance alone, no matter how good your schema is.
What you can move is review volume and review recency, and category alignment. Getting the primary category right, and resisting the urge to bolt on five secondary categories for reach, is worth more than most citation building.
On citations and link building
The honest version: most free directories are nofollow, many are abandoned, and a fair number quietly set noindex on their free tier. I wasted real time on platforms that would publish a page and then refuse to let search engines see it. Checking the live robots meta on the published URL before investing further became a habit.
Quality over quantity is not a slogan here. Twenty live, indexable, actually-crawled referring domains beat two hundred entries nobody reads.
What I would tell someone starting this
Write the NAP down once and enforce it. Get the schema right and validate it. Fix the categories. Then spend your time on reviews, because that is the lever that actually responds to effort.
Everything else is a slow game measured in weeks. Search engines take their time deciding what a business is, and no amount of code accelerates that decision.
If you want to see what the finished result looks like on the entity side, the salon's site is at keyabeautysalon.com — the schema in the page source is the part worth reading.