The monthly report shows numbers without explaining them
A report that shows ranking positions and traffic charts without connecting either to a specific action is a status update dressed up as accountability. Ask yourself what you learned from last month's report that you didn't already know. If the answer is nothing, the agency is reporting on outcomes it can't explain or claim credit for. Ask for causes.
A useful report ties a metric to a decision. "Impressions for [topic] rose 40% after we published the comparison page and internal-linked it from the three highest-traffic service pages" tells you what happened and why. "Rankings improved for 12 keywords" tells you nothing you can act on, verify, or learn from. If every report reads like the second version, you're paying for measurement rather than strategy.
Traffic moves, but nobody can say why
This is subtler than a stagnant account, and it catches people off guard because the graph looks fine. Organic sessions are up. Impressions are up. But when you ask what specifically drove the increase, the answer is vague: "the content is performing well" or "Google likes the changes we made." An agency that understands its own work can trace a specific page, a specific technical fix, or a specific set of new pages back to a specific lift. If growth is happening but nobody on the account can explain the mechanism, either they are not tracking their own work closely enough to know, or the growth is coming from something unrelated to what you are paying for, like seasonality or a competitor pulling back. Ask what drove it.
Work With John
If your site isn't bringing in inquiries, that's fixable.
I work with US service businesses and B2B brands on SEO, websites and lead follow-up. On a free strategy call, I'll tell you what's holding your site back, without a sales pitch.
Get a Free AuditYou don't know what they did last month
Ask a simple question: what three things did you do for my site in the last 30 days? If the answer requires them to go and check, that's a problem. Nobody needs perfect recall, but a real SEO program has a small number of concrete actions each month, and the person running your account should be able to name them without opening a spreadsheet. Vagueness at this level usually means the account is being managed by volume, ten clients running the same generic checklist, rather than by a person who is thinking about your site. Ask for three things.
The strategy hasn't changed since the contract started
SEO work should shift as data comes in. Month one might focus on technical cleanup and indexation. Month four should look different once you know which pages are gaining impressions but low clicks, which topics are ranking on page two, and which service lines are underrepresented in the content. If the monthly plan reads the same in month eight as it did in month one, either your site had no real issues to begin with, which is unlikely for most service businesses, or nobody is looking at the data closely enough to adjust course. Static strategy over a long stretch is one of the clearest signs your SEO agency isn't working the way an active engagement should. Plans should change.
Link building is described but never disclosed
If your package includes "authority building" or "link acquisition," you are entitled to see exactly where those links are placed. Insist on it. Link quality determines whether the work helps your rankings or eventually triggers a manual action against your domain. An agency that won't give you a list of placed links, or that responds with generalities about "high-authority sites" when you ask for specifics, is either buying cheap links from networks they don't want you to inspect, or not building links at all and billing for a line item that doesn't exist. Either way, you need the list.
How to check the account yourself before you say anything
Before you raise any of this with your agency, spend twenty minutes checking a few things yourself. You do not need special tools or technical training, and doing this first means you walk into the conversation with evidence instead of a feeling. Start with Search Console.
Open Search Console and look at the Performance report for the last twelve months. Sort by impressions and look at pages that get meaningful impressions but a low click rate. Those are pages ranking somewhere on page one or two for real search volume that are not converting that visibility into clicks, usually because the title or meta description does not match what the searcher is looking for. If your agency's monthly reports never mention this data, that is itself a sign, since this is one of the more actionable signals in the account and costs nothing to check. There's more on reading keyword opportunities inside your own Search Console data, which walks through the same process in more depth than fits here.
Next, check your backlink profile with a free tool rather than taking the agency's word for what has been built. You aren't trying to become a link analyst in an afternoon. You are looking for two things: does the number of referring domains roughly match what you have been told, and do the domains that show up look like real, relevant sites rather than a list of directories and foreign-language blogs with no connection to your industry. A mismatch between what you were told and what a free checker shows is worth a direct question rather than an accusation, since tools disagree with each other at the margins. But a large gap is informative.
Finally, pull up your own site in an incognito browser and search your top five service terms plus your city or category. Look at what is ranking above you. If it is the same three competitors it was a year ago and nothing about your own listing has changed, that tells you something the reports have not.
How a competent agency drifts into this pattern
It's worth understanding the mechanism, because almost nobody starts an engagement planning to underperform. The usual path is account growth outpacing staffing. An agency signs its fifteenth client on the same monthly fee it charged its first, without adding a proportional amount of strategist time, because the sales side of the business scales faster than the delivery side. The account manager assigned to your business is also assigned to nine others. The analysis work, the part where someone sits with your Search Console data and decides what to do next, gets compressed into thirty minutes a month instead of the several hours it needs. Attention runs thin.
From there, the checklist takes over. A junior team member has a template for a monthly content plan, a template for link outreach, a template for a technical audit, and applies the same template regardless of what your specific account needs. Nobody is being dishonest. The system has replaced judgment with process, and process without judgment produces exactly the symptoms above: reports that describe activity without causation, strategy that doesn't shift, and answers that come from a dashboard rather than a person who looked at your site this month. Recognizing this matters because the fix may be something other than "find a better agency." Sometimes it's finding a smaller one, or an independent consultant, where the ratio of accounts to attention hasn't yet broken down the same way.
Incentives can keep the pattern going. Where salespeople are paid on new contracts rather than retained accounts, the pressure points toward closing the next deal rather than adding staff to service the ones already closed. An account that is merely adequate rarely forces a staffing change. It keeps generating revenue at a margin that would shrink if it got the attention it needed. That's what happens by default when growth is rewarded more directly than retention, so the problem is often a normal agency following its incentives rather than a bad one.
A worked example
Picture a professional services firm eighteen months into an engagement with an agency. Traffic is flat. The account has produced twenty blog posts, all published, all indexed, all sitting on page three or four of search results. Nothing is technically broken. The content is generic rather than bad, the kind of post that could belong to any firm in the category, targeting keywords with no commercial intent behind them. Nobody buys from those.
The tell isn't a crisis. It's the absence of any sign that someone looked at Search Console impression data and adjusted targeting based on what real searchers were typing. Twenty posts aimed at the same three broad terms is a production quota rather than a strategy. The better move is going back through the existing library, finding the pages already getting impressions without clicks, and rewriting their titles and introductions to match what searchers want, since those pages are already close to earning traffic. Activity isn't the same as strategy, and an agency that confuses the two can burn a year of budget with little to show for it.
A second example: a local service account with a different failure mode
The pattern shows up differently in other business types. Take a plumbing or HVAC company that signs with an agency promising to dominate local search, and the monthly report shows steady map pack visibility for the brand's own name and a handful of branded variations. That looks like progress on a dashboard, and it means little, because nobody searches for a plumber by a company name they've never heard of. The commercial terms, "emergency plumber [city]," "water heater replacement [city]," barely move, and the report never separates branded traffic from the terms that would bring in a new customer who has never heard of the business before.
The mechanism here is different from the professional services case: a local SEO program measuring the wrong baseline and never correcting for it once branded terms started propping up an otherwise flat set of numbers. The fix looks similar in spirit to the first example: separate branded from non-branded performance in every report going forward, and redirect the next quarter's work toward the specific non-branded terms that share searcher intent with paying customers, rather than terms that already happen to rank.
What normal underperformance looks like, and what doesn't
Not every quiet month is a red flag. If your site is new, if you're in a highly competitive category or if you recently launched a redesign that needs to be re-crawled, a slow few months is expected. How long SEO takes sets out a realistic timeline, because a lot of the anxiety clients feel comes from comparing their account to an unrealistic pace. What is not normal is a slow few months paired with an inability to explain why, or a strategy that never evolves even after the slow period has stretched past what the data would justify. Ask for the reason.
If you're early in an engagement and trying to figure out whether things are on track, it's worth reading through what to expect in the first month of SEO before you start comparing your account against these signs. Month one looks different from month eight, and judging a new account by month-eight standards will make you paranoid for no reason.
When these signs are there but leaving would cost you more
Sometimes it pays to stay a little longer even with two or three of these signs. That's usually when an account is mid-migration, mid-redesign, or sitting on a batch of content that was recently published and has not had time to be crawled and evaluated yet. Switching agencies resets a relationship's institutional knowledge, and a new team needs real time, often a full quarter, to understand what has already been tried and why. If the underperformance is explained by a specific, time-boxed event rather than a pattern stretching back a year, the better move is sometimes a direct conversation with a deadline rather than an exit. Ask for a written explanation of the transition and a specific date by which normal reporting should resume. If that date passes and nothing has changed, the case for leaving is stronger than it was before, and you will have a paper trail showing you gave a fair chance before walking.
What to do once you've spotted two or three of these
One of these signs alone might be a bad month. Two or three together, sustained over a quarter, is a pattern. At that point you have two real options: have a direct conversation with the agency asking for the specifics above, in writing, with a deadline, or start planning an exit. Pick one.
If you go the conversation route, be specific. Instead of "I'm not seeing results," say "I need last month's link placements, an explanation for the flat impression data on our top five service pages, and next month's plan with specific actions." A capable team will answer this in a day. A team that can't is telling you something important.
If the conversation doesn't produce real answers, the next step is understanding how to make a clean exit without losing the progress that is real, even if it's slower than promised. That process is in how to fire your SEO agency without losing your rankings, which covers the access and handoff details people usually get wrong when they leave in frustration instead of leaving carefully. And if you're evaluating a new agency to replace the old one, it's worth reading SEO contract red flags to catch before you sign first, so you don't walk into the same problem with a different logo on the invoice.
For a broader look at what realistic SEO expectations look like across every stage of an engagement, the SEO expectations hub has the rest of what I've written on pricing, timelines, and how to read your own results without relying on an agency's word for it.
Trust the instinct, then check
Bad SEO engagements usually fail because nobody checked whether the tactics were working, adjusting when they weren't, or being straight with the client about what was happening month to month. If you're reading this because something feels off, trust that instinct enough to ask the direct questions above. The answers, or the lack of them, will tell you what you need to know.
If you want a second opinion on where your account stands, a strategy call is the fastest way to get an outside read on whether what you're seeing is normal friction or a real problem with how the account is run.
