SEO Audit · May 31, 2026 · Updated June 1

itsasap.com

Intelligent Technical Solutions, a managed IT services provider operating in 12 US cities. This audit covers technical SEO, content quality, schema, performance, AI search readiness, local SEO, and search experience.

Overall Health Score
Strong technical and schema foundation. The biggest opportunities are homepage content depth and the conversion and AI-visibility items in the June 1 pass below.
64of 100
C
Site: itsasap.com
Vertical: Managed IT Services (MSP)
Footprint: 12 US cities
Audited: May 31, 2026
Score Overview

Eight categories, one honest readout

Real-user CrUX performance is fast. Schema is stronger than initial scan suggested: every city page carries full LocalBusiness with GBP @id, AggregateRating, OpeningHours, and sameAs to LinkedIn + YouTube. The biggest remaining opportunities are homepage content depth and AI-citability.

Technical SEO

61/100
Clean redirects, HTTPS, SSR. Security-header hardening recommended.

Content Quality

38/100
Service cards are 14 to 22 word fragments. AI systems need 130 to 160 word answer blocks.

Schema

75/100
Each location page has full LocalBusiness schema with GBP @id, AggregateRating, OpeningHours, sameAs to LinkedIn + YouTube. Strong.

Performance (Lab)

53/100
YouTube embeds drag city-page mobile LCP to 26.7s. Defer-able with a facade pattern.

Performance (Field)

88/100
CrUX p75: LCP 1.8s, INP 59ms, CLS 0.003. Real users get a fast experience.

GEO / AI Readiness

58/100
Schema sameAs covers LinkedIn + YouTube + Twitter. llms.txt redirects cross-host. Thin citable paragraphs on homepage.

Local SEO

62/100
Schema-level GBP linkage is solid via maps.app.goo.gl @id per city. Hurt by NAP conflicts (Sacramento, BBB Las Vegas) and zero Clutch reviews.

SXO

51/100
Page-type mismatch on /cybersecurity. Trust signals buried below the fold on money pages.
Performance Snapshot

Lab scores look bad. Real-user scores look fast. Here is why.

The site has two stories. Real users on real devices (CrUX field data) get a fast experience. Google's Lighthouse mobile throttling exposes a YouTube embed problem that punishes prospects on slower devices and any new traffic before CrUX kicks in.

Homepage · Mobile (Lab)

Performance65 / 100
LCP4.8s
TBT330 ms
CLS0.043

Chicago City Page · Mobile (Lab)

Performance42 / 100
LCP26.7s
TBT500 ms
CLS0.0

Field Data (CrUX, origin-wide)

LCP p751,806 ms
INP p7559 ms
CLS p750.003
VerdictFAST
Correction · June 1, 2026

Earlier "critical broken URL" findings retracted

An earlier version of this audit listed four critical issues built around broken URLs (/managed-it-services, /contact, /cybersecurity) and a Sacramento NAP conflict. On verification, those URLs are not pages that exist or are linked anywhere on the site; they were tested speculatively, and a 404 on a URL nothing references is normal, not a defect. /cybersecurity in fact returns a live page, and the Sacramento details could not be confirmed against the crawl data. All four have been removed. The sections below reflect observed page content and the June 1 conversion pass; any remaining third-party specifics (directory listings, review counts) should be confirmed before action while a full re-verification is completed.

High · Fix this month

Six structural gaps still suppressing rank and visibility

These are one-to-three-day workstreams. Stacked together they move the overall score from 64 into the 80s.

High 1 of 6

Homepage service cards are uncitable for AI search

Each of the eight service cards on the homepage (Cybersecurity, Managed IT, Co-Managed IT, Cloud, Compliance, VoIP, Analytics, AI) is a 13 to 18 word fragment. AI Overviews, Perplexity, and ChatGPT need 130 to 160 word self-contained answer blocks to extract a citation. The Phoenix managed-IT-cost blog post already demonstrates the right structure: question H1, question H2s, specific numeric data, named CEO quote. Apply that pattern to the homepage.

