For agencies

How to do SEO for clients

You don’t need to be an SEO shop to run SEO for clients — you need one repeatable loop you run on every client’s site. Each month: crawl the site, read the results against that client’s own Google Analytics and Search Console, and rank what’s broken by the real traffic it’s costing. Fix the most expensive problems first, recheck the same day to prove each fix, and keep every site on a weekly watch between check-ins.

That loop is the whole job. Not the whole craft — there will always be someone deeper in the technical weeds than you — but it’s the part clients pay for and stay for: knowing what’s costing them traffic, fixing it in the right order, and proving it happened. Here’s how to run it across three client sites or thirty.

The per-client loop: six steps that repeat every month. A cycle of six numbered steps. One: crawl the site — every page and link. Two: join the results with that client's own Google Analytics and Search Console. Three: rank every issue by the traffic it costs. Four: fix the top of the list. Five: recheck the same day it ships to prove the fix. Six: keep a weekly watch between passes. An arrow labelled next month returns from step six to step one — the loop repeats. This is a model diagram, not data. THE PER-CLIENT LOOP 1 Crawl the site every page and link 2 Join their Google data Analytics + Search Console 3 Rank by traffic cost the visits each issue costs 4 Fix the top of the list highest cost first 5 Recheck — prove it the same day it ships 6 Watch weekly between monthly passes next month
The per-client loop. Crawl → join with their data → rank by cost → fix → prove → watch — then run it again next month. Every client site, same six steps.

Onboard every client the same way: access without passwords

Before anything else, get read-only access to the client’s Google Analytics and Search Console: as a viewer they invite, never as a login they share.

The difference matters more than it looks. A viewer invite means you can read everything the work needs and change nothing; when the engagement ends, the client clicks remove and you’re cleanly gone. No password resets, no “who still has access to what” archaeology, no liability sitting in your password manager. It also means their data stays theirs: you’re borrowing the view, not holding the keys. The invites take each client a few minutes, and here’s the exact credential-free flow to send them. The exception worth budgeting for: the client who can’t send the invite because they don’t own the account, because Analytics sits in a former web person’s personal Google account or was never set up at all. That’s a week of back-and-forth, not a few minutes, and recovering ownership is billable onboarding work, not a favor. Either way, do it identically for every client, so your fourteenth site onboards exactly like your fourth.

The monthly pass: crawl the site, then read it against their data

Once a month per client, crawl their site: an automated pass that follows every page and link the way a search engine’s crawler does. Any SEO audit tool runs one, and free crawlers exist. Then do the step most people skip: put the results next to that client’s own traffic and rankings.

A crawl alone tells you what’s wrong: broken pages and links, slow pages, pages Google can’t find, missing basics (and if a new client’s site isn’t on Google at all, that’s its own six-cause checklist before the loop even starts). What a crawl can’t tell you is whether any of it matters. It will hand you hundreds of flags on a site of any age, and flag #212 on a page nobody has visited in over a year is not work worth billing. The signal comes from the join: match each problem to the page’s real visits in their Google Analytics and its real rankings in their Search Console. A few hundred flags collapse into a short list with numbers attached.

Honest cost warning: doing the join by hand (export the crawl, export the traffic, match page by page in a spreadsheet) works, and it eats an afternoon per client per month. At three clients that’s a cost you can budget; at thirty it’s every working day you have. Past a handful of sites the real choice is automate it or skip it (the crawl-to-traffic join is exactly the job audit tools exist to automate), and the loop dies the month you start skipping this step.

Rank every fix by the traffic it’s costing — and only sell the top of the list

Order every issue by one number, the visits the page was earning before the problem, and put your hours into the top three to five.

The tense matters: for a page that broke last month, the number is last quarter’s Analytics, not this week’s zero. The client’s services page that was pulling 900 visits a month and now returns an error sits at the top of the list. The forty tidy-up flags on pages getting none come never, or close to it. This ordering is also your protection: when a client asks why you aren’t fixing every flag on the list, the answer is a number, not a shrug: “these three are costing you traffic; the rest are costing you nothing.” Saying no to zero-cost work is the judgment call clients are actually paying for. And it’s what keeps the engagement sane: a defensible short list per client per month scales to thirty clients. An everything-list per client scales to burnout.

