You are not being out-barbered. You are being out-published
Union Barbershop has already done the expensive part. What is missing is the part that gets built.
[ Data verified ] Booksy directory, profile JSON-LD and API; Google local results; Google Lighthouse 12.8.2 run locally; Search Atlas keyword data — all pulled 29 August 2026.
Alejandro Velázquez holds a 4.99 rating across 193 reviews — 192 of them five stars, one four star, none below. On Booksy’s own ranked list of twenty Windsor barbers he sits at number two, and only two barbers in the whole town have earned more reviews. Independently, publicly, and repeatedly, the craft is confirmed.
But those 193 reviews sit on Booksy, under a personal name. On Google — where “barber near me” is actually decided — Union Barbershop has 34 reviews, against competitors holding 316, 268 and 111. Union carries the highest rating in the Windsor local pack and its second-lowest review count, and ranks 5th of 6. That is a collection problem, not a quality problem.
The website compounds it. It serves four words of text to a search crawler before JavaScript runs, carries no structured data of any kind, has no analytics installed, and takes 22 seconds to show its main content on a phone. All three competing shops serve between 535 and 1,568 readable words.
The headline opportunity. Three moves drive most of the upside: (1) move the review engine to Google, where 34 reviews are carrying a business that has earned 193 elsewhere, and where the “near me” volume is decided; (2) make the site readable — schema, served text, published prices — so search and AI engines can see a business instead of a title tag; (3) fix the 22-second mobile page, because the booking system is good and most people never reach it.
The seven questions, answered
- Is the work good enough to win? Yes, and it is already proven — #2 of 20, 4.99, 192 perfect reviews.
- Is there demand? Yes — about 973 searches a month for a barber in Windsor, a town of 28,000, plus an enormous “near me” lane.
- Is the market hard? No. Difficulty 12–16 on the money terms. It is unattended, not contested.
- Why are competitors ahead? They are five-chair shops pooling five barbers’ reputations onto one brand, they publish readable pages, and they have 8–9× the Google reviews.
- What is the single biggest technical failure? A 22-second mobile render on a business customers find on phones.
- Can AI engines recommend this business? Not today. There is almost nothing for them to retrieve.
- How long to fix the foundation? The first five moves are about a day and a half. The full build is 90 days.
A one-chair shop with a category-leading rating
Union Barbershop operates from 170 Windsor River Rd, Suite North, walking distance from the Windsor Town Green. Alejandro Velázquez is the owner and the only barber. Booking runs through two systems — Square on the website and a separate Booksy profile.
| Service | Price | Duration | Listed as |
|---|---|---|---|
| Adult Haircut | $40.00 | 45 min | Any desired haircut style w/ razor finish |
| Haircut & Beard Work | $50.00 | 1 hour | Any desired style w/ beard work & razor finish |
| Kids Haircut | $40.00 | 45 min | 10 & under, any desired style w/ razor finish |
[ Data verified ] Booksy service list, verbatim, 29 August 2026.
The profile also carries Booksy’s “Recommended”, “Promoted” and “Entrepreneur” badges, over forty photographs, a packages option, a loyalty programme, and amenities including parking, disability access, child-friendly, pets allowed and Wi-Fi.
Note those durations. Forty-five minutes for a haircut and a full hour with beard work are unusually generous, and they are not an accident of scheduling — they are the product. A five-chair shop cannot easily match them. This is the positioning the business already has and does not yet claim.
Number two in Windsor, against shops with five chairs each
There are four barbershops in Windsor. Three of them are multi-chair operations; Union is one chair.
| Address | Shop | Booksy reviews | Booksy listing type |
|---|---|---|---|
| 170 Windsor River Rd | Union Barbershop | 193 | standalone — 3 priced services |
| 8794 Lakewood Dr | 1st Class Barbershop | 969 | venue shell — 0 services |
| 9074 Brooks Rd S | Suave Barbershop | 880 | venue shell — 0 services |
| 9025 Old Redwood Hwy D | The Gentlemen’s Barbershop | 750 | venue shell — 0 services |
Those three big review counts belong to venue shells. Booksy’s own API marks 1st Class, Suave and The Gentlemen’s as rented venues, each publishing zero services and zero prices — umbrella listings for roughly thirty individual barbers renting chairs. Union’s profile is a real standalone business with three priced services. Comparing 193 against 969 is comparing one barber to a five-chair building.
Compared barber against barber, the picture is strong:
| Booksy rank | Barber | Rating | Reviews | Shop |
|---|---|---|---|---|
| 1 | Santana The Barber | 4.979 | 192 | 1st Class |
| 2 | Alejandro Velázquez | 4.995 | 193 | Union |
| 3 | MartinezTheBarber | 4.966 | 116 | Suave |
| 5 | DreTheBarber | 4.977 | 173 | Suave |
| 12 | Adrian G | 4.994 | 363 | Gentlemen’s |
| 13 | Cuco The Barber | 4.990 | 381 | 1st Class |
[ Data verified ] Booksy Windsor barbershop directory, ranked listing, 29 August 2026. Only two barbers in Windsor carry more individual reviews.
What competitors have already built
| Site | Platform | Structured data | Words a crawler reads | Prices readable |
|---|---|---|---|---|
| unionbarbershopwindsor.com | Square Online | none | 4 | no |
| thefirstclassbarber.com | Shopify | Organization, WebSite | 1,568 | no |
| thegentlemensbarbershopwindsor.com | Shopify | Organization, WebSite | 546 | no |
| suavebarbershopwindsor.com | Squarespace | LocalBusiness (empty), WebSite | 535 | no |
[ Data verified ] Each homepage fetched directly and parsed for JSON-LD, 29 August 2026.
Read this one carefully — it cuts both ways. Union is the only shop of the four with no structured data at all and a served page of four words, so the readability gap is Union’s alone to close. But no competitor publishes a service price either, and none has a populated LocalBusiness entity — Suave’s block is empty, with no address and no hours, and the $40 and $43 on the Gentlemen’s site are a gift card, a hat and a t-shirt, not haircuts. The lanes that actually win local and AI search are still unclaimed by anyone in Windsor.
Review velocity
Between two measurements a day apart, 1st Class’s venue profile moved from 967 to 969 reviews and The Gentlemen’s from 748 to 750. Union stayed at 193. That is a single 24-hour sample and a direction, not a rate needs re-sampling weekly before any rate is claimed — but it points at a collection process that exists on one side and not the other.
An unattended market, already generating demand
| Keyword | Monthly volume | Difficulty | CPC |
|---|---|---|---|
| barber shop near me | 2,665,833 | 42 Hard | $1.44 |
| barber santa rosa ca | 1,725 | 12 Medium | $0.79 |
| barber windsor ca | 973 | 12 Medium | $1.17 |
| barber shop windsor ca | 973 | 16 Medium | $1.36 |
| barber shop in windsor ca | 880 | — | $1.36 |
| hair salon in windsor ca | 170 | — | $0.88 |
| haircut windsor ca | 30 | 3 Easy | $1.00 |
| first class barbershop windsor ca | 10 | competitor brand | $0 |
| union barbershop windsor | 0 | own brand | $0 |
| beard trim windsor ca | 0 | 4 Easy | $0 |
| kids haircut windsor ca | 0 | 3 Easy | $0 |
[ Data verified ] Search Atlas, United States, pulled 28–29 August 2026. “barber windsor ca” re-pulled live on 29 August and unchanged.
About 973 searches a month for a barber in Windsor, a town of roughly 28,000 people, against a website containing four readable words. Difficulty on the money terms sits at 12–16 — this is not a hard market to enter, it is an unattended one.
A competitor’s brand name is searched 10 times a month. Union Barbershop’s own brand name is searched zero times. Section 08 explains exactly why, and it is not a mystery.
An honest word about service pages. The service-plus-town phrases — “beard trim windsor ca”, “kids haircut windsor ca”, “fade haircut windsor ca” — all show zero recorded search volume. They are easy to rank for and worth building for AI retrieval and entity completeness, but they are not a traffic engine and should not be sold as one. The revenue sits in the ~973/month Windsor head terms and in the “near me” lane — and the “near me” lane is won by a Google Business Profile, not by pages. That is why the profile is first on the checklist.
What customers praise is not what the website is selling
[ Data verified ] Booksy rating distribution for Alejandro Velázquez, 29 August 2026.
The recurring themes, in customers’ own words
What they actually say
- “everything is clean, precise, and never rushed”
- “he actually listens to what you want”
- “clean sharp cuts, attention to detail”
- “the vibe is solid… comfortable right away”
- “my son loves his haircut!”
- “10/10 best barber around”
What the website leads with
- fades
- tapers
- beard work
- hot towels
Technique nouns. Almost no review names a technique.
The gap. The site sells techniques. Customers buy being listened to, work that is never rushed, and a room that is comfortable to sit in. “Never rushed”, “he listens”, and those 45-minute and 60-minute appointment slots are the same promise stated three ways — and none of it appears on the website. A one-chair shop cannot beat a five-chair shop on throughput, but “never rushed” is a feature of one chair, not a limitation. That is the positioning, and it is sitting unused in the reviews.
Two further observations. No review contains the word “Windsor” or “Union Barbershop.” Reviews are the strongest corroborating evidence an answer engine can find, and none of them tie the praise to the brand or the town. And the kids lane is real and unclaimed — a published service with review evidence behind it, against a search term rated Easy.
The review engine
The rating gap against every competitor is zero. Union sits at 4.995 against 4.987 and 4.994. The gap is collection volume, and the fix is process, not persuasion: ask every satisfied client at the chair, at the moment of payment, with a QR code or a text link that opens the review form directly. Booksy prompts after a confirmed appointment. Google does not prompt at all, which is precisely why the Google side is empty.
What we will not do. No scripted reviews, no incentives, no suggested wording. Both Google and Booksy prohibit it, and it would put 193 genuine five-star reviews at risk to gain a handful. What is legitimate and effective is prompting for specificity rather than sentiment — inviting a client to mention what they came in for. A review that happens to say “skin fade” or “my son’s first haircut” carries service and geographic signal that a star rating alone does not. The instruction is “tell them what you got done, in your own words” — never “please say this.”
It looks good. That is exactly the trap
The problem with this website is invisible to the eye and close to total for a machine.
| Homepage | Served HTML — what a crawler gets | After JavaScript runs |
|---|---|---|
| Visible words | 4 | 143 |
| Headings (h1 / h2 / h3) | 0 / 0 / 0 | 1 / 2 / 3 |
| Images | 0 | 19 (1 missing alt text) |
| Links | 0 | 15 |
| Structured data blocks | 0 | 0 |
The homepage is 51,124 bytes, of which 41,953 bytes — 82% — sits inside script tags. The four static words are the page title. Google renders JavaScript and will mostly cope. Answer engines largely do not.
Performance — measured, not estimated
| Metric | Mobile | Desktop |
|---|---|---|
| Performance score | 17 / 100 | 41 / 100 |
| First Contentful Paint | 2.3 s | 1.2 s |
| Largest Contentful Paint | 22.0 s | 4.7 s |
| Total Blocking Time | 1,700 ms | 240 ms |
| Cumulative Layout Shift | 0.492 | 0.34 |
| Time to Interactive | 25.2 s | 4.7 s |
| Total page weight | 4,290 KiB | |
[ Data verified ] Google Lighthouse 12.8.2, run locally against the homepage, 29 August 2026.
This is the most severe finding in the assessment. Barber discovery is overwhelmingly mobile. A Largest Contentful Paint of 22 seconds means a customer on a phone sees effectively nothing during the entire window in which they decide whether to stay. A layout shift score of 0.492 — where anything above 0.25 is rated poor — means the page moves under their thumb as they reach for the booking button. The booking system itself is good. Most people never reach it.
The server is not the problem: it responds in 50 ms. The weight is: unused JavaScript 991 KiB, images not responsively sized 773 KiB, images not in modern formats 408 KiB, and third-party code blocking the main thread for 1,790 ms. Roughly 1.2 MB of the 4.3 MB is recoverable from images alone.
Every page on the site
| URL | Title | Meta description | Schema |
|---|---|---|---|
| / | Home | Union Barbershop | present, and good | none |
| /portfolio | Gallery | Union Barbershop | absent | none |
| /s/appointments | empty — no title at all | absent | none |
Three pages. That is the whole site. The booking page — the single URL that takes money — has no title tag. It is also missing from the sitemap, which lists only two URLs.
One more, small and telling: the homepage’s social-share title is set to “new Home | Union Barbershop” — a stray editing word left in the og:title tag. That is the text that appears whenever the page is shared to Facebook, iMessage or WhatsApp.
Mobile usability and accessibility
- Pinch-zoom is disabled — the viewport sets user-scalable="no". A real problem for any customer reading a price list.
- Insufficient colour contrast; an iframe with no title; headings out of sequential order.
- Deprecated APIs, third-party cookies, and browser errors logged to the console on load.
Lighthouse desktop scores accessibility 84 and best practices 56.
Crawling and indexation
- robots.txt sets Crawl-delay: 5 for all agents, then exempts Googlebot explicitly. Net effect: Google crawls freely, while GPTBot, PerplexityBot and ClaudeBot are throttled to one page every five seconds. On a JavaScript-only site that is a second lock on the same door.
- sitemap.xml contains exactly two URLs. The booking page is not one of them.
- Redirects are correct — http to https to www, two hops, ending 200. A missing URL returns a true 404, not a soft 404.
One score needs context. Lighthouse rates this site 100 for SEO. That category is a shallow mechanical check — it confirms a title, a description, a viewport and crawlable links exist. It does not detect the missing structured data, the four-word served page, or the client-render problem. It should not be read as an all-clear, and anyone arguing the site is fine will cite it.
To an answer engine, this business is a title tag
ChatGPT, Perplexity, Claude and Google’s AI surfaces answer “best barber in Windsor” by retrieving and corroborating text. They need a name, a service list, a location, and third-party evidence that the business is good. Here is what is retrievable today.
| Signal | Status |
|---|---|
| Entity name in served HTML | a title tag — four words on the page |
| Structured data | none anywhere |
| Service definitions on own domain | none in served HTML |
| Prices on own domain | none |
| Geographic signal on own domain | meta description only |
| Reviews on own domain | none |
| Third-party evidence under the brand name | none — all of it sits under a personal name |
| AI crawler access | throttled to 1 page / 5 seconds |
Every competitor serves between 535 and 1,568 words of readable text with structured data attached; one carries LocalBusiness explicitly. When an answer engine assembles a recommendation for Windsor, it finds three well-formed candidates and one that is a title tag behind a five-second crawl delay.
This is the widest gap in the assessment and also the cheapest to close. Structured data, server-rendered text and a claimed business profile are days of work, not months. Nothing here requires winning a competitive battle — it requires publishing facts that are already true.
The brand name is attached to nothing
This section explains the zero brand-search figure, and it is the most important diagnostic in the document.
| Asset | Listed as | Carries reputation? |
|---|---|---|
| Website | Union Barbershop | no reviews, no schema, 4 served words |
| Booksy profile | “Alejandro Velázquez” | yes — all 193 reviews |
| @alejo_saha — “Licensed Barber, Windsor, CA” | 839 followers | |
| an ID-based personal profile | personal, not a business page |
[ Data verified ] Booksy JSON-LD, Instagram profile @alejo_saha, and the site’s served HTML — 29 August 2026.
Nowhere on the internet does the phrase “Union Barbershop” appear attached to a review, a rating, or a follower count. The brand exists on exactly one property — its own website — and that property serves four words to a crawler. There is no brand-awareness mystery to solve. The brand has simply never been published anywhere that a search engine or an answer engine collects evidence.
The Instagram bio links out to the website. The website links back to no social profile at all — there are zero Instagram, Facebook, TikTok or Yelp URLs anywhere in its served HTML. The corroboration loop is open at one end.
Name, address and phone consistency
- Own website: 170 Windsor River Rd Suite North
- Booksy: 170 Windsor River Rd — no suite
Two closed businesses sit on the address
| Listing | Status | Detail |
|---|---|---|
| The Salon | closed | 16 reviews, listed at Ste N — the same suite |
| Dan’s Barber Shop | closed | same street address |
A closed salon and a closed barber shop both occupy Union’s address in the data Google reads. That is a textbook cause of a suppressed local-pack position, and it is fixed through listing cleanup rather than any content work. Observed via indexed Yelp page titles — Yelp blocks direct requests, so confirm in a browser before asserting
The Google Business Profile — it exists, and it is the story
| Field | Value |
|---|---|
| Name as listed | Union Barbershop |
| Address | 170 Windsor River Rd Ste North, Windsor, CA 95492 |
| Primary category | Barber shop |
| Rating | 5.0 |
| Review count | 34 |
| Attributes | Accepts walk-ins · Good for kids · Beverages |
| Booking | Square Appointments — Reserve with Google connected |
| Local pack position | 5th of 6 for “barber shop Windsor CA 95492” |
[ Data verified ] Google local results, 29 August 2026. Read via a commercial unblocker — Google returns a consent redirect to direct requests, so the 34 review count should be re-checked in Google Business Profile Manager before it is quoted The booking destination was confirmed first-hand: the Square page returns the title “Union Barbershop | Book Appointments | WINDSOR, CA” with the matching address and phone. A Reserve-with-Google link only exists on a profile the merchant controls, so it is claimed and managed.
34 against 193
| Business | Google rating | Google reviews |
|---|---|---|
| The Gentlemen’s Barbershop | 4.9 | 316 |
| 1st Class Barbershop | 4.9 | 268 |
| Suave Barbershop | 4.9 | 111 |
| Union Barbershop | 5.0 | 34 |
| Jrdabarberr | 5.0 | 13 |
This is the single most important number in the assessment. Alejandro has collected 193 reviews on the platform that books him and 34 on the platform that decides whether he is found. Union holds the highest rating in the Windsor local pack and its second-lowest review count. Every “barber near me” search is settled in that pack, and it is settled largely on review volume. Nothing else in this document moves the needle as fast as asking for the Google review at the chair.
Needs confirmation Booksy showed the shop closed on 31 August, 2 September and 3 September — a Monday, Wednesday and Thursday the website advertises as open. This may be planned time off, or a live booking-availability leak. Worth asking directly.
The booking works. Nothing is counting
What works, and it is better than the competition in places: two booking channels, no deposit required, realistic 45-minute and hour-long service durations, a packages option, a loyalty programme, and clear published prices — on Booksy.
What breaks it
- The mobile page takes 22 seconds to render. Most people never see the booking button. This is the conversion problem; everything else is secondary.
- Prices are invisible to search. They live on Booksy and inside the booking widget — nowhere a search or answer engine can read. “How much is a haircut in Windsor” has no answer on Union’s domain.
- Two booking systems, no single source of truth. Square and Booksy hold separate availability, and the hours discrepancy in section 08 may be a symptom.
- Nothing is counted. No analytics means no click-to-call, no booking click, no directions click, and no way to judge any of the above.
There is no analytics on this website. No GA4, no Tag Manager, no Meta pixel — verified across all three pages. The only external scripts are Square’s own. Union Barbershop currently cannot tell how many people visited, where they came from, or whether a single booking originated online.
[ Data verified ] Served HTML of all three pages checked for GA4, Tag Manager and pixel identifiers, 29 August 2026.
The path we are building toward. A Google or AI recommendation, landing on a page that answers price, service and location in text a machine can read, backed by proof, with one tap to book, one tap to call and one tap for directions. Steps two and three do not currently exist.
An excellent barber on an unbuilt foundation
The overall figure is the mean of the five current-state dimensions — Website, SEO, AI Search, Conversion and Authority. Two plus two plus one plus five plus five is fifteen; fifteen out of fifty is 30%. The final three dimensions score headroom, not performance, and are deliberately excluded from the current-state figure.
The last three lines are the good news: they are high precisely because so little has been built. Opportunity of this size only exists where the foundation is missing.
Order matters more than effort here
Days 1–30 — become measurable and findable
Foundation- Start asking for the Google review at the chair, today. The profile exists and is claimed, with 34 reviews against 193 on Booksy and competitors at 316 and 268. This is the fastest-moving number available and it decides the local pack.
- Complete the profile itself — add the three services with their $40 / $50 / $40 prices, and photographs.
- Resolve the address data — get the two closed listings marked closed or removed, and make “Suite North” read identically everywhere.
- Install GA4 and conversion tracking on the booking click, click-to-call and directions click.
- Give the booking page a title and description, and add it to the sitemap. Fifteen minutes.
- Add LocalBusiness / HairSalon structured data sitewide, with services, prices, hours and social links.
- Fix the mobile performance emergency — compress and correctly size images, re-enable pinch-zoom.
Target by day 30: profile live and complete, analytics reporting, schema valid, mobile render under four seconds.
Days 31–60 — build the content that does not exist
Expansion- Write real service pages — men’s haircuts, fades and skin fades, beard work, haircut and beard, kids cuts — with prices as text on the page.
- Publish the price list as text, not as an image inside a booking widget.
- Put the reviews on the website, marked up, so the reputation works for the domain and not only for Booksy.
- Reposition on “never rushed.” Rewrite the homepage around what customers actually praise, and link out to Instagram and Facebook to close the corroboration loop.
- Remove the crawl-delay restriction that throttles AI crawlers.
Target by day 60: five to seven indexed service pages, 800+ readable words on key pages, reviews rendering on-domain, first AI citations appearing.
Days 61–90 — compound it
Authority- Start the review-request flow at the chair — legitimate prompting only, aimed at Google, where the profile is currently empty.
- Consolidate booking, or at minimum make Square and Booksy agree on hours.
- Open the Santa Rosa lane — 1,725 monthly searches ten minutes away, at the same difficulty — with a page that earns it.
- Build local entity corroboration — Windsor Chamber, Town Green and community organisations, local press, and accurate citations on the major aggregators.
Target by day 90: top three in the Windsor local pack, brand search volume measurably above zero, review collection running at a steady weekly rate.
What to do, in order
| # | Action | Effort | Impact | Depends on |
|---|---|---|---|---|
| 1 | Google review engine — close the 34-vs-193 gap | starts today, ongoing | Highest | — |
| 2 | Complete the GBP — services, prices, photos | 1 hour | Highest | — |
| 3 | Install GA4 + booking, call and directions tracking | 1 hour | Highest | — |
| 4 | Fix mobile performance — images, pinch-zoom | 4 hours | Highest | — |
| 5 | Add LocalBusiness / HairSalon schema sitewide | 2 hours | High | — |
| 6 | Title + description on the booking page, add to sitemap | 15 min | High | — |
| 7 | Clean up the address listing collisions | 2 hours | High | 2 |
| 8 | Publish prices as text; link site to social | 2 hours | High | — |
| 9 | Service pages with prices and FAQs | 1–2 weeks | High | 5, 8 |
| 10 | Reviews on-site with schema | 3 days | Medium | 5 |
The first five moves
- Start collecting Google reviews at the chair — 34 against 193 is the gap that decides the local pack.
- Install analytics, so that everything after this is measurable.
- Fix the mobile page so customers see it before they leave.
- Add structured data so machines can read the business.
- Give the booking page a title and put it in the sitemap.
Together that is roughly a day and a half of work. It moves AI Search Readiness off 1/10, makes the business measurable for the first time, takes the mobile page from 22 seconds to something a customer will actually wait for, and removes two data problems that are actively suppressing it.
Bottom line for Alejandro. You are not being out-barbered — and this assessment checked that carefully before saying so. On Booksy’s own ranking of twenty Windsor barbers you are number two, only two barbers in town have earned more reviews than you, and 192 of your 193 are five stars. What is beating you is not skill. It is that your reputation is in the wrong place and your website cannot be read. You have 193 reviews on Booksy and 34 on Google — and Google is what decides “barber near me.” In the Windsor local pack you hold the highest rating and the second-lowest review count, behind shops with 316 and 268. Meanwhile the website serves four words to a search engine, holds no structured data, counts nothing, and takes twenty-two seconds to show a customer anything on a phone. The expensive part — being genuinely excellent at the job, and having 193 people independently confirm it — is already done. What is missing is the part that gets built, and all of it is buildable in 90 days.
Let’s talk about fixing the foundation.
A short call to walk through these findings, confirm the open questions, and decide what gets built first.
Book a Call with Bonsai Marketingor reach us directly — fikeshway@bonsaimarketingcompany.com · (707) 593-7539