<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[LeadReef Blog]]></title><description><![CDATA[LeadReef Blog]]></description><link>https://leadreef.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ae896268831ba3a85b1ce20/1e202c9e-048a-4c01-9c71-673e5fbe29f0.png</url><title>LeadReef Blog</title><link>https://leadreef.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 07 Nov 2026 12:06:28 GMT</lastBuildDate><atom:link href="https://leadreef.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How to move a small business site off Wix or Squarespace without losing Google rankings]]></title><description><![CDATA[Short answer: you keep a small business's Google rankings through a move off Wix or Squarespace by keeping the same domain, listing every old URL before…]]></description><link>https://leadreef.hashnode.dev/how-to-move-a-small-business-site-off-wix-or-squarespace-without-losing-google-rankings</link><guid isPermaLink="true">https://leadreef.hashnode.dev/how-to-move-a-small-business-site-off-wix-or-squarespace-without-losing-google-rankings</guid><category><![CDATA[SEO]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Freelancing]]></category><category><![CDATA[wix]]></category><category><![CDATA[squarespace]]></category><dc:creator><![CDATA[LeadReef]]></dc:creator><pubDate>Fri, 06 Nov 2026 14:02:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae896268831ba3a85b1ce20/e2c42ec1-4148-4922-a4de-3cd43241d7a9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Short answer:</strong> you keep a small business's Google rankings through a move off Wix or Squarespace by keeping the same domain, listing every old URL before you touch anything, and sending each one to its closest new page with a permanent (301 or 308) server-side redirect on the new host. Google says to expect temporary ranking fluctuation during any move and to keep redirects for at least a year. Most lost rankings after a builder migration come from old URLs that quietly return 404, not from the move itself.</p>
<p>I've moved a handful of small sites off website builders, and the rebuild is rarely the hard part. The hard part is that nobody writes down the old URLs until after the DNS has changed. Here's the order I do it in now.</p>
<h2>Will the site lose rankings when it moves off Wix or Squarespace?</h2>
<p>It can dip for a while, but it shouldn't lose rankings for good if every old URL redirects to a matching page. Google's site move documentation says to "expect temporary fluctuation" and that it can take weeks or longer for new URLs to show for a medium-sized site.</p>
<p>What does cause lasting damage is the stuff that gets dropped: blog posts that were never rebuilt, a service page whose slug changed from <code>/services-1</code> to <code>/services</code> with no redirect, or every old URL pointed at the homepage. Google's docs warn against redirecting many old URLs to one irrelevant page, since that can be treated as a soft 404.</p>
<p>If the domain stays the same, you don't need Search Console's Change of Address tool. That tool is for moving to a different domain.</p>
<h2>What can you actually export from Wix and Squarespace?</h2>
<p>Less than you'd hope. Wix's help center says a Wix site has to be hosted on Wix's servers and doesn't support external hosting, and it doesn't offer a full site export. Plan on copying text and downloading images by hand.</p>
<p>Squarespace does have an export, but only to a WordPress-format XML file. According to Squarespace's own help article, it includes layout pages, one blog page with its posts, text, image and gallery blocks. It leaves out store pages, index pages, more than one blog, product and video blocks, page headers and footers, and custom CSS. Images may stay linked to Squarespace's servers, which break once the old site is cancelled, so download them yourself.</p>
<p>Either way, treat the export as raw material. The URL list is the thing you can't afford to lose.</p>
<h2>How do you build the URL map?</h2>
<p>Start from three sources and merge them into one spreadsheet: the live sitemap, Search Console, and your own crawl. Both builders generate a sitemap at <code>/sitemap.xml</code>. Wix serves a sitemap index that points to several sub-sitemaps, so a script has to follow the nesting. This one uses only the Python standard library:</p>
<pre><code class="language-python"># sitemap_to_csv.py: python3 sitemap_to_csv.py https://www.example.com/sitemap.xml &gt; urls.csv
import csv, sys, urllib.request, xml.etree.ElementTree as ET
from urllib.parse import urlparse

NS = {"sm": "http://www.sitemaps.org/schemas/sitemap/0.9"}

def fetch(url):
    req = urllib.request.Request(url, headers={"User-Agent": "url-map/1.0"})
    return ET.fromstring(urllib.request.urlopen(req, timeout=20).read())

def walk(url):
    root = fetch(url)
    if root.tag.endswith("sitemapindex"):  # Wix nests sub-sitemaps
        for loc in root.findall("sm:sitemap/sm:loc", NS):
            yield from walk(loc.text.strip())
    else:
        for loc in root.findall("sm:url/sm:loc", NS):
            yield loc.text.strip()