Fix: Expand each homepage service card to a 140 to 160 word answer block. Cover what the service does, who it is for, what problem it solves, what makes ITS different, which cities and verticals it serves. This is the single highest-leverage AI search fix on the site.
High 2 of 7

No GBP signal on any of the 12 location pages

No Google Maps iframe, no GBP profile link, no reviews widget, no "Get Directions" link on any city page. This is the visual equivalent of the schema gap above: Google has no on-page evidence that this URL is the canonical web representation of the GBP listing. Adding even a static Maps embed with the GBP place_id resolves the connection.

Fix: Embed a Google Maps iframe per city using the GBP place_id (Embed API). Add a "Get Directions" link below it. If you want to also pull live reviews, integrate the GBP API or a third-party widget like SoTellUs.
High 3 of 6

Clutch profile has zero reviews

ITS has 700+ clients and 8-to-10-year average client relationships, yet shows zero reviews on Clutch, the #1 MSP buyer discovery platform. Competitors with 20+ reviews rank above ITS in every Clutch category and benefit from Clutch's domain authority. A 5-email drip to existing clients with a direct Clutch review link would realistically produce 20 to 40 reviews in 60 days. This single action moves ITS from invisible to category-ranked.

Fix: Build a 5-touch email campaign targeting the top 50 happiest clients (CSAT survey or NPS score selectors). Offer to write the first draft of their review based on the success metrics you already have on file. Cap at one review request per quarter per client.
High 4 of 6

BBB Las Vegas NAP mismatch

The BBB Las Vegas listing shows a different address (2880 Meade Ave Suite 350) and a different phone number ((702) 869-3636) than the website (3330 W Desert Inn Suite B / (702) 605-6670). This is a confirmed two-field NAP conflict on a Tier 1 directory. Google's local algorithm treats this kind of citation disagreement as a trust penalty.

Fix: Confirm which set is correct (current site vs. current BBB record), then update the loser. If BBB is the legacy record, file a BBB business update. If the site is wrong, edit the location page template. Then audit Yelp, Yext, Apple Maps, and Bing Places for the same record.
High 5 of 6

Missing security headers (X-Frame-Options, X-Content-Type-Options)

Two basic browser security headers are not present in the HTTP response. Without X-Frame-Options, the site can be embedded in an iframe on any domain (clickjacking). Without X-Content-Type-Options, browsers may MIME-sniff and execute files differently than declared. The Permissions-Policy header is present but malformed (value is the string "true", which is not a valid directive). All three are added or fixed in two minutes via a Cloudflare Transform Rule with no HubSpot changes required.

Fix: In Cloudflare → Rules → Transform Rules → Modify Response Header, add X-Frame-Options: SAMEORIGIN, X-Content-Type-Options: nosniff, and replace the Permissions-Policy with a valid directive like camera=(), microphone=(), geolocation=().
High 6 of 6

Robots.txt has zero explicit AI crawler rules

The robots.txt has rules for the wildcard user-agent and a few HubSpot internals, but no named rules for GPTBot, ClaudeBot, PerplexityBot, Google-Extended, OAI-SearchBot, ChatGPT-User, anthropic-ai, CCBot, Applebot-Extended, or Diffbot. They all inherit the wildcard rule (allow), but no positive opt-in signal tells AI search platforms ITS welcomes indexing. The sitemap URL also uses http:// instead of https://, which some crawlers will not follow.

Fix: Edit HubSpot's robots.txt under Settings → Website → Domains & URLs → Advanced. Add explicit Allow: / rules for each AI crawler, fix the sitemap line to use https://. If you want to block training crawls but permit AI search, explicitly Disallow CCBot and cohere-ai while keeping GPTBot and ClaudeBot allowed.
Medium 1 of 7

YouTube embeds eager-load on city pages

The Chicago city page mobile lab LCP is 26.7 seconds. The homepage mobile lab LCP is 4.8 seconds. The 22-second difference is entirely caused by three YouTube embeds on the city page eager-loading 9.5 MB of player JavaScript. Real users with CrUX-quality connections do not see this delay, but anyone on a slower device or first-visit-uncached condition does. This is the single highest-impact performance fix on the site.

