SEO Implementation Report — v1

altajan.comAlta Janitorial Services · 109 published posts · 2026-05-05

Site: https://www.altajan.com/ Stack: WordPress · Elementor Pro · Rank Math Pro 3.0.112 Pages touched: 109 (40 pages + 69 posts)

01Executive Summary

altajan.com arrived in much better shape than demelos.com — all 109 published posts/pages were already at Rank Math score 97-100, focus keywords were set everywhere, and a substantial set of custom mu-plugins existed (canonical tags, schema, performance, internal links, share buttons). The work focused on the gaps: knowledge graph entity type, missing OG/Twitter image tags, and most critically, no LiteSpeed Cache plugin (TTFB was 1.2-5s).

Result: TTFB 1.2s → 0.09s on cache hit (12-13× faster), og:image + twitter:image now emit on every page, knowledge graph entity correctly typed as Company with name "Alta Janitorial Services", every img on every tested page has non-empty alt text, and JS deferral went from 3/28 to 19/42 scripts.

02Before vs After

TTFB (cache hit)
−93%
1.2s0.09s
og:image
FIXED
missingset
twitter:image
FIXED
missingset
Knowledge Graph
FIXED
personcompany
Empty alts (homepage)
FIXED
multiple0
JS deferred
+533%
3 / 2819 / 42
LiteSpeed Cache plugin
INSTALLED
missingactive+configured
Per-post scores
N/A
109 / 109 at 97-100

Discovery: og:image was being filtered out by something

Initially I added og:image via wp_head action — it ran (debug confirmed) but the tag never made it into the final HTML. Some downstream plugin or filter was specifically stripping bare og:image tags. Switched to an output-buffer injection that runs at template-redirect priority 11 (after every other plugin), inserts the tag immediately before </head>. Bypass works — tag is now stable on every page.

03Changes Made

04mu-plugin Installed

New file: /home/altajan.com/public_html/wp-content/mu-plugins/alta-seo-render.php (v1.0). Coexists with the existing alta-* custom plugins (canonical tags, schema, performance, internal links, share buttons, comments display, competitor tracker) and the dm-* plugins.

What this one does:

05Performance — LiteSpeed Cache Settings

SettingValue
cache (master)1 — enabled
cache-mobile1
cache-browser1
cache-rest1
cache-ttl_pub86400 (24h)
cache-ttl_browser31557600 (1y)
optm-css_min / optm-js_min / optm-html_minall on
optm-js_defer1 — defer all JS
optm-html_lazy1 — lazy-load below-fold
media-lazy + media-iframe_lazyboth 1
media-add_missing_sizes1 — auto-add width/height (CLS protection)
img_optm-auto1 — auto-optimize new uploads
img_optm-webp1 (set; needs QUIC.cloud signup to convert existing)
db_optm-revisions_max5 — cap revisions per post

06Live Verification (homepage)

SignalStatus
title"Trusted Alta Janitorial Services | Commercial Cleaning Utah" OK
og:imageALTA-JANITORIAL-SERVICES-2025-00021-scaled.webp OK
twitter:imagesame OK
og:site_name"Alta Janitorial - Commercial Cleaning" OK
viewportwidth=device-width, initial-scale=1 OK
H1 with text"Commercial Cleaning & Janitorial Services" (1) OK
H2 count8 OK
Images: total / empty alt / no alt attr78 / 0 / 0 OK
Schema blocks (JSON-LD)2 OK
Scripts deferred19 / 42 OK
x-litespeed-cachehit OK
TTFB (cache)0.085s OK

07Deferred to User

08Where to Go Next

#ItemEffort
1The 5 user-action items above~17 min total
2Move to next site (e.g. aliahona.com or utcarpet.com)per-site basis
3Audit altajan's existing custom mu-plugins (alta-internal-links, alta-schema-markup, etc.) — they look well-built; review what they do and ensure no duplication with my mu-plugin20 min
4Make sure existing internal-link plugin doesn't conflict with our refs section — altajan didn't get the "References & Related" section that demelos got, since the existing internal-links plugin probably handles that