Write an SEO report your clients can understand
Show the work done, the money spent and the measured results in a clear monthly update.
Updated 28 September 2026 · 8 min read
Many agency SEO reports are long and say little. A chart of the whole site's organic traffic, a table of 200 keyword rankings, a "visibility score" up four points. The client reads the first page, skims the rest, and still can't answer the questions they actually have: what did you do with my money, did it work, and what happens next?
When a report doesn't answer those, the client answers them on instinct, usually at renewal time. More data doesn't fix that. A fixed structure does: every piece of work listed with what it cost next to what it did, and every figure labelled as measured or modelled.
This guide sets out that structure, walks through a one-month report for one client, and covers the hardest report to write: the month where nothing moved.
Five sections every report needs
- What was done. Every change and every purchase: which page, what changed, the date, and who approved it.
- What it cost. The fee, link spend and any other spend, set against the budget, including what was left unspent.
- What moved. Measured results for each piece of work, against a baseline, on the searches that work targeted.
- What didn't. Work that hasn't moved, work that was reverted, and anything that went wrong.
- What's next. Planned work, approvals you're waiting on, and the dates when each result will next be read.
The point of the order is that cost and outcome sit side by side. A client should be able to read one row and see what a piece of work cost and what it has done so far.
Keep measured and modelled apart
Every figure in the report is one of three things:
- Measured: it happened and was counted. Clicks in Search Console, orders in Google Analytics.
- Modelled: a forecast of what something might be worth, worked out from measured inputs and some assumptions.
- Not yet measurable: the work is done but it's too early to read.
Put the label on every line. Never add a modelled figure to a measured one, and never describe a forecast as a result, however confident you are. A client who has been shown "$3,000 a month" once will remember it as a promise. The guide to forecasting SEO revenue covers how to build and label a forecast.
Be honest about attribution
Attribution means deciding what caused a result. In SEO it is rarely clean, and clients can tell when it's being stretched.
- Report each change on the searches it targeted, against the 28 days before it, not on the whole site's traffic. The guide on what to measure 30, 60 and 90 days after a change sets out the windows.
- Leave brand searches out of your wins. More people searching the client's name usually comes from their marketing, press or product, not from your title tags.
- Name the client's own changes. A sale, a price change, a new product range, a TV campaign or a site migration can all move organic revenue. Say so in the report, next to the figure it affected.
- Say "not attributed" when you can't separate the causes. You can report organic revenue for the pages you worked on. You usually can't say how much of the change was yours.
This costs you nothing in the long run. A client who has seen you write "this didn't work" believes you when you write "this did".
Per-client budgets and approvals
Each client should have, in writing, a monthly link budget, a maximum price per link, and whether unspent budget carries over. The report then shows spend against each, every month, so there is never a surprise on an invoice.
Approvals need the same care:
- List what the client approved this month, when and who approved it.
- List what is waiting for approval and the date you asked. Stalled approvals are one of the most common reasons nothing moved, and the report is the right place to say so, politely.
- If some changes go live without case-by-case approval, say which kinds, and confirm the client agreed to that.
- For every link bought, record the page, the linking site, the price, the anchor text (the clickable words) and the reason for buying it.
Ship/Scale keeps one workspace for many clients, with a budget and an autopilot switch for each client, and logs every link order with its price, page, anchor and reason.
White-label reports
A white-label report goes out under your agency's name rather than the tool's. That's normal, and clients don't need to see the tools behind the work. They do need the same honesty.
- Keep the labels. Don't rename "modelled" as "projected results" to make it sound firmer.
- Be clear about link costs. If you add a margin to links, say so or bill your fee separately. A client who later finds the same link listed for less will doubt every other number in the report.
- Keep the structure fixed. The same five sections in the same order each month make trends visible and gaps obvious.
Ship/Scale produces white-label monthly reports with what was changed on each client's site, the links placed and what they cost.
A worked example: one month for one client
A garden furniture retailer on Shopify. The agency fee is $1,500 a month. The link budget is $1,200 a month, with a maximum of $600 per link, and unspent budget doesn't carry over. This is the September report, sent on 1 October. The figures are illustrative.
"A week in the baseline" means the 28 days before the change, divided by four.
| Item | Cost | Result | Label |
|---|---|---|---|
| Done and measured | |||
| New title and meta description on /rattan-sofa-sets (2 Aug) | In fee | Day-30 window: 58 clicks on the 4 targeted searches, against 41 a week in the baseline (+17, +41%). Position 8.1 to 7.9 | Measured |
| Internal links to /corner-sofa-sets from 3 buying guides (5 Sep) | In fee | Day-14 window: 22 clicks, against 24 a week in the baseline. No clear change yet | Measured |
| Done, too early to read | |||
| FAQ section on /garden-furniture-covers (22 Sep) | In fee | Day-7 window ends 29 Sep; readable from about 2 Oct | Not yet measurable |
| 2 links to /outdoor-dining-sets (8 and 15 Sep) | $950 ($450 + $500) | No ranking change yet, as expected this early | Not yet measurable |
| Value of closing that page's gap (position 9 to 6) | About $248 a month extra revenue, risk-adjusted | Modelled | |
| Waiting | |||
| New meta descriptions for 4 product pages | In fee | Sent for approval on 18 Sep | Awaiting approval |
| Spend | |||
| Agency fee | $1,500 | ||
| Links | $950 of $1,200 | $250 unspent, doesn't carry over. A third link was priced at $620, above the $600 cap, so it wasn't bought | |
| Total | $2,450 | ||
| Context | |||
| Organic revenue on the 4 pages above (Google Analytics) | $14,200, against $12,900 in August (+$1,300). Includes the client's 12 to 19 Sep sale | Measured, not attributed |
The arithmetic behind the lines that need it:
- Title change: the baseline was 164 clicks over 28 days, so 41 a week. 58 − 41 = 17, and 17 ÷ 41 = 41%.
- Spend: $450 + $500 = $950 on links; $1,200 − $950 = $250 unspent; $1,500 + $950 = $2,450 in total.
- The modelled line: the page's main searches get about 2,900 impressions a month. Using typical click-through rates (2.1% at #9, 4% at #6, which vary by result page), moving from 9 to 6 adds 2,900 × 1.9% = about 55 clicks a month. At $9 of revenue per session from Google Analytics, that's about $496 a month, and $248 after a 50% confidence discount. The plan is about six links over three months, around $2,850 in all, which pays back in about 11.5 months on risk-adjusted revenue ($2,850 ÷ $248). That's revenue, not profit.
The "What's next" section below the table then lists the dates: the day-60 read for /rattan-sofa-sets (window ends 1 Oct), the day-30 read for /corner-sofa-sets (ends 5 Oct), the first read for the FAQ section, the pending approvals, and up to $1,200 of links in October.
Notice what the report doesn't do. It doesn't add the $248 forecast to the $1,300 revenue rise. It doesn't claim the revenue rise, which overlaps a sale. And it lists the internal links that haven't moved as plainly as the title change that has.
Reporting a month where nothing moved
Some months nothing you can measure moves enough to call. Links take months, changes wait for Google to recrawl, and approvals stall. The temptation is to fill the report with site-wide charts and scores that went up for unrelated reasons. Don't.
Instead:
- Say it in the first line. "Nothing we measured this month moved enough to call a result."
- Say why, specifically. Which windows haven't been reached yet, which changes Google hasn't picked up, which approvals are waiting, whether it's a seasonally quiet month.
- Show the work and the cost anyway. The client paid for the month and should see what it bought.
- Say what you learned. A change that didn't move after 30 days is information. Say whether you'll keep it, revert it or wait for day 60.
- Give dates. "We don't expect September's links to show before their day-60 read, in mid-November."
If several months in a row show nothing, the honest report says what you'll do differently, which may include spending less on a page that isn't going to repay it. The guide on allocating SEO budget across pages covers where the money should go instead.
Where this goes wrong
- Clients read modelled lines as promises. Keep modelled figures on their own rows, with the word "modelled" and the main assumption beside them, every month.
- Small clients have small numbers. Ten clicks a week swing wildly. Add a quarterly view so a real trend isn't lost in the noise.
- Two teams claim the same gain. If the client's own marketing team is also working on the site, agree at the start how shared results will be reported.
- Month ends don't match measurement windows. A change made on the 25th has no result by the 1st. Report each change at its latest completed window, and name the window.
- The report defends the fee instead of informing the client. Once the "what didn't move" section disappears, the rest of the report stops being believed.
The key points
Every monthly report needs five sections: what was done, what it cost, what moved, what didn't and what's next, with cost and outcome side by side. Label every figure measured, modelled or not yet measurable, never add them together, and name the client's own sales and campaigns next to any figure they could have moved. Show budget, approvals and every link bought with its price and reason. When nothing moved, say so first, say why, and give the dates when you'll know more.
Keep learning
- ShipScale9 min read
Did your website changes help? What to check next
Compare performance after 30, 60 and 90 days without mistaking normal ups and downs for lasting progress.
- ShipScale9 min read
How to estimate the sales better Google visibility could bring
Build a simple forecast from visits and customer value, and understand what it can and can't tell you.
- Scale7 min read
Where should your website improvement budget go first?
Compare the cost and estimated value of several opportunities, so you can choose what to fund.