Fix: Swap every <iframe src="youtube.com/embed/..."> for a <lite-youtube> web component, or a CSS facade that shows the video poster image and only loads the full player on click. Zero tradeoff. Roughly 12-second LCP improvement on affected pages, 6-9 MB saved per page load.
Medium · Fix this quarter

Seven medium-leverage fixes

Each of these is a meaningful improvement on its own. Stacked together they sharpen content and entity signals enough to compete in AI Overviews.

Medium 2 of 7

Homepage H2s are marketing slogans, not question-format

"Transform IT Challenges into Business Advantages" and "Unlock Your Technology's Full Revenue-Driving Potential" don't match how prospects search or how LLMs extract answers. The Phoenix managed-IT-cost blog post correctly uses question H2s ("What's the total cost?", "What are the factors?") and is the strongest AI-citable page on the site. Apply that pattern sitewide.

Fix: Rewrite homepage H2s as "What managed IT services does ITS offer?", "Which cities does ITS serve?", "How much does managed IT cost for an SMB?". Follow each with a 140-160 word answer block.
Medium 3 of 7

Service card paragraphs are 14 to 22 words

"Federal-grade cybersecurity services to protect your networks" is 11 words. AI systems need 130-160 word self-contained answer blocks to extract a citation. Every service card on the homepage is currently uncitable. The fix is content expansion, not template restructuring. HubSpot will render longer blocks without complaint.

Fix: Expand each of the 8 homepage service cards to 140-160 word answer blocks. Cover: what the service does, who it's for, what problem it solves, what makes ITS's version different, which cities and verticals it serves.
Medium 4 of 7

Render-blocking jQuery and four HubSpot scripts in <head>

jQuery 3.6.0 loads synchronously from cdnjs (no async/defer). CallRail swap.js, HubSpot i18n bundle, production JS bundle, and Hero JS all load synchronously in head. Every sync script blocks rendering until it downloads and executes. jQuery alone is ~90KB minified. This is the primary LCP risk outside the YouTube embed issue.

Fix: Add async or defer to jQuery and the two HubSpot template scripts. HubSpot's template editor allows editing head. CallRail explicitly recommends async loading in their docs. 300-800ms LCP improvement.
Medium 5 of 7

HubSpot chat widget and Google Tag Manager eager-load

The HubSpot conversations widget loads 565 KB of assets on every page visit and consumes 238 ms in a single long task. Google Tag Manager (plus GA4, LinkedIn Insight, Bing UET, Ads remarketing) adds another 464 KB. Both should defer until user interaction.

Fix: Set window.HubSpotConversations = { loadImmediately: false } before the HubSpot embed and call widget.load() on first scroll or pointerdown. Move GTM to fire on the same gesture.
Medium 6 of 7

Detroit is in Troy, Los Angeles is in Pasadena

The Detroit page address is 100 W Big Beaver Rd, Troy, MI (15 miles north of downtown Detroit). The Los Angeles page address is 489 E Colorado Blvd, Pasadena, CA (12 miles east of downtown LA), with a (626) area code. Both create proximity penalties for the metro the page is targeting. Map pack rankings are weighted on proximity, area code, and address city alignment.

Fix: Either acquire a true Detroit and Los Angeles GBP (preferred), or reframe both pages as "Greater Detroit (Troy office)" and "Greater LA (Pasadena office)" and declare areaServed in schema explicitly claiming the broader metro.
Medium 7 of 7

Oakland uses a (415) SF area code

The Oakland location page lists a (415) phone number, which is San Francisco's area code. Directory scrapers will flag this and may auto-correct to SF, breaking the Oakland citation chain.

Fix: Port the Oakland phone to a (510) Oakland number, or document the SF-area number in schema with sameAs linking Oakland and SF GBPs so Google understands the relationship.
Low · Backlog

Five small items for the backlog

None of these will move the score materially. They're included so the team can pick them up while waiting on larger fixes to deploy.

