14 SEO Mistakes Every Agency Website Makes (We Made All of Them)
We made all 14. Then we fixed them. Our organic impressions went from 340 per month to 4,200 within 90 days. Here is what we changed and in what order.
We made all 14. Then we fixed them. Our organic impressions went from 340 per month to 4,200 within 90 days. Here is what we changed and in what order.
We made all 14 of these mistakes on the Striveloom website. We are not writing this post from the outside looking in. We ran our own audit in late 2025, found the same problems we now find on client sites, and spent 60 days correcting them in priority order. Organic search impressions went from 340 per month to 4,200. Clicks went from 12 to 196. That data is from our own Search Console dashboard, not from a case study we polished.
Most of these mistakes are common because they are invisible until you look for them. No one tells you that your structured data has validation errors. No one tells you that a robots.txt disallow line is blocking Google from your blog. The site looks fine in a browser. The SEO problems live in layers that only appear when you run the right tools.
Here are all 14, ranked roughly by how much impact fixing them had.
We had zero schema markup when we first audited the site. No Organization schema, no Service schema, no FAQPage schema. This meant no rich results eligibility, no entity recognition in Google's Knowledge Graph, and no AI Overview citation potential (which increasingly requires structured, well-labeled content).
Fix: Implement Organization schema on every page via the site-wide layout. Add Service schema to each service page. Add FAQPage schema to FAQ sections. Validate every type with Google's Rich Results Test before deploying. Total implementation time for a developer who knows the task: one day.
Our hero section loaded a 1.8MB PNG with no compression, no WebP conversion, and no CDN. On mobile, our Largest Contentful Paint was 4.3 seconds. The 'Good' threshold is 2.5 seconds (per web.dev, 2024). Everything above that is a signal to Google that the page delivers a poor experience.
Fix: Convert all above-the-fold images to WebP. Use Next.js Image component (or equivalent) for automatic format selection and lazy loading below the fold. Add a CDN layer if not already present. Our LCP dropped to 1.7 seconds after these changes alone.
Our navigation menu and a promotional banner both appeared after the initial paint, pushing content down and creating a Cumulative Layout Shift score of 0.22. The 'Good' threshold is under 0.1.
Fix: Reserve space for all dynamically loaded elements using explicit width and height attributes on images and fixed dimensions on banner containers. This is a CSS discipline problem more than an infrastructure problem.
Two of our service pages had canonical tags pointing to a staging domain URL that no longer existed. This told Google that the canonical version of our content was on a site that returned a 404 error. We had no idea. Screaming Frog caught it in the first crawl.
Fix: Crawl your site monthly with Screaming Frog or a similar tool and filter for canonical tag values. Any canonical pointing offsite or to a non-200 URL is a problem. Fix the canonical to point to the correct live URL.
We had a sitemap.xml file. We had never submitted it to Search Console. Google was finding our pages through crawling, but not through the declared sitemap. This meant our sitemap-driven freshness signals were not being used.
Fix: Go to Search Console, navigate to Sitemaps, and submit the full URL of your sitemap file. If you are on Next.js, the App Router generates a sitemap automatically from a sitemap.ts file. Submit it once and let Search Console track discovery.
We had meta descriptions on the homepage and three blog posts. Every other page was getting auto-generated snippets from Google, which usually meant our first paragraph rather than a crafted pitch. Google truncates at around 160 characters, so anything over that gets cut.
Fix: Write a unique meta description for every indexable page. Keep it between 130 and 160 characters. Frame it as a direct answer or a specific benefit, not a generic brand statement. This does not directly affect rankings, but it affects click-through rate, which affects traffic, which affects behavioral signals Google uses.
We had 47 images on the site with empty or missing alt attributes. This matters for two reasons: accessibility (screen readers cannot describe the image) and SEO (Google cannot understand what the image depicts without text context).
Fix: Add descriptive alt text to every meaningful image. "Hero image" is not descriptive. "Next.js development agency team working on a client dashboard" is descriptive. For decorative images, use an empty alt attribute (alt="") so screen readers skip them.
Our original blog had 11 posts. Eight were under 500 words. These posts were not earning any search visibility because they had no depth to offer. Google's Helpful Content guidance is explicit: it values content with first-hand expertise and sufficient depth to fully address the reader's question.
Fix: Write fewer posts at greater depth. Our current standard is a minimum of 1500 words per post, with a source citation, a data table, and a clear answer-first structure. We unpublished the 8 thin posts and rewrote 3 of them at full length.
Our blog had 11 posts on 11 completely different topics. No thematic clustering, no internal links between related posts, no pillar pages. From Google's perspective, the site had no topical authority in any subject area. It looked like a random collection of content.
Fix: Build a topic cluster map. Pick 3 to 5 core topics your agency wants to rank for. Write a pillar post for each topic (2000-plus words, comprehensive). Write 4 to 8 spoke posts on related subtopics. Link spokes to the pillar and link the pillar to each spoke. Repeat.
Our homepage linked to About, Contact, and Blog. It did not link to any of our service pages with keyword-rich anchor text. This meant the page with the most inbound link authority on our domain was not distributing that authority to the pages we needed to rank.
Fix: Add at least 5 descriptive internal links from the homepage to key service pages. Use anchor text that reflects the keyword you want each service page to rank for. Not "click here." Not "learn more." "Next.js web development services" or "AI-powered marketing automation."
We had service pages with titles like "What We Do" and "Our Services." These titles had no keyword targeting behind them. No one is searching "what we do digital agency."
Fix: Run keyword research for each service you offer. Find the phrase that people actually type when looking for that service. Build service pages around those phrases in the title, URL, H1, and first paragraph.
Every claim we made in our blog posts was unsourced. Google's E-E-A-T framework rewards content that demonstrates expertise through external sourcing, among other signals. Our posts read like opinion with no research backing.
Fix: For every factual claim in a post, trace it to a named source (a study, a platform's official data, a credible publisher). Cite the source inline and list it in a sources section. This is standard practice in quality editorial content.
Our blog posts had no author byline, no bio, and no author-level E-E-A-T signals. From Google's perspective, the content had no human behind it.
Fix: Add an author schema to every post. Include a real name, a job title, a brief bio, and a link to a profile or LinkedIn. This is a lightweight change with meaningful trust implications.
We were not monitoring Search Console at any regular interval. We had manual action flags that had been sitting unaddressed. We had crawl errors on pages that we thought were indexed. We had no idea because we were not looking.
Fix: Block 20 minutes every Monday to review Search Console. Check the Coverage report for new errors. Check the Core Web Vitals report for regressions. Check the Performance report for ranking changes on your key pages. Set email alerts for manual actions and security issues.
Running through this list ourselves took two dedicated weeks. The fixes took another six weeks to implement in priority order. We started with the free and fast (Search Console, canonical tags, meta descriptions, alt text), then moved to structured data, then content depth, then Core Web Vitals.
The results were not instant, but they were real. Organic impressions from 340 to 4,200 within 90 days. We cannot attribute every impression to every fix because we were making multiple changes simultaneously. But the timing correlation is hard to argue with.
If you want help running the same audit on your agency site, our SEO and technical audit service uses the exact checklist above. We deliver a prioritized fix list within five business days and can execute the technical fixes or hand them off to your team.
The mistakes are not unusual. The willingness to audit your own site without ego is.
The fastest, free fixes are: configuring Google Search Console (30 minutes), submitting your XML sitemap (5 minutes), adding alt text to all images (1-2 hours), writing meta descriptions for every page (2-3 hours), and adding internal links from the homepage to service pages (1 hour). These changes cost nothing and remove obstacles Google uses to deprioritize pages. Most agencies can complete all five in a single focused afternoon.
Technical fixes like canonical tags, structured data, and internal links typically produce measurable impression movement within 30 to 60 days as Google recrawls the affected pages. Core Web Vitals improvements show up in Google's assessment within 28 days of the field data updating. Content depth improvements take longer because new or expanded content needs to be crawled, indexed, and evaluated over multiple ranking cycles. Expect 60 to 90 days for most content-related ranking changes to appear.
Structured data is not a confirmed direct ranking factor, but it is required for rich result eligibility (FAQ dropdowns, star ratings, etc.) and is increasingly associated with AI Overview citation. Google's documentation is clear that valid structured data helps with entity understanding and search feature eligibility. FAQPage schema in particular can visually dominate a SERP listing, improving click-through rate without changing the underlying ranking position. It is low-effort and high-upside.
Google Search Console is mandatory and free. Screaming Frog's SEO Spider crawls the site and surfaces canonical errors, missing alt text, redirect chains, and meta description lengths — the free version handles up to 500 URLs. Google's PageSpeed Insights gives Core Web Vitals field data for any URL. Google's Rich Results Test validates structured data. Between these four free tools, you can run the same 12-point audit described in our competitor analysis above. No paid tools required for the initial audit.
Service pages should be as long as they need to be to fully address the questions a prospect would have before hiring you. In practice, that means most effective service pages are between 800 and 1500 words, covering: what the service includes, who it is for, what the process looks like, what outcomes clients get, and answers to the most common questions. Under 500 words rarely provides enough depth to rank for competitive service keywords or to satisfy a prospects due diligence. Over 2000 words on a service page is often too much unless the service is highly technical.
A full technical crawl and structured data validation should happen every three months. Search Console should be reviewed weekly, or at minimum monthly. Core Web Vitals should be checked after any major site changes (new theme, new image library, new scripts). Content audits — checking whether existing posts still answer their target questions well — should happen annually at minimum. The agencies that outperform their peers in organic search treat SEO as a maintenance discipline, not a one-time project.
Founder & CEO of Striveloom. Software engineer and Harvard graduate student researching software engineering, e-commerce platforms, and customer experience. Builds the agency that ships like software — one team, one pipeline, one platform. Writes on AI agencies, web development, paid advertising, and conversion optimization.
We ran a 12-point SEO audit on 50 digital agency websites. 47 had critical failures. Here is the full dataset and what the top three did differently.
Everything a startup founder needs to know about building a website in 2026 — tech stack choices, realistic budgets, timelines, and the mistakes that kill product launches.
Mobile Lighthouse 95. Total page weight 230KB. Here is the exact Next.js build config, image strategy, font loading, and JavaScript tradeoffs that got us there.
Book a free 30-minute call to scope your project. Fixed pricing, transparent timelines.
| Cluster Type | Word Count Target | Internal Links | Update Frequency |
|---|
| Pillar page | 2000-3000 words | Links to all spokes | Every 6 months |
| Spoke post | 1200-1800 words | Links back to pillar | Every 12 months |
| FAQ post | 800-1200 words | Links to pillar + 1 spoke | As needed |
| Case study | 1000-1500 words | Links to relevant service page | No update needed |