out = csv.writer(sys.stdout)
out.writerow(["old_path", "new_path", "note"])
for u in sorted(set(walk(sys.argv[1]))):
    out.writerow([urlparse(u).path or "/", "", ""])
</code></pre>
<p>The sitemap only lists what the builder thinks is live. To catch the rest, export the Pages and Performance reports from Search Console (ask the owner to add you as a user) and add any URL that gets clicks or impressions. Old URLs with backlinks matter too, so check the links report in the same tool.</p>
<p>Then fill in the <code>new_path</code> column by hand. Every row gets a destination, and every destination should be the closest page by topic, not the homepage.</p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/50d99d98-11d9-4c65-bc9d-ab16588b2062_2000x1460.png" alt="Fictional example: a URL map for a Wix plumbing site" /></p>
<h2>Which old URLs need special attention?</h2>
<p>The builder-specific prefixes. Wix puts blog posts under <code>/post/</code> and Wix Stores products under <code>/product-page/</code> by default, according to Wix's SEO settings docs. On Squarespace, blog posts sit under the blog page's own slug, so check the sitemap rather than assuming <code>/blog/</code>. If your new site uses <code>/blog/</code> and <code>/services/</code> paths, each of those prefixes needs a pattern redirect.</p>
<p>Also look for slugs that only make sense inside the builder: numbered duplicates like <code>/services-1</code>, leftover pages from a template, and pages that exist but aren't in the menu. Owners often don't know these are indexed until you show them the list.</p>
<h2>How do you write the redirects on the new host?</h2>
<p>Write them as server-side 301s on whatever the new site runs on. Google treats 301 and 308 as permanent and recommends them for moves. JavaScript redirects only work if Google renders the page successfully, so don't rely on them.</p>
<p>On Netlify, a <code>_redirects</code> file in the publish folder handles both patterns and one-off pages. Rules run top to bottom and the first match wins, so put specific rules before general ones:</p>
<pre><code># One-off pages whose slug changed
/services-1              /services              301
/about-us                /about                 301

# Wix prefixes to the new structure
/post/:slug              /blog/:slug            301
/product-page/:slug      /shop/:slug            301
</code></pre>
<p>Netlify normalizes trailing slashes before matching, so you don't need a second rule for <code>/about-us/</code>. On Apache hosting, the same map goes in <code>.htaccess</code>:</p>
<pre><code class="language-apache">RewriteEngine On
RewriteRule ^services-1/?$ /services [R=301,L]
RewriteRule ^about-us/?$ /about [R=301,L]
RewriteRule ^post/(.+)$ /blog/$1 [R=301,L]
RewriteRule ^product-page/(.+)$ /shop/$1 [R=301,L]
</code></pre>
<p>Avoid chains. If an old Wix URL already redirects to another old URL, point it straight at the final new page.</p>
<blockquote>
<p>Every row in the spreadsheet needs a destination. "We'll fix it if it 404s" means you'll find out from the owner, three weeks later, when the phone stops ringing.</p>
</blockquote>
<h2>What should you check on launch day?</h2>
<p>Run the whole URL list against the live site right after DNS switches. This loop prints the status code and redirect target for every old path:</p>
<pre><code class="language-bash">#!/usr/bin/env bash
# check_redirects.sh: ./check_redirects.sh https://www.example.com urls.csv
site="$1"
tail -n +2 "$2" | while IFS=, read -r old new note; do
  result=$(curl -s -o /dev/null -w '%{http_code} %{redirect_url}' "$site$old")
  echo "$result  $old"