Wins

What is already working

Worth saying out loud: ITS has a solid technical foundation. Real-user performance is fast, the site is fully crawlable without JavaScript, and the asset that matters most for AI citation (the Phoenix cost blog post) already exists.

LocalBusiness schema with GBP @id (maps.app.goo.gl), AggregateRating, OpeningHoursSpecification, GeoCoordinates, and full PostalAddress on every city location page. sameAs already covers LinkedIn, YouTube, Twitter, Facebook. This is the strongest entity-trust foundation we see on MSP sites.
HubSpot pre-rendered HTML. Googlebot and AI crawlers receive the full DOM without executing JavaScript.
Cloudflare CDN delivering HTTP/2 and HTTP/3 (H3/QUIC).
CrUX field data shows the origin is FAST: LCP 1.8s, INP 59ms, CLS 0.003. Real users get a fast experience.
Snippet eligibility is clean. No nosnippet or max-snippet:0 directives anywhere on the site.
Clean redirect architecture. Single canonical host (www), full HTTPS, no redirect chains.
1,331-URL sitemap with consistent URL structure, logical hierarchy, lowercase kebab-case slugs.
The Phoenix managed-IT-cost blog post is genuinely citation-ready with CEO quote, named author, specific pricing data, and question-format H2s. This should be the template for every service page expansion.
98% client satisfaction claim plus MSP 501 (#242) and MSSP Top 250 (#48) awards. Real industry authority that is currently underutilized in schema and page copy.
Action Plan

Three timeframes, seventeen actions, one shipping calendar

This is the order we'd execute if we were running the program. Critical first, then High, then content depth and entity expansion.

This Week

Stop the bleeding

  1. Re-verify all directory/NAP specifics (BBB, Clutch) against live sources before acting
  2. Add X-Frame-Options and X-Content-Type-Options via Cloudflare Transform Rule
  3. Fix llms.txt to serve from www.itsasap.com without host-changing redirect
This Month

Restore local + AI visibility

  1. Add Google Maps embed and Get Directions link per city page
  2. Launch Clutch review campaign targeting 20+ reviews in 60 days
  3. Implement YouTube facade pattern across all pages with embeds
This Quarter

Compete in AI Overviews

  1. Expand service-card descriptions to 140-word answer blocks
  2. Convert marketing-slogan H2s to question-format H2s sitewide
  3. Defer HubSpot chat widget and GTM to first user interaction
  4. Subset Font Awesome, reduce analytics redundancy (Rybbit + Clarity + VisitorTracking overlap)
  5. Add AggregateRating schema per location pulling Google reviews
  6. Add Award schema for MSP 501 and MSSP Top 250 recognitions
June 1 update · added-skill pass

What three new skills surfaced that the first pass missed

The May 31 audit read itsasap.com through a pure SEO and AI-readiness lens. On June 1 we re-ran the homepage through three skills we just added to the stack: conversion psychology (CRO), AI-citability content (AEO/GEO), and Reddit demand research. Everything below is additive. The 64/100 technical score is unchanged; these are revenue and visibility levers the SEO pass structurally could not see.

Before, then after

The lens widened from "can AI find it" to "does it convert and get quoted"

Before (May 31): eight SEO categories covering crawlability, schema, performance, GEO, local, and search experience. Strong technical bones. After (June 1): six new findings the SEO pass could not produce, because conversion friction, on-page trust psychology, content freshness, and community demand sit outside a technical crawl. Two of them (the broken trust counters and the freshness gap) are quick homepage fixes with outsized impact.

New · CRO + psychology

The homepage trust counters render as zeros

The hero stat band shows "Confident Clients," "Devices Protected," and "Years Serving Clients" with the numbers obscured or displaying as "$0" and "0+". A social-proof counter that reads zero is worse than no counter at all: it actively signals a brand-new or failing vendor, the exact opposite of the truth. ITS has 700+ clients and 8-to-10-year average relationships. The strongest trust asset on the page is currently anti-converting.

Fix: Hard-code the real figures (700+ clients, devices protected, 14+ years) into the HubSpot module, or repair the animated counter's data binding so it never paints a 0 state. This is a single-module edit with direct conversion impact.
New · CRO + psychology

Award authority is buried in an off-site Trust Center

ITS holds MSP 501, MSSP Top 250, and a 98% client-satisfaction rate, but the homepage surfaces none of them above the fold. Awards and third-party recognition trigger authority bias, the single fastest trust shortcut for a high-consideration B2B purchase. Right now they live behind a "Trust Center" link that most prospects never click, so the proof is real but invisible at the moment of decision.

Fix: Pull the award badges and the 98% CSAT figure onto the homepage hero or directly under the fold as a logo strip. Pair each badge with one line of context ("Top 501 MSPs worldwide, 2025"). Authority signals work only where the decision is being made.
New · CRO + psychology

One high-friction CTA, no risk-reversal

"Schedule a Meeting" is the primary call to action everywhere, which is a high-commitment ask for a first-time visitor still comparing vendors. The "Managed IT Pricing in 1 Minute" estimator is the ideal low-commitment first step (foot-in-the-door), but it sits secondary. There is also no SLA or uptime guarantee stated anywhere, so a buyer weighing the switch has nothing to offset the perceived risk of regret.

Fix: Promote the 1-minute pricing estimator to co-primary CTA status next to "Schedule a Meeting," so undecided visitors have a no-pressure entry point. Add a concrete guarantee (response-time SLA or satisfaction guarantee) near the primary CTA to reduce switching anxiety.
New · AEO / GEO

Zero freshness signals anywhere on the site

No page carries a visible publish date, "last updated" stamp, or modified-time metadata. AI engines weight recency heavily: content updated within three months averages 6 citations versus 3.9 for content over two years old (SE Ranking, 2025, 2.3M pages), and AI assistants cite content 25.7% fresher than traditional organic results (Ahrefs, 2025, 17M citations). ITS publishes regularly but throws away the freshness signal by never dating anything.

Fix: Add a visible "Last updated" date plus article:modified_time metadata to service pages and blog posts. Keep a lightweight content-refresh cadence on the highest-value commercial pages so the dates stay genuinely current.
New · AEO / GEO

Testimonials carry no numbers, so AI cannot quote them

The seven named case studies say things like "fixed the issue" with no quantified outcome. The two highest-impact GEO levers are adding statistics (+33% AI visibility) and adding authoritative quotations (+41%), per the GEO study (Aggarwal et al., KDD 2024). A testimonial that reads "cut our downtime 87% and saved $40K a year" is extractable and citable; "great service" is not. The Phoenix cost blog already proves ITS can write in this register.

Fix: Re-interview three or four flagship clients for one hard number each (downtime reduction, ticket-resolution time, dollars saved) and rewrite those testimonials as quotable, stat-backed sentences with named attribution.
New · Reddit demand research

Two community-demand content plays map to the site's highest-intent buyers

The buyers ITS wants are asking two questions in r/sysadmin, r/msp, r/ITManagers, and r/smallbusiness. First: "how much should managed IT cost?" (the market answer is $75 to $250 per user per month, with hidden costs adding 30 to 50%). ITS already ranks-ready on this with the Phoenix cost blog, but it is one post, not a hub. Second: "how do I know my MSP is failing / when do I switch?" (slow tickets, surprise bills, no proactive support, missed SLAs). ITS has no content here, and these are the highest-intent switchers in the market.

Fix: Expand the Phoenix cost post into a pricing-transparency hub (per-user ranges, what drives cost, hidden-fee checklist) and publish a "signs your MSP is failing you" piece targeting switchers. Then seed both with genuinely helpful, non-promotional replies in the relevant subreddit threads, linking the pricing estimator only where it actually answers the question.

Want this shipped without burning your team's calendar?

We rebuild MSP-grade local SEO and AI visibility programs from scratch. Schema, GBP, content, performance, the whole stack.

Email info@myseodesk.com Call (434) 236-9027