<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cornelis Van Wyk</title>
    <description>The latest articles on DEV Community by Cornelis Van Wyk (@gapwatch).</description>
    <link>https://dev.to/gapwatch</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: Cornelis Van Wyk</title>
      <link>https://dev.to/gapwatch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gapwatch"/>
    <language>en</language>
    <item>
      <title>What I found checking 26 Austin salon websites by hand</title>
      <dc:creator>Cornelis Van Wyk</dc:creator>
      <pubDate>Wed, 28 Oct 2026 20:47:25 +0000</pubDate>
      <link>https://dev.to/gapwatch/what-i-found-checking-26-austin-salon-websites-by-hand-2a49</link>
      <guid>https://dev.to/gapwatch/what-i-found-checking-26-austin-salon-websites-by-hand-2a49</guid>
      <description>&lt;p&gt;If you build websites or do local SEO, you have probably tried the obvious prospecting filter: "show me businesses with no website." I wanted to know what that filter misses, so I picked one city and one niche (Austin hair &amp;amp; beauty) and checked every candidate by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I did
&lt;/h2&gt;

&lt;p&gt;I reviewed roughly 80 to 100 Austin hair, nail, barber, lash/brow and esthetician businesses. I found them through searches aimed at businesses likely to have online gaps, so &lt;strong&gt;this is not a random sample.&lt;/strong&gt; Nothing below is a rate for "all Austin salons." It describes the 26 businesses that ended up on my list.&lt;/p&gt;

&lt;p&gt;I left out chains and franchises, closed businesses, and any business that already had a working website with online booking. Of the businesses I reviewed, 26 qualified:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10 hair salons (including 3 braiding salons and 1 hair/barber shop)&lt;/li&gt;
&lt;li&gt;7 nail salons&lt;/li&gt;
&lt;li&gt;6 barbershops&lt;/li&gt;
&lt;li&gt;3 lash/brow studios&lt;/li&gt;
&lt;li&gt;0 estheticians. I checked about 8, and every one already had a working site with online booking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For every website listed for a business (on its Google profile, directories, Yelp-style listings or social bios), I:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Requested it with &lt;code&gt;curl&lt;/code&gt;, following redirects, with a mobile browser user agent.&lt;/li&gt;
&lt;li&gt;Recorded the final status code, the final URL, the page size and the page language/title.&lt;/li&gt;
&lt;li&gt;Re-tested every failure from a second network, so a single flaky connection wouldn't count as "dead."&lt;/li&gt;
&lt;li&gt;Looked at the page itself: is this actually the business, and does the booking link go somewhere real?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I collected public business information only. No personal emails and no data about individuals.&lt;/p&gt;

&lt;h2&gt;
  
  
  The headline: "has a website" is often false
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;20 of the 26 had no working website on their own domain.&lt;/strong&gt; They had no site at all, a dead one, a parked one, one pointing at the wrong business, or only a booking page or link-in-bio.&lt;/p&gt;

&lt;p&gt;The part a "no website" filter misses: &lt;strong&gt;10 of the 26 had a website listed publicly that was broken.&lt;/strong&gt; A tool that only looks at whether the website field is filled in would mark all 10 as "has a website" and skip them.&lt;/p&gt;

&lt;p&gt;Here is what those 10 listed websites actually did:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What the listed URL did&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Domain now belongs to something unrelated (a blog, an unrelated WordPress site returning HTTP 500, a German-language site)&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parked: a ~114-byte page that just JS-redirects to &lt;code&gt;/lander&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Old Google Business Sites (&lt;code&gt;business.site&lt;/code&gt;) URL, now 404, still listed in directories&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wix domain disconnected (404 "connect your domain" page)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server down (TLS connection dropped / 502)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infinite 301 redirect loop&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Listing points to a chain's corporate page, not the business&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A few patterns stood out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Parked pages return HTTP 200.&lt;/strong&gt; A status-code check alone calls them "up." The giveaway was the tiny body size and the redirect to &lt;code&gt;/lander&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google's retired Business Sites URLs are still out there.&lt;/strong&gt; Directories still show the &lt;code&gt;business.site&lt;/code&gt; link even though it returns 404.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lapsed domains get reused.&lt;/strong&gt; Three "websites" now load something with no connection to the salon. Someone searching for the salon would land there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Booking links break too.&lt;/strong&gt; One booking-platform link sent visitors to a generic search page, and one booking-platform profile was an unclaimed placeholder.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I re-checked the listed domains on 2026-10-28, three days later, they gave the same results.&lt;/p&gt;

&lt;h2&gt;
  
  
  The other gaps
&lt;/h2&gt;

&lt;p&gt;Each business could have more than one gap. Across the 26:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Gap&lt;/th&gt;
&lt;th&gt;Businesses&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No working website&lt;/td&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Name/address/phone inconsistent across listings&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Facebook/Instagram is the only web presence&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Few reviews&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No online booking&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Broken pages on the site&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No own domain (booking page / link-in-bio only)&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No prices shown&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No mobile viewport&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No valid HTTPS&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Outdated copyright footer&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I scored each business by how many distinct gaps it had. Most landed in the middle: 1 business scored 6, 5 scored 5, 13 scored 4, 4 scored 3 and 3 scored 2.&lt;/p&gt;

&lt;p&gt;Geographically, the list clustered in a few areas. 8 were in 78753, 5 in 78752, 5 in 78745, 3 in 78741 and 2 in 78702, with one each in 78758, 78704 and 78727. That reflects where my searches turned things up as much as where gaps actually exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pre-selected sample.&lt;/strong&gt; Don't read "10 of 26" as a rate for the whole city.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review counts can lag&lt;/strong&gt; behind what a live profile shows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I didn't score social-media inactivity&lt;/strong&gt;, even though it is often the real problem for Facebook/Instagram-only businesses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Things change.&lt;/strong&gt; A parked domain can come back tomorrow. Everything here is accurate only as of the check dates.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Takeaway for anyone prospecting local businesses
&lt;/h2&gt;

&lt;p&gt;If you sell websites or local SEO, the "website" field in a listing is a claim, not a fact. A 30-second check (follow redirects, look at the body size, confirm the business name appears on the page) separates "has a website" from "has a website that works." In my small, biased sample, that check turned up 10 extra businesses that a blank-field filter would have skipped.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Disclosure:&lt;/strong&gt; I'm testing whether there's demand for a paid monthly version of this: a hand-verified list of Austin hair &amp;amp; beauty businesses with these gaps, with the evidence for each one. It is &lt;strong&gt;not launched&lt;/strong&gt;, nothing is for sale and no payments are accepted. $49/month is a price I'm testing, and 10-25 leads a month is a target, not a promise. If you'd use something like this, or think it's pointless, the details and a free waitlist are here: &lt;a href="https://gapwatch.carrd.co" rel="noopener noreferrer"&gt;https://gapwatch.carrd.co&lt;/a&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>webdev</category>
      <category>seo</category>
      <category>freelancing</category>
    </item>
  </channel>
</rss>
