DIY SEO for Small Business: What to Do, What to Skip
Most DIY SEO guides are written by people who sell SEO services, and it shows. They open by explaining what a search engine is, hand you eight tips that end at "add keywords to your titles", and close with a form. The three pages currently ranking for this query run 2,100, 2,700 and 3,200 words between them, and not one contains a command you can paste, a line of structured data, or a number you can measure yourself.
That is a strange gap, because the single best source on whether you should do your own SEO is published by Google, is free, and is cited by none of them.
What Google actually says about doing your own SEO
Google maintains a page called "Do you need an SEO?", written for business owners deciding whether to hire. Its answer for a small operator is direct: "If you run a small local business, you can probably do much of the work yourself. We recommend starting with the SEO starter guide."
That is first-party permission, from the only party whose opinion decides the outcome. It also sets the ceiling honestly. The same page states, verbatim, "No one can guarantee a #1 ranking on Google", and tells you what to do when someone claims otherwise: "If they guarantee you that their changes will give you first place in search results, find someone else."
Two more lines from that page save small businesses real money every year. The first kills a myth that survives entirely on wishful thinking: "Advertising with Google won't have any effect on your site's presence in our search results. Google never accepts money to include or rank sites in our search results, and it costs nothing to appear in our organic search results." If you are weighing a budget between the two channels, we worked the arithmetic out in detail in SEO vs Google Ads.
The second is newer. Google's list of what an SEO can help with now includes "Optimizing for generative AI", and the vetting questions ask whether a provider's "advice on optimizing for AI experiences (also known as 'AEO' 'GEO' services), is their advice aligned with Google Search's official guidance on optimizing for generative AI features". Google is telling you to check GEO claims against its own documentation. Most of the industry has not noticed.
The starter guide sets the baseline lower than any agency will tell you. On how pages get found at all: "You usually don't need to do anything except publish your site on the web. In fact, the vast majority of sites listed in our results are found and added automatically as we crawl the web."
So the work is not getting Google to notice you. The work is removing the reasons it ignores what it found.
Run these five checks before you change anything
Every hour you spend rewriting page copy is wasted if the page returns the wrong status code or renders empty to a crawler. These five checks take about fifteen minutes total, need no account, and no tool beyond curl.
One. What status code does the page actually return?
curl -sI https://yourdomain.com/services | head -n 12
You are looking for HTTP/2 200 on pages you want indexed. A 301 is fine if it lands somewhere sensible. A 302 on a permanent move tells Google the old URL is still the real one. A 200 on a page that says "not found" in the body is a soft 404, and it is the most common indexing bug on small sites, because most site builders return 200 for everything.
Two. What does a crawler see with JavaScript switched off?
curl -sL -A "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" \
https://yourdomain.com/services \
| python3 -c "import sys,re,html; t=sys.stdin.read(); \
t=re.sub(r'(?is)<(script|style)[^>]*>.*?</\1>',' ',t); \
t=re.sub(r'<[^>]+>',' ',t); print(len(html.unescape(t).split()), 'visible words')"
If a page you consider your best content returns under 100 visible words, its text is being assembled in the browser. Google renders JavaScript, but it queues that work separately and it costs you time and reliability. Other crawlers do not render at all. If you are on a framework rather than a site builder, our Next.js SEO guide covers what gets served in the initial HTML and what does not.
Three. Are you blocking yourself?
curl -s https://yourdomain.com/robots.txt
A Disallow: / left over from a staging site is a five-second fix that nobody thinks to look for. Read every line, and check the sitemap reference at the bottom exists.
Four. Does your sitemap list the pages you care about?
curl -s https://yourdomain.com/sitemap.xml | grep -c "<loc>"
Compare that count to the number of pages you would want a customer to land on. A sitemap with three entries on a forty-page site is not a disaster, but it tells you the generator is misconfigured.
Five. Is Google seeing what you see?
Open Search Console and run the URL Inspection tool on three pages. The starter guide is explicit that this is the check that counts: "To check how Google sees your page, use the URL Inspection Tool in Search Console." The site: operator gives you a rough answer, and it is worth a look, but inspection gives you the crawl date, the canonical Google chose, and the rendered HTML.
Fix everything these five checks surface before writing a single new word. Content sitting behind a technical fault does not rank, and you will conclude that SEO does not work when what did not work was a redirect.
Keyword research with free tools, and the check most people skip
Paid tools are convenient, not necessary. Three free sources will get a small business further than most $99-a-month subscriptions get used for.
- Search Console, Performance report. Queries where you already appear at position 8 to 20 are the cheapest wins on your site. You are known for those. Improving a page that already ranks beats publishing a new one.
- Google autocomplete and the People Also Ask box. Type your service plus your city and read what Google offers. Those completions come from real query volume.
- Your inbox and your phone. Every question a customer asks before buying is a query someone else typed instead of calling.
Then run the check almost nobody runs, and the one we consider the whole job: open the search results for the phrase and read who ranks, not how many people search it.
A keyword with 2,000 searches a month whose first page is entirely agencies selling the service is a keyword for agencies. Ranking there brings you readers who want to sell you something. We reject keywords on this basis regularly, including ones with better volume than the article you are reading, and the reasoning is worth copying: the question is not "can I rank here", it is "is the person clicking this result a person who buys from me".
Two signals decide it in about ninety seconds. Are the top results published by businesses like yours, or by people selling to businesses like yours? And is there at least one page in the top ten from a site with no obvious authority? A weak domain holding a top-ten slot means the results are winnable by content rather than by budget. We used exactly this test to pick a keyword for contractors and to reject a better-scoring one on the same day.
Titles and descriptions: two rules Google states plainly
This is the highest ratio of result to effort on the list, and it is entirely free.
The starter guide's rules are short. "A good title is unique to the page, clear and concise, and accurately describes the contents." For descriptions: "A good meta description is short, unique to one particular page, and includes the most relevant points."
Audit yours in one command. This prints the title of every URL in your sitemap, so duplicates jump out:
curl -s https://yourdomain.com/sitemap.xml \
| grep -o "<loc>[^<]*" | sed "s/<loc>//" \
| while read -r url; do
title=$(curl -sL "$url" | grep -o "<title>[^<]*" | head -n1 | sed "s/<title>//")
printf "%-55s %s\n" "$url" "$title"
done
Three patterns show up on almost every small business site. Half the pages share one title, usually the business name. Service pages describe the business rather than the service. And the home page title is the brand name alone, which is the one query you already win.
Two things Google tells you not to bother with, both quoted from the starter guide. "Google Search doesn't use the keywords meta tag." And on repetition: "Excessively repeating the same words over and over (even in variations) is tiring for users, and keyword stuffing is against Google's spam policies."
If you have a location, your Business Profile is a second index
For any business customers visit or travel to, the Business Profile is a separate ranking system with its own rules, and it is free.
Google names the factors on the record: "Local results are mainly based on relevance, distance, and popularity." The page also carries a warning that ends most upsell conversations: "There's no way to request or pay for a better local ranking on Google."
Distance you cannot change. Relevance is category and service accuracy, which takes an afternoon. Popularity is described as being based partly on "how many websites link to your business and how many reviews you have".
That leaves reviews, and reviews are where owners break the rules without knowing. Google's policy prohibits offering "payment, discounts, free goods and/or services in exchange for posting any review". Asking a happy customer for an honest review, with nothing attached, is permitted. The distinction is the incentive, not the ask.
Reply carefully. In regulated trades a reply can be the expensive part rather than the review itself, which is not hypothetical: we documented two dental practices that settled with a federal regulator over what they wrote in public review replies.
Structured data: the smallest block that does anything
Structured data does not raise rankings. It makes your page eligible for result features, and for a local business the eligible subset is small enough to hand-write once.
LocalBusiness requires only name and address. Google's guidance is to "Use the most specific LocalBusiness sub-type possible", and schema.org has one for most trades: Plumber, Electrician, HVACBusiness, Dentist, PhotographyBusiness, GeneralContractor. Paste this into the <head> of your home page, change the values, and you are done:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Plumber",
"name": "Nolan and Sons Plumbing",
"url": "https://yourdomain.com",
"telephone": "+1-555-0142",
"priceRange": "$$",
"address": {
"@type": "PostalAddress",
"streetAddress": "1200 Grand Avenue",
"addressLocality": "Kansas City",
"addressRegion": "MO",
"postalCode": "64106",
"addressCountry": "US"
},
"openingHoursSpecification": [{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday","Tuesday","Wednesday","Thursday","Friday"],
"opens": "08:00",
"closes": "17:00"
}]
}
</script>
Validate it at the Rich Results Test before you move on. One misplaced comma silently invalidates the block, and nothing in your site will tell you.
One trap worth naming, because it is common and it is a misuse. Google's documentation says review and aggregateRating properties are "only recommended for sites that capture reviews about other local businesses". Marking up your own testimonials with a five-star rating is not an optimization, and the same rule applies whether you sell drainage work or software, which we go into for product and pricing pages.
Speed: three numbers, and how to measure them without paying
Core Web Vitals are three thresholds, published on web.dev, and they have not moved: Largest Contentful Paint within 2.5 seconds, Interaction to Next Paint of 200 milliseconds or less, Cumulative Layout Shift of 0.1 or less. All three are assessed "at the 75th percentile of page loads, segmented across mobile and desktop devices", which means your own fast laptop on office wifi tells you nothing.
PageSpeed Insights gives you both lab and field numbers in a browser. There is also an API, and the documentation states it "can be used with or without an API key, although a key is recommended for frequent, automated queries":
curl -s "https://www.googleapis.com/pagespeedonline/v5/runPagespeed\
?url=https%3A%2F%2Fyourdomain.com&strategy=mobile" \
| python3 -c "import json,sys; d=json.load(sys.stdin); \
m=d.get('loadingExperience',{}).get('metrics',{}); \
print({k: v.get('percentile') for k,v in m.items()})"
Honest caveat, tested while writing this: the keyless endpoint runs on a shared anonymous quota and returned 429 Quota exceeded on the first attempt. If you plan to script it, get a free key from the Google Cloud console and append &key=YOURKEY. For a handful of manual checks, the web interface is simpler.
The loadingExperience block is the one that matters, because it is real Chrome user data rather than a simulation. If it is missing, your site has too little traffic for field data, and you are reading lab scores. Lab scores are a debugging aid, not the metric Google assesses.
Most small business sites fail on one thing: images. Uncompressed hero photos are the usual Largest Contentful Paint culprit, and the fix is resizing before upload rather than a plugin. On image-heavy sites this is the whole game, and we broke it down for photography portfolios, where a gallery page can carry forty full-resolution files.
What to publish, and the word count myth Google kills
Every content plan you have been sold rests on a number that Google explicitly denies. From the starter guide, verbatim: "The length of the content alone doesn't matter for ranking purposes (there's no magical word count target, minimum or maximum, though you probably want to have at least one word)."
One of the pages currently ranking for this exact query tells readers that 2,000-word articles outperform 500-word articles. It cites nothing. Google's own documentation says the opposite, on a page that has been public for years.
Publish in order of distance from a sale, not in order of search volume:
| What to publish | Why it is worth the hour |
|---|---|
| One page per service, named as customers name it | The pages that convert. Usually missing or merged into one. |
| Pricing, or the honest range and what moves it | The most searched thing about you, and the one competitors hide. |
| The question customers ask before buying | Pre-sale objection handling that also ranks. |
| Comparison against the obvious alternative | High intent, low competition, and nobody in your trade writes it. |
| A location page per place you genuinely serve | Only where you have real presence. See the warning below. |
That last row is where DIY advice turns into a penalty. The standard play sold to local businesses is one near-identical page per surrounding town. Google's spam policies define doorway abuse as "when sites or pages are created to rank for specific, similar search queries" that "lead users to intermediate pages that are not as useful as the final destination", and list "multiple domain names or pages targeted at specific regions or cities that funnel users to one page" as an example. Twelve town pages differing only in a place name is the example, not an interpretation of it.
The same policies define scaled content abuse as "when many pages are generated for the primary purpose of manipulating search rankings and not helping users". Note what that turns on. The test is purpose and value, not tooling, and it applies identically to a copy-paste job and to anything generated. Nothing there prohibits publishing frequently, and nothing prohibits writing with assistance.
Getting into AI answers without buying anything new
This is where DIY advice has gone furthest off the rails in the last year, and where a first-party source saves you the most money.
Google published a generative AI optimization guide on 2026-07-10 with a section titled "Mythbusting generative AI search: what you don't need to do". It names five things as unnecessary, and vendors are currently selling at least four of them:
- llms.txt and similar files. "You don't need to create new machine readable files, AI text files, markup, or Markdown to appear in Google Search (including its generative AI capabilities), as Google Search itself doesn't use them."
- Chunking your content. "There's no requirement to break your content into tiny pieces for AI to better understand it."
- Rewriting for AI. "You don't need to write in a specific way just for generative AI search."
- Chasing inauthentic mentions.
- Overfocusing on structured data. "Structured data isn't required for generative AI search, and there's no special schema.org markup you need to add."
What the same guide says you do need is short: "To be eligible to be shown in generative AI features on Google Search, a page must be indexed and eligible to be shown in Google Search with a snippet." Indexed, and not carrying a nosnippet directive. That is a check, not a project.
Assistants outside Google follow different rules, and their crawlers do not agree with each other on whether robots.txt applies to a user-initiated fetch. If ChatGPT or Claude recommending you matters to your business, the per-crawler specifics are in our LLM SEO guide and the measurement method in how to rank on ChatGPT.
Measurement inside Google is now possible but limited. Search Console has a generative AI performance report covering AI Overviews and AI Mode. It reports impressions only, grouped by page, country, date and device. There are no clicks, no click-through rate and no query data, so anyone quoting you an AI Overview conversion rate is estimating.
The honest cost of DIY: hours, not dollars
DIY SEO is not free. It is unpaid, which is different, and the distinction decides whether you should do it.
Here is a realistic first-month budget for an owner-operator, based on the work described above:
| Task | First time | Then |
|---|---|---|
| The five technical checks and their fixes | 3 to 6 hours | 30 min per quarter |
| Search Console setup and a first read | 1 hour | 20 min per month |
| Title and description audit across the site | 2 to 4 hours | 15 min per new page |
| Business Profile: categories, services, hours, photos | 2 hours | 20 min per month |
| Structured data on the home page and services | 1 to 2 hours | Once |
| Writing one genuinely useful page | 3 to 5 hours | Repeats every time |
The first five rows total roughly ten to fifteen hours, they are mostly one-off, and they are the highest-value hours in the table. Do them yourself. You will understand your own site afterwards, which no report from a provider gives you.
The last row is the one that breaks people. Three to five hours per page, repeated weekly, does not survive a busy quarter. That is not a discipline problem. It is the reason SEO retainers exist, and when we costed out what agency retainers actually buy, article production was the line item that dominated the invoice.
So the honest split is this. Technical setup, Business Profile and measurement are DIY work, permanently. Consistent publishing is the part you either protect with real calendar time or stop pretending you will do. Buying "SEO" as an undifferentiated monthly service, before you have run the five checks and read your own Search Console data, is how small businesses spend two thousand dollars a month on something they cannot evaluate.
On timing, use Google's numbers rather than an agency's. The starter guide says changes "might take effect in a few hours, others could take several months", and advises that "you likely want to wait a few weeks to assess whether your work had beneficial effects in Google Search results". Anyone quoting you a fixed window is quoting a sales figure. Results vary by site, by market and by what was already broken.
FAQ
Can I do my own SEO for my business?
Yes, and Google says so on the record: "If you run a small local business, you can probably do much of the work yourself." The technical checks, the Business Profile and the measurement setup are all within reach of an owner with a free afternoon. The part that reliably defeats people is not difficulty, it is publishing consistently for months.
Can I do SEO myself for free?
The tools are free. Search Console, the URL Inspection tool, PageSpeed Insights, the Rich Results Test, Google autocomplete and your own analytics cost nothing and cover everything in this article. Paid keyword tools buy convenience and competitor data, not access. What SEO costs you is hours.
What are the 3 C's of SEO?
It is a mnemonic from marketing blogs, usually given as content, code and credibility, and Google has never published anything of the kind. There is no harm in it as a memory aid, but do not treat it as a framework. Google's own documentation is organised around crawling, indexing and serving, and that is the model worth learning.
How long before DIY SEO shows results?
Google's starter guide says some changes "might take effect in a few hours, others could take several months", and recommends waiting a few weeks before judging. Fixing a blocked robots.txt can show up quickly. Building topical coverage from nothing does not. No one can guarantee a #1 ranking on Google, and any provider offering a timeline with a number on it is selling certainty that does not exist.
Does paying for Google Ads help my organic ranking?
No. Google states it plainly: "Advertising with Google won't have any effect on your site's presence in our search results. Google never accepts money to include or rank sites in our search results." The two channels are worth running together for other reasons, and the trade-off is a budget question rather than a ranking one.
When should I stop doing SEO myself?
When the recurring work, rather than the setup, is what is not happening. If your technical checks are clean, your Business Profile is complete and your Search Console shows impressions on pages you have not touched in six months, the bottleneck is publishing volume. That is the point to buy production capacity specifically, rather than a bundled monthly service you cannot audit.
Get cited by ChatGPT. Rank on Google.
You found this article through search. That is the whole product.
- One researched article a day
- Published on your own domain
- Keywords checked against live results
Get cited by ChatGPT. Rank on Google.
You found this article through search. That is the whole product.
- One researched article a day
- Published on your own domain
- Keywords checked against live results