Prove every fix the same day it ships

Clients only believe fixes they can see. Recheck the page the moment the fix ships, and keep the before and after.

On most client sites you won’t ship the fix yourself. It goes into a ticket to their developer, their web agency, or whoever holds the WordPress admin. Write that ticket so it can’t be misread: the exact page address, the exact change, and the page’s monthly traffic attached; that number is what gets your ticket ahead of the rest of their backlog. Then recheck the day they say it shipped, not the day you filed it; the recheck is how you catch the ticket that was closed without the work being done.

The checks themselves are quick. The redirect goes live? Load the old address in a private window and watch it land on the new page. The rewritten page title ships? Re-run your crawl on that one page and see the flag clear. The hero image drops to half its weight? Re-test the page in PageSpeed Insights. The receipt is the failing result you saved at diagnosis next to today’s passing one. Operators don’t usually lose renewals because the work wasn’t done. They lose them because the work wasn’t visible.

Keep every client site on a weekly watch

Between your monthly passes, something needs to watch every client site weekly, because sites break between check-ins, and they break quietly.

The real fear list, if you run client SEO for long enough: a client’s developer ships a redesign and a keep-out switch (the hide-from-Google setting staging sites use) rides along; a plugin update breaks a section of pages; a Google update lands in one client’s niche. Every one of these surfaces weeks later as lost traffic, usually via the client’s “why is traffic down?” email, which is the most expensive possible way to find out.

The no-tool floor is a ten-minute Monday pass per client: Search Console’s Performance report on a seven-day comparison, an Analytics alert for falling organic visits, and Search Console’s own emails switched on. Those are free, though they catch pages dropping out, not broken links or slow pages. That floor holds at a handful of clients; multiply it by fifteen sites and it’s the first thing that gets skipped, which is exactly when a quiet break gets its three-week head start. This is the step to automate first.

A weekly pass per site, by hand while you’re small and automated the moment you’re not, inverts the fear list: you email them first, with the cause already named. One discipline keeps that move credible: weekly numbers wobble, so email first when the drop pairs with a cause you can point at (a new crawl flag, a page gone missing), not on every down week. A false alarm spends the same credibility a good catch earns. And when the watch flags a real drop, diagnose it the same way every time: work the traffic-drop diagnosis, pages first, then causes.

The monthly client SEO report: three sections, their numbers

Report in the client’s own numbers, in three short sections: what changed, what you fixed and proved, what’s next.

What changed is their traffic and rankings: Google Analytics and Search Console figures they can verify themselves, never a tool’s invented “SEO score” ticking from 68 to 74. What you fixed is the receipts from your same-day rechecks. What’s next is the top of the ranked list, plus, said out loud, what you’re deliberately not doing and why. One page covers it. Clients don’t renew for dashboards; they renew for “you caught it, you fixed it, you proved it.”

Start with one client site this week

None of this requires a bigger team or a deeper specialism. It requires the loop, run honestly, on a schedule. Pick your most important client and run one full pass this week: access, crawl, join, rank, fix the top item, prove it. The first pass is the slowest you’ll ever be at it.

The loop you just read is, not coincidentally, what SEO Audit Flow runs per client, with the monthly pass and the weekly watch collapsed into one automated weekly crawl, read against that client’s own Google Analytics and Search Console through the same read-only viewer access from step one. Each site gets its own fix list ranked by the traffic each issue costs, and a recheck that turns “we fixed it” into same-day proof. To feel the shape of it before connecting anything, run the free 60-second check on one client page. It needs no account, and it shows you the outside-in half of the loop.

Free · no signup

See this on your own site

Run the free 60-second check — no account, nothing to install — and see what's visible from the outside. When you're ready, connect your own Google Analytics and Search Console, read-only, and see exactly which pages lost traffic and what each issue is costing you.

Needs nothing but a URL · read-only access · revoke in one click.