SEO
How SlaySlop checks Page Title
SlaySlop's Page titles check reads descriptive title metadata on crawled pages, links each issue to the affected URL, and keeps the signal next to other SEO metadata rows.
· by Jonas Reed

I care about the observation point. Page titles are not inferred from a sitemap filename. They are read from title metadata on pages the crawl actually opens. Lab-notebook version: request or render page, extract title, evaluate whether it looks descriptive, attach evidence, rank.
SlaySlop's glossary line for Page titles: "Checks for descriptive title metadata on crawled pages." That is the whole contract. No invented scoring theater in this article.
Outcome the check is for
You get SEO findings when crawled pages show missing, empty, weak, or otherwise non-descriptive title metadata. Each issue should link back to the affected URL. The outcome is a fix list, not a vibes-based "SEO score story" without routes.
Sibling checks in the same family include Meta descriptions, structured data, robots rules, and sitemaps. The SEO and AEO product language talks about technical signals that help crawlers index, read, and cite pages. Titles are one of those signals.
Boundaries
Read-only public scan with permission. Not a content strategy engagement. Not a guarantee of rankings. SlaySlop does not edit CMS fields. Acceptable Use still applies for whose URLs you submit.
The check does not claim to have titled every historical query-string variant on the internet. It observes the crawl set. Read the evidence URLs before you declare the whole site done.
Loading diagram.
Happy path: how the signal is observed
- Discover linked routes in the crawl context (real browser crawl for the site map where the product does that).
- Read title metadata on crawled pages.
- Flag missing or weak descriptive titles.
- Attach the page evidence.
- Rank so a blank title on a money URL does not hide under a blog archive curiosity.
Local reproduction on a host you may test:
URL="https://www.example.com/docs/getting-started"
python3 - <<'PY'
import urllib.request, re, sys
url = "https://www.example.com/docs/getting-started"
html = urllib.request.urlopen(urllib.request.Request(url, headers={"User-Agent":"SlaySlopLocalCheck/1.0"}), timeout=30).read().decode("utf-8","replace")
m = re.search(r"<title[^>]*>(.*?)</title>", html, re.I|re.S)
print(m.group(1).strip() if m else "(no title node)")
PYIf that prints empty, a framework default, or the same string you see on five unrelated templates, you are looking at the same class of problem the check is built to surface. Prefer the finding evidence over reinventing thresholds in a spreadsheet.
Pitfalls when reading the row
Client-rendered titles that appear in DevTools after a late hydration but arrive empty in the first HTML the crawler used. Templates that set og:title and forget <title>. Localized routes that keep the default-language title. Preview deployments that look perfect while production still serves Untitled.
Do not treat a single homepage title as proof for the app. Money pages and indexable docs need their own strings. Mechanisms first: which template emits the title for this route?
Triage note I actually keep
URL, observed title, expected pattern, owning template or CMS type, PR link. When the row clears in SlaySlop after deploy, paste that into the release notes. Soft product use case: the evidence link is shorter than another CSV export nobody opens.