done
</code></pre>
<p>You want <code>301</code> with the right target on every renamed URL, <code>200</code> on the ones that kept their path, and no <code>404</code>s. Then work through the rest:</p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/e593614e-4f12-4ee7-adf4-103948c46331_2000x1174.png" alt="Launch-day checklist for a website builder migration" /></p>
<p>Two things trip people up that have nothing to do with redirects. If the domain's DNS was managed inside Wix or Squarespace, copy the MX records before you change nameservers, or the business's email stops working. And if Search Console was verified through the builder's built-in integration, that verification can disappear with the old site, so add a Domain property verified by DNS before the move.</p>
<h2>How long should the redirects stay in place?</h2>
<p>At least a year, and ideally for good. That's Google's guidance in its site move documentation. A <code>_redirects</code> file costs nothing to keep, so there's no reason to ever delete it. Also update the links you control: the Google Business Profile website field, social profiles and any directory listings that point at old paths.</p>
<h2>Where do these projects come from?</h2>
<p>Plenty of small businesses outgrew a builder years ago and keep paying for it because moving feels risky. You find them the usual way, by browsing local search results and looking for sites that are slow, hard to use on a phone or obviously dated. If you'd rather start from a list, <a href="https://leadreef.ai/find">LeadReef</a> finds local businesses with outdated, broken-on-mobile or missing websites, shows what's wrong with each one, and helps with a first mockup and outreach message. You decide who to contact and send everything yourself, and the free plan covers your first 10 leads. Full disclosure: I'm part of the team behind LeadReef. Everything above works without it.</p>
<h2>Frequently asked questions</h2>
<h3>Do I need Google's Change of Address tool when moving off Wix?</h3>
<p>Not if the domain stays the same. Google's documentation says the tool isn't needed for moves within the same domain, such as changing paths or switching between www and non-www.</p>
<h3>Can I set up redirects inside Wix before moving?</h3>
<p>Wix has a URL Redirect Manager, but those redirects are served by Wix. Once the domain points to the new host, only the new host's redirects count, so put the full map there.</p>
<h3>Is a 308 redirect as good as a 301 for SEO?</h3>
<p>Yes. Google's redirect documentation lists both 301 and 308 as permanent redirects that tell Google to show the new URL in results.</p>
<h3>How many redirects can Squarespace hold?</h3>
<p>Squarespace's URL mappings field is limited to 400 KB, which Squarespace says is usually around 2,500 lines. That only matters if you're moving between pages within Squarespace, since after a full move the redirects live on the new host.</p>
<p>Sources (checked November 2026): Google Search Central, "Site moves with URL changes" and "Redirects and Google Search" (developers.google.com/search/docs/crawling-indexing); Wix Help Center, "Exporting or embedding your Wix site elsewhere" and "Customizing your page's URL structure in SEO settings" (support.wix.com); Squarespace Help Center, "Exporting your site" and "URL mappings" (support.squarespace.com); Netlify Docs, "Redirects" and "Redirect options" (docs.netlify.com).</p>
]]></content:encoded></item><item><title><![CDATA[How to build a one-page redesign concept for a local business prospect in two hours]]></title><description><![CDATA[Short answer: a redesign concept is one static page that shows a local business how its homepage could work, built from its own content and shown to the…]]></description><link>https://leadreef.hashnode.dev/how-to-build-a-one-page-redesign-concept-for-a-local-business-prospect-in-two-hours</link><guid isPermaLink="true">https://leadreef.hashnode.dev/how-to-build-a-one-page-redesign-concept-for-a-local-business-prospect-in-two-hours</guid><category><![CDATA[Web Development]]></category><category><![CDATA[Tailwind CSS]]></category><category><![CDATA[Freelancing]]></category><category><![CDATA[playwright]]></category><category><![CDATA[HTML]]></category><dc:creator><![CDATA[LeadReef]]></dc:creator><pubDate>Wed, 04 Nov 2026 01:07:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae896268831ba3a85b1ce20/6b626262-5c03-450f-a328-8c0910351206.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Short answer:</strong> a redesign concept is one static page that shows a local business how its homepage could work, built from its own content and shown to the owner before any deal exists. You can build a convincing one in about two hours with a single HTML file, Tailwind's Play CDN, the business's real text, and a Playwright script for screenshots. Spend most of the time on the part a customer sees on a phone, and almost none on anything below it.</p>
<p>I pitch small businesses with concepts instead of portfolio links, and the two-hour limit keeps it sane. Without a timer, a "quick concept" turns into a free website. The examples below use Brightwater Plumbing, a fictional business with a 555-0142 number.</p>
<h2>What is a redesign concept, and what is it not?</h2>
<p>A redesign concept is a single, clickable homepage that answers one question for the owner: "what would my site look like if it worked?" It is not a website. There's no CMS, no contact form backend, no second page, and nothing goes on their domain.</p>
<p>The limit helps both sides. The owner only has to judge one screen, on their phone, and you lose very little if they never reply. Two hours is a cost you can absorb a few times a week. Two days is not.</p>
<p>Here's how a concept compares with the real build you'd quote later:</p>
<table>
<thead>
<tr>
<th></th>
<th>Redesign concept</th>
<th>Real build (after they say yes)</th>
</tr>
</thead>
<tbody><tr>
<td>Pages</td>
<td>1 (homepage only)</td>
<td>Usually 4 to 8</td>
</tr>
<tr>
<td>Time</td>
<td>About 2 hours</td>
<td>Days to weeks</td>
</tr>
<tr>
<td>CSS setup</td>
<td>Tailwind Play CDN, no build step</td>
<td>Tailwind CLI or your usual stack</td>
</tr>
<tr>
<td>Content</td>
<td>Their existing text, rewritten lightly</td>
<td>Approved copy, real photos</td>
</tr>
<tr>
<td>Hosting</td>
<td>Local file or a throwaway preview URL</td>
<td>Their domain</td>
</tr>
<tr>
<td>Indexed by Google</td>
<td>No (<code>noindex</code>)</td>
<td>Yes</td>
</tr>
<tr>
<td>Forms, booking</td>
<td>Buttons that link nowhere or to their current tool</td>
<td>Working integrations</td>
</tr>
</tbody></table>
<h2>What should you collect before you open the editor?</h2>
<p>Collect everything in about fifteen minutes and write it into a plain text file, so the build itself is copy and paste. You need:</p>
<ul>
<li>Business name, phone number, service area and opening hours, exactly as they appear on their current site or Google Business Profile.</li>
<li>Their top three services, in their own words.</li>
<li>Two or three real reviews, copied word for word with the reviewer's first name. Never edit or invent one.</li>
<li>Their logo and brand colour, if they have them. If the logo is a blurry JPEG, use the name in bold text instead.</li>
<li>One screenshot of the current homepage on a phone. This is your "before".</li>
<li>The single most obvious problem. Pick one: no tap-to-call, the phone number is an image, the menu covers the screen, the hours are buried. The whole concept is built to fix that one thing visibly.</li>
</ul>
<p>If you can't name a specific problem after looking at their site on a phone, skip the business. A concept that fixes nothing in particular is just a nicer template, and owners can tell.</p>
<h2>How should you split the two hours?</h2>
<p>Put the timer on and work in fixed blocks. The order is the point: the hero gets the biggest block because it's the only part most owners will look at closely.</p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/d418676a-ac8d-44c3-bf71-3bd3db4b8082_2000x1372.png" alt="The two-hour plan for a redesign concept" /></p>
<p>If a block runs over, cut scope in the next one. I'd rather send a concept with three sections that look finished than six sections that look rushed.</p>
<h2>How do you set up Tailwind with no build step?</h2>
<p>Use the Play CDN. It's one script tag, it generates the CSS in the browser as you type class names, and you can define brand colours in a <code>&lt;style type="text/tailwindcss"&gt;</code> block. Tailwind's own docs say the Play CDN is for development and not for production, which is exactly what a concept is. If the owner hires you, the real build gets a proper setup.</p>
<pre><code class="language-html">&lt;!doctype html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;meta charset="utf-8"&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
  &lt;meta name="robots" content="noindex"&gt;
  &lt;title&gt;Homepage concept: Brightwater Plumbing&lt;/title&gt;
  &lt;script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"&gt;&lt;/script&gt;
  &lt;style type="text/tailwindcss"&gt;
    @theme {
      --color-brand: #0e4f6e;
      --color-accent: #f5b83d;
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body class="bg-white pb-20 text-slate-800 md:pb-0"&gt;
  &lt;div class="bg-amber-100 py-2 text-center text-xs text-amber-900"&gt;
    Redesign concept by Max Lackner. Not the official site.
  &lt;/div&gt;
  &lt;!-- hero, services, reviews, call bar --&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>
<p>Two colours are enough. Pull the brand colour from their logo or current site and pick one accent with strong contrast for the call button. Everything else stays slate and white.</p>
<h2>What goes above the fold on a phone?</h2>
<p>Four things: who they are, what they fix or sell, where and when, and one big button that calls them. Write the headline from their services list, not from a slogan. "Leaks, clogs and water heaters fixed the same day" beats "Your trusted plumbing partner" every time, because it's what the customer searched for.</p>
<pre><code class="language-html">&lt;header class="bg-brand px-5 pb-10 pt-5 text-white md:px-16"&gt;
  &lt;p class="mt-8 text-sm text-white/80"&gt;
    Licensed plumber in Fairview. Open 7am to 7pm, every day.
  &lt;/p&gt;
  &lt;h1 class="mt-3 text-3xl font-bold leading-tight md:text-5xl"&gt;
    Leaks, clogs and water heaters fixed the same day
  &lt;/h1&gt;
  &lt;div class="mt-6 flex flex-col gap-3 sm:flex-row"&gt;
    &lt;a href="tel:+15555550142"
       class="rounded-lg bg-accent px-6 py-4 text-center font-semibold text-slate-900"&gt;
      Call 555-0142
    &lt;/a&gt;
    &lt;a href="#visit"
       class="rounded-lg border border-white/60 px-6 py-4 text-center font-semibold"&gt;
      Request a visit
    &lt;/a&gt;
  &lt;/div&gt;
&lt;/header&gt;
</code></pre>
<p>The <code>py-4</code> buttons come out well above the 24 by 24 CSS pixel minimum that WCAG 2.2 sets for tap targets (success criterion 2.5.8, level AA). On a phone they stack full width, which is what you want for a thumb.</p>
<p>Then add the one piece that does most of the selling on mobile, a sticky call bar that only shows on small screens:</p>
<pre><code class="language-html">&lt;a href="tel:+15555550142"
   class="fixed inset-x-0 bottom-0 bg-accent py-4 text-center font-semibold text-slate-900 md:hidden"&gt;
  Call now: 555-0142
&lt;/a&gt;
</code></pre>
<p>The <code>pb-20</code> on the body keeps the bar from covering the last section. If their main problem was "no tap-to-call", this bar is the before and after in a single line of HTML.</p>
<p>Below the hero, keep it short: a three-card services grid, two real reviews in <code>&lt;blockquote&gt;</code> elements with the reviewer's first name, and their hours. That's the whole page. No team section, no blog teaser, no slider.</p>
<h2>How do you mark it as a concept and keep it out of Google?</h2>
<p>Label it on the page and in the head. The banner at the top says it's a concept and not the official site, and <code>&lt;meta name="robots" content="noindex"&gt;</code> asks search engines not to index it. Google's documentation notes that the page must not be blocked in robots.txt, or the crawler never sees the noindex rule.</p>
<p>For sharing, the simplest preview host I know is Netlify Drop: drag the folder onto app.netlify.com/drop and you get a live URL without creating an account. Netlify's docs say an unclaimed deploy is protected with a temporary password until you claim it, so if you want a link the owner can open, sign in first. Delete the deploy if they say no.</p>
<blockquote>
<p>A concept should look like a proposal, not like a copy of their site. If a stranger landed on it, they should know within a second that it isn't the real business.</p>
</blockquote>
<h2>How do you capture screenshots for the pitch?</h2>
<p>Most owners will never open a link from a stranger, so the screenshot is the real deliverable. Playwright ships device presets, and <code>iPhone 13</code> gives you a 390 pixel wide viewport with the right scale factor.</p>
<pre><code class="language-js">// shots.js, run with: node shots.js
const { chromium, devices } = require('playwright');

(async () =&gt; {
  const browser = await chromium.launch();
  const url = 'file://' + __dirname + '/index.html';

  const phone = await browser.newPage({ ...devices['iPhone 13'] });
  await phone.goto(url);
  await phone.waitForTimeout(1500); // give the Play CDN time to build the CSS
  await phone.screenshot({ path: 'concept-mobile.png' });

  const desk = await browser.newPage({ viewport: { width: 1440, height: 900 } });
  await desk.goto(url);
  await desk.waitForTimeout(1500);
  await desk.screenshot({ path: 'concept-desktop.png' });

  await browser.close();
})();
</code></pre>
<p>The Play CDN generates styles after the page loads, so without the pause you'll capture an unstyled page. Put the phone screenshot of their current site next to the new one. That pair is the pitch.</p>
<p><img src="https://substack-post-media.s3.amazonaws.com/public/images/d8353d83-048a-4732-97de-89539f4743f8_2000x1722.png" alt="Fictional example: the finished concept on phone and desktop" /></p>
<h2>What should the message say?</h2>
<p>Short, specific, and about the one problem you fixed. Attach the before and after phone screenshots, and keep the link for when they reply.</p>
<blockquote>
<p>Hi Dana, I was looking at plumbers in Fairview on my phone and noticed your number on the homepage is an image, so it can't be tapped. I mocked up how the page could look with a call button up top, screenshots attached. Happy to send the live version if it's useful. Max</p>
</blockquote>
<p>(Fictional example. Swap in the business and the problem you actually found.)</p>
<h2>Where do the prospects come from?</h2>
<p>The manual way works fine: search a service and a town, open the first twenty results on your phone, and note the sites with a clear, fixable problem. It's slow, but it trains your eye. If you'd rather start from a shortlist, <a href="https://leadreef.ai/find">LeadReef</a> finds local businesses with outdated, broken-on-mobile or missing websites, shows what's wrong with each, and helps draft a first mockup and message. You still pick who to contact and send everything yourself, and the free plan covers your first 10 leads. Full disclosure: I'm part of the team behind LeadReef. Everything above works without it.</p>
<h2>Frequently asked questions</h2>
<h3>Can I use Tailwind's Play CDN on the final client site?</h3>
<p>No. Tailwind's documentation says the Play CDN is for development only and not intended for production. Use it for the concept, then switch to the Tailwind CLI or your normal build when the project is paid.</p>
<h3>Is it okay to use the business's logo and photos in a concept?</h3>
<p>For a private concept shown only to that owner, using their own name and assets is common practice. Label the page clearly as a concept, keep it out of search with noindex, and take it down if they aren't interested.</p>
<h3>Should I send a link or screenshots?</h3>
<p>Send screenshots first. They show up in the email itself, they don't depend on the owner clicking a link from a stranger, and you can offer the live version once they reply.</p>
<p>Sources (checked November 2026): Tailwind CSS docs, "Play CDN" (tailwindcss.com/docs/installation/play-cdn); Google Search Central, "Block search indexing with noindex" (developers.google.com/search/docs/crawling-indexing/block-indexing); W3C, "Understanding SC 2.5.8 Target Size (Minimum)" (w3.org/WAI/WCAG22/Understanding/target-size-minimum.html); Netlify Docs, "Netlify Drop quickstart" (docs.netlify.com/start/quickstarts/netlify-drop-quickstart); Playwright docs, "Screenshots" and device emulation (playwright.dev).</p>
]]></content:encoded></item><item><title><![CDATA[Cold email from a personal Gmail without landing in spam: a 20-minute setup for freelancers]]></title><description><![CDATA[Gmail's real sending limits, a safe daily ramp, what to strip from your first email, and the CAN-SPAM basics for freelancers emailing local businesses.]]></description><link>https://leadreef.hashnode.dev/cold-email-from-a-personal-gmail-without-landing-in-spam-a-20-minute-setup-for-freelancers</link><guid isPermaLink="true">https://leadreef.hashnode.dev/cold-email-from-a-personal-gmail-without-landing-in-spam-a-20-minute-setup-for-freelancers</guid><category><![CDATA[email]]></category><category><![CDATA[Freelancing]]></category><category><![CDATA[marketing]]></category><category><![CDATA[Web Design]]></category><dc:creator><![CDATA[LeadReef]]></dc:creator><pubDate>Mon, 02 Nov 2026 14:06:54 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ae896268831ba3a85b1ce20/32b334ad-3fe7-4baa-b037-ef4f6dad2594.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you're a freelancer reaching out to local businesses, you probably don't need a cold email platform, a warmup service and three new domains. You need to send fifteen good emails a week from the Gmail account you already have, and you need them to land in the inbox.</p>
<p>That second part is where most people get stuck. They write a decent message, send it to forty businesses in one evening, and get nothing back. Not because the message was bad, but because half of it went to spam or to an inbox nobody reads.</p>
<p>This is the setup we'd recommend to anyone doing small-volume outreach from a regular Gmail address. It takes about twenty minutes and no extra tools.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae896268831ba3a85b1ce20/39375302-04fb-4dc4-a2f9-17974a2b5372.png" alt="The 20-minute checklist" style="display:block;margin:0 auto" />

<h2>First, the actual limits</h2>
<p>There's a lot of folklore about how many emails Gmail "lets" you send. Here's what Google itself says.</p>
<table>
<thead>
<tr>
<th>Account type</th>
<th>Daily sending limit</th>
<th>Source</th>
</tr>
</thead>
<tbody><tr>
<td>Personal Gmail (@gmail.com)</td>
<td>500 emails a day, max 500 recipients in one email</td>
<td>Google Gmail Help</td>
</tr>
<tr>
<td>Google Workspace (paid)</td>
<td>2,000 messages a day per user</td>
<td>Google Workspace Admin Help</td>
</tr>
<tr>
<td>Google Workspace (trial)</td>
<td>500 messages a day</td>
<td>Google Workspace Admin Help</td>
</tr>
<tr>
<td>"Bulk sender" status</td>
<td>5,000+ messages a day to personal Gmail addresses</td>
<td>Google's email sender guidelines</td>
</tr>
</tbody></table>
<p>Here's the important part: <strong>these are the hard ceilings, not a target.</strong> You can hit 500 a day and still have most of those emails go to spam. What decides whether you land in the inbox isn't the cap, it's how recipients react to what you send.</p>
<p>Google's sender guidelines ask everyone to keep the reported spam rate under 0.1% and never let it reach 0.3%. One "Report spam" click in a batch of a few hundred is already close to that line.</p>
<blockquote>
<p>For cold outreach, the limit that matters isn't 500 a day. It's how many people click "Report spam". Sending less and sending better is the whole game.</p>
</blockquote>
<h2>How many to send per day</h2>
<p>For a personal Gmail account that hasn't been used for outreach before, we'd start small and grow slowly:</p>
<table>
<thead>
<tr>
<th>Week</th>
<th>Cold emails per day</th>
<th>What to watch</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>5 to 10</td>
<td>Any bounces? Any replies at all?</td>
</tr>
<tr>
<td>2</td>
<td>10 to 15</td>
<td>Are replies coming in? Anything in your own spam folder?</td>
</tr>
<tr>
<td>3</td>
<td>15 to 20</td>
<td>Keep going only if nothing looks off</td>
</tr>
<tr>
<td>After that</td>
<td>20 to 30 max</td>
<td>Quality over volume</td>
</tr>
</tbody></table>
<p>These aren't official numbers. They're a cautious ramp that leaves plenty of room under Google's limits and gives you time to notice problems before they get expensive. If you're a solo freelancer, 20 thoughtful emails a day is a lot. Most people can't write more than that well anyway.</p>
<p>Spread them through the day instead of sending them all at 10pm in one burst. Ten emails sent in two minutes looks like a script. Ten emails sent over a morning looks like a person.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae896268831ba3a85b1ce20/3040b244-569b-43af-98a4-69a61d3a245b.png" alt="A safe ramp for a fresh Gmail account" style="display:block;margin:0 auto" />

<h2>What to remove from the email itself</h2>
<p>This is where most deliverability problems actually come from. Every one of these is common in cold emails, and every one of them makes you look more like a bulk sender.</p>
<table>
<thead>
<tr>
<th>Remove this</th>
<th>Why it hurts</th>
<th>What to do instead</th>
</tr>
</thead>
<tbody><tr>
<td>Tracking pixels (open tracking)</td>
<td>Hidden images are a classic bulk-mail signal</td>
<td>Skip open tracking. A reply is the only number that matters.</td>
</tr>
<tr>
<td>Several links</td>
<td>More links, more spam-filter attention</td>
<td>Zero links in the first email. Send the link when they reply.</td>
</tr>
<tr>
<td>Link shorteners (<a href="http://bit.ly">bit.ly</a> etc.)</td>
<td>Shared shorteners are often abused by spammers</td>
<td>Use the full plain URL, and only later</td>
</tr>
<tr>
<td>Attachments</td>
<td>PDFs from strangers get filtered and rarely opened</td>
<td>Offer to send it, or link to it in a later email</td>
</tr>
<tr>
<td>Images and fancy HTML signatures</td>
<td>Looks like a newsletter, not a person</td>
<td>Plain text with your name and role</td>
</tr>
<tr>
<td>"Unsubscribe" footers from a marketing tool</td>
<td>Signals mass email</td>
<td>A simple line like "If this isn't relevant, just let me know and I won't follow up."</td>
</tr>
<tr>
<td>Spammy phrases in the subject</td>
<td>"Free", "Guaranteed", "Act now"</td>
<td>A short, specific, lowercase subject</td>
</tr>
</tbody></table>
<p>The single biggest improvement for most people is the first one. Open tracking feels useful, but it adds a hidden image to every email, and it doesn't tell you much anyway because many email apps block or pre-load images.</p>
<h2>What a first email should look like</h2>
<p>Short, plain, specific, and with no links. Here's the shape:</p>
<blockquote>
<p><strong>Subject:</strong> your booking page on mobile</p>
<p>Hi Maria,</p>
<p>I was looking for a dentist near Oak Park and found your practice. Your reviews are great, but on my phone the booking link was hard to find, the menu covers most of the screen.</p>
<p>I'm a web designer and I put together a quick idea of how your homepage could work better on mobile. Want me to send it over?</p>
<p>Either way, good luck with the new location.</p>
<p>Alex</p>
<p>Alex Rivera Design · 120 Lake St, Oak Park, IL</p>
</blockquote>
<p><em>(Fictional example.)</em> Notice what's not there: no link, no attachment, no logo, no tracking. The only "signature" is a name and a postal address, which US law expects anyway (more on that below). The only thing it asks for is a reply. When Maria replies "sure", you send the mockup link in that thread. Now you're in an active conversation, and an email with a link in a reply thread is far less likely to be filtered than a cold email with a link.</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ae896268831ba3a85b1ce20/12942518-f2af-4fc9-bec9-69a08f615f31.png" alt="Anatomy of a first email" style="display:block;margin:0 auto" />

<h2>Who you send to matters as much as what you send</h2>
<p>Two things quietly damage your sender reputation even if your emails are perfect.</p>
<p><strong>Addresses that don't exist.</strong> Every bounce tells Gmail you're mailing a list you didn't verify. Before sending, double check the address on the business's own website, not a three-year-old directory listing. If an address bounces, remove it right away and don't retry.</p>
<p><strong>Inboxes nobody reads.</strong> Small businesses often list info@ or contact@ on an old website, and some of those inboxes haven't been opened in years. They don't bounce, so you never find out, but your emails get zero engagement. If you can find an owner's name address, or the business is clearly active on Instagram or Google Business messages, those can reach a real person faster.</p>
<h2>The legal basics (US)</h2>
<p>If you're emailing US businesses, cold email to a business is legal under CAN-SPAM, but a commercial email needs a few things:</p>
<table>
<thead>
<tr>
<th>CAN-SPAM requirement</th>
<th>In practice</th>
</tr>
</thead>
<tbody><tr>
<td>Don't use misleading headers or subject lines</td>
<td>Your real name, a subject that matches the email</td>
</tr>
<tr>
<td>Identify it as an ad where that applies</td>
<td>A personal pitch from you is fine, don't disguise it as something else</td>
</tr>
<tr>
<td>Include a valid physical postal address</td>
<td>Your business address in the signature</td>
</tr>
<tr>
<td>Tell people how to opt out, and honor it within 10 business days</td>
<td>"If this isn't relevant, just reply and I won't email again." Then actually stop.</td>
</tr>
</tbody></table>
<p>Rules are different in the EU, the UK and Canada, where consent matters much more. If you're emailing businesses there, check the local rules first. This isn't legal advice, just the basics most freelancers miss.</p>
<h2>When a separate domain or Workspace makes sense</h2>
<p>For fifteen emails a day, a personal Gmail is fine. A few situations where it's worth upgrading:</p>
<ul>
<li><strong>You're sending more than 30 or so a day.</strong> At that point a Google Workspace account on your own domain looks more professional and gives you more room.</li>
<li><strong>You want a branded address.</strong> "<a href="mailto:alex@yourstudio.com">alex@yourstudio.com</a>" reads better to a business owner than a random gmail address. If you set this up, make sure SPF, DKIM and DMARC are configured for your domain. Google walks you through it in the Workspace admin.</li>
<li><strong>You're automating sequences.</strong> If a tool is sending for you, use a separate domain so a mistake doesn't affect the address you use for real client work.</li>
</ul>
<p>If none of these apply, don't overbuild. Infrastructure isn't what's stopping a freelancer from getting clients. Sending a few good emails every day is.</p>
<h2>Quick checklist</h2>
<ol>
<li>Know your ceiling (500 a day on personal Gmail) and stay far below it.</li>
<li>Start at 5 to 10 a day and grow slowly over a few weeks.</li>
<li>Spread sends through the day.</li>
<li>No tracking pixel, no links, no attachments in the first email.</li>
<li>Plain text, short, one specific observation about their business.</li>
<li>Verify every address. Remove bounces immediately.</li>
<li>Prefer an owner's address over a dusty info@ inbox.</li>
<li>Include your postal address and an easy way to say no. Honor it.</li>
<li>Send the link only after they reply.</li>
</ol>
<h2>A note on where the leads come from</h2>
<p>Deliverability is only half of it. The other half is having a reason to email in the first place. An email that points to something specific ("your booking link is hard to find on mobile") gets replies. A generic "do you need a website" email gets ignored, and ignored emails are what slowly push you toward the spam folder.</p>
<p>We built <a href="https://leadreef.ai">LeadReef</a> to help with that part: it finds local businesses with outdated, broken or missing websites and lists what's actually wrong with each one, so every email starts with a real observation. You send everything yourself, from your own inbox. There's a free plan if you want to try it. Everything in this checklist works with or without it.</p>
<hr />
<p><strong>Sources:</strong> <a href="https://support.google.com/mail/answer/22839">Gmail sending limits (Google Gmail Help)</a> · <a href="https://support.google.com/a/answer/166852">Gmail sending limits in Google Workspace</a> · <a href="https://support.google.com/a/answer/81126">Email sender guidelines (Google)</a> · <a href="https://www.ftc.gov/business-guidance/resources/can-spam-act-compliance-guide-business">CAN-SPAM Act: A Compliance Guide for Business (FTC)</a></p>
]]></content:encoded></item></channel></rss>