Digital Plumbing: The Technical Foundation Every Business Needs Before Marketing Can Work

Digital Plumbing
Confirm account ownership → Connect the tools → Test the lead path → Check the recordsFollow the source labels in order. The numbered path runs across the top row, returns to the lower left, then continues right.ConfirmaccountownershipConnectthe toolsTest thelead pathCheck therecords
Working connections let the business track what happens.

Use this guide to check how people reach your business online. It helps your team catch lost calls and web requests before you pay for more visitors. It supports the Content Factory by checking the site and tools before you share and promote content.

This guide is part of Social Amplification Engine: GCT Screen and Agentic Six Phases (the goal, source material, and audience; see GCT brief). Next, explore How to QA a Personal Brand Website, or How to Do MAA (Metrics, Analysis, Action) Like a Pro.

Digital Plumbing is LSS’s name for the setup that connects your website, business profiles, contact tools, and reports. Check who controls each account, whether people can reach you, and whether the records match what happened. Use the Nine Triangles Framework to connect this setup to the wider marketing plan.

Most businesses skip digital plumbing because it is invisible to customers and unglamorous to marketers. They jump straight to running ads or posting content without realizing their Google Business Profile is unverified, their website has no conversion tracking, their Facebook pixel is firing on the wrong pages, or their Google Analytics is counting their own team as traffic. Dennis Yu calls this trying to fill a bathtub with the drain open — you can pour unlimited budget into marketing, but if the plumbing is broken, the results leak out before you can measure them.

What Digital Plumbing Includes

Digital Plumbing is not one thing — it is a checklist of technical foundations that span every platform a business touches. The major categories are outlined below.

Google Business Profile

A verified, complete Google Business Profile is the single most important piece of digital plumbing for any local business. This means the business name, address, and phone number match exactly across every platform (NAP consistency). Categories are set correctly. Business hours are accurate. Photos are real and recent — not stock images. The profile is verified through Google’s process, and the owner has admin access. Without this foundation, the business is invisible in local search and Maps results, which is where most customers start their journey.

Website Technical Health

The website must load fast (under 3 seconds), work on mobile, use HTTPS, and have a clear conversion path. Digital plumbing on the website includes proper title tags and meta descriptions on every page, schema markup (especially LocalBusiness schema for home services), a working contact form that actually delivers notifications, click-to-call links that work on mobile, and a Google Tag Manager container installed so you can add tracking without editing code. Dennis Yu’s AI Business Audit checks all of these in a single pass.

Analytics and Tracking

Google Analytics 4 must be installed and configured with the correct property, filtering out internal traffic. Google Search Console must be verified and connected to GA4. The Facebook pixel (Meta pixel) must be installed on every page with standard events firing on key actions — page views, leads, purchases. Call tracking should be in place if phone calls are a primary conversion. All of this tracking feeds into the MAA (Metrics, Analysis, Action) framework so you can actually measure whether your marketing is working.

Social Profiles and Ownership

Every social profile the business uses must be claimed, branded, and under the business owner’s control. This means the Facebook Business Page has the correct admin structure (not run solely through a former employee’s personal account), the Instagram account is converted to a professional account and connected to the Facebook page, the YouTube channel has proper branding and is connected to the website, and the LinkedIn company page exists and matches the business entity. Too many businesses discover they have lost access to their own profiles because a former VA or agency held the credentials — digital plumbing prevents this.

Domain and Email

The business must own its domain, have access to its registrar account, and use professional email on that domain (not Gmail or Yahoo for customer-facing communication). DNS records should include proper SPF, DKIM, and DMARC entries to ensure deliverability. These details matter for E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) signals that Google uses to determine whether to trust and rank a website.

Why Digital Plumbing Comes First

In the Nine Triangles Framework, Digital Plumbing sits at the base because every other triangle depends on it. You cannot run a Content Factory if your website does not render properly or your analytics cannot measure the traffic the content generates. You cannot run Dollar a Day campaigns if your Facebook pixel is not installed or your conversion events are not configured. You cannot execute an SEO Tree strategy if your site has no schema markup and Google cannot understand your entity relationships.

The most common failure mode Dennis Yu sees with small businesses is spending thousands on ads with broken plumbing. They wonder why their Facebook ads do not convert, not realizing that their landing page loads in 8 seconds on mobile, their form does not send notifications, and their Google Analytics is double-counting sessions because the tag fires twice. Fix the plumbing first, and often the marketing starts working without any additional spend.

The Digital Plumbing Audit

LSS uses a structured audit to assess the state of a business’s digital plumbing. The AI Business Audit automates much of this process, but the core checklist covers the following areas: Google Business Profile completeness and verification status, website speed and mobile usability scores, analytics installation and configuration accuracy, social profile ownership and branding consistency, domain health and email deliverability, conversion tracking implementation across all channels, and NAP consistency across directories and citations.

The SEO Audit process overlaps with digital plumbing in the technical health category but focuses more on content and linking — it is the next step after plumbing is in place. Both audits feed into the MAA loop that drives continuous improvement.

Real Examples of Digital Plumbing in Action

A digital plumbing check helps show where a business may lose requests. The examples below show how teams find and repair these gaps.

Capital City Roofing in Atlanta had a website with slow load times, no Google Business Profile verification, and misconfigured tracking. The plumbing fixes alone — before any content or ad work began — resulted in measurable improvement in organic search visibility.

Ibrahim Awad’s Personal Brand Build started with digital plumbing — setting up the website, connecting analytics, verifying the Google Business Profile, and establishing the social profiles that would receive the content produced by the Content Factory.

The AI Business Audit Process documents the exact checklist LSS uses to evaluate digital plumbing across dozens of client websites simultaneously, using AI to scale what used to be a manual, time-consuming process.

Watch: Digital Plumbing in Practice

In this training session, Dennis Yu walks through a complete digital plumbing assessment for a real business — covering trust-building, data measurement, and the technical foundations that must be in place before content and ads can work.

How Digital Plumbing Connects to Other LSS Concepts

Digital Plumbing is one branch on the SEO Tree — the architecture that connects every LSS concept to every other.

Nine Triangles Framework — Digital Plumbing is the foundation triangle. Every other triangle (content, ads, SEO, reputation) depends on plumbing being in place.

Content Factory — The Content Factory produces assets, but those assets need a technically sound website and properly connected analytics to measure their impact. Plumbing first, then production.

Dollar a Day — Running Dollar a Day campaigns requires a working Facebook pixel, conversion tracking, and a website that loads fast enough to convert the traffic you are paying for.

MAA (Metrics, Analysis, Action) — You cannot do metrics without measurement infrastructure. Digital Plumbing installs the instruments; MAA reads them.

Entity and Knowledge Graph — Schema markup, NAP consistency, and verified profiles are all plumbing tasks that directly influence whether Google recognizes your business as a trusted entity.

Website QA Audit — Once digital plumbing is installed, the website QA audit verifies that everything is actually working. The QA process checks every plumbing element documented here — GTM, GA4, Meta pixel, HTTPS, schema markup — in the context of a specific site before it goes live or after a major update. Digital Plumbing defines what needs to be in place; the website QA audit confirms it is in place.

Getting Started With Digital Plumbing

If you are not sure where your plumbing stands, start with the AI Business Audit. It will identify the gaps in minutes. From there, fix the highest-impact items first: verify your Google Business Profile, install Google Tag Manager, set up GA4 with internal traffic filtered, install the Meta pixel with lead events, and make sure your website loads in under 3 seconds on mobile. These five tasks alone will put you ahead of most small businesses competing in your market. Once the plumbing is installed, run the website QA audit to verify everything is functioning correctly before launching or promoting the site.

For structured training on digital plumbing and the full LSS framework, see the Marketing Mechanic series — particularly Episode 6 (The $20,000 Website Mistake Most Plumbers Make), which covers the most common plumbing failures Dennis Yu encounters in the field.

This is a definitive article, following the guidelines on how every major LSS concept is documented and maintained. All supporting content — case studies, meta articles (records of task runs), and related guides — links back here as the canonical reference.

Part of the Access Checklist — the nine accesses we capture before any content ships. See also why we rebuilt it in July 2026.


The skill files for this page

Every task on this page ships as a runnable skill file you can hand to an AI agent (our publishing standard). Expand any skill to copy its file, or download the whole Task Library pack (our directory of tasks and recipes; see current Task Library). 18 skills:

add-click-to-call-links-for-mobile.skill.md — Make every displayed phone number a tap-to-dial tel: link on mobile, tracked as a conversion event.
START

---
name: add-click-to-call-links-for-mobile
description: Make every displayed phone number a tap-to-dial tel: link on mobile, tracked as a conversion event.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Add Click-to-Call Links for Mobile

**Use this when** phone numbers on the site are plain text, when mobile visitors must copy-paste to call, or when call clicks aren't being measured.

## Inputs
- Canonical NAP phone number (one number, one format)
- Website edit access (header, footer, contact page, service pages)
- GTM container installed (for click tracking)

## Steps
1. Find every place a phone number renders: header, hero, footer, contact page, service pages, and any sticky bars.
2. Wrap each one in a tel: link using the canonical number (tel:+1XXXXXXXXXX format works everywhere). The visible text keeps the human-readable format from the NAP record.
3. Make the header number an easy thumb target on mobile — large enough to tap, visible without scrolling.
4. Test on a real phone: tap each instance; the dialer must open pre-filled with the correct number. Also confirm desktop behavior isn't broken.
5. Track it: in GTM, add a click trigger on tel: links firing an event into GA4 (and Contact to the Meta pixel if installed). Phone taps are conversions — measure them.
6. If call tracking with dynamic number insertion is in play, confirm the DNI script swaps the tel: link too, not just the visible text.

## Definition of done (QA checklist)
- [ ] Every displayed phone number on tested templates is a working tel: link
- [ ] Tap on a real phone opens the dialer with the correct canonical number
- [ ] Click-to-call event fires in GA4 on tap (verified in DebugView/Realtime)
- [ ] Number format on screen still matches the NAP record
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
A max-effort agent (Claude Fable 5 or a comparable OpenAI/Google model) finds every rendered number — not just the obvious ones — wraps each in a tel: link, and verifies on a real device and in GA4 DebugView, looping until the entire Definition of done passes, not 90% of instances.
It self-verifies each item against that checklist, keeps the canonical number and the inventory of tel: locations in memory so new templates get caught on later runs, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): ensure-nap-consistency-across-platforms → this → set-up-call-tracking-for-phone-conversions → create-clear-conversion-path
- Cross-links: /website-qa-audit (CTA destination checks) · /dad

END
add-schema-markup-person-localbusiness.skill.md — Implement Person or LocalBusiness JSON-LD with sameAs links to every verified profile, stitching the brand into one machine-readable entity.
START

---
name: add-schema-markup-person-localbusiness
description: Implement Person or LocalBusiness JSON-LD with sameAs links to every verified profile, stitching the brand into one machine-readable entity.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Add Schema Markup (Person/LocalBusiness)

**Use this when** the site has no structured data, schema that fails validation, or schema whose sameAs list doesn't match the live social profiles.

## Inputs
- Canonical NAP record and the live URLs of every verified profile (Facebook, Instagram, YouTube, LinkedIn, Google Maps listing)
- Real headshot (Person) or logo (LocalBusiness) hosted on the site
- Website admin access (theme header or SEO plugin such as Rank Math)

## Steps
1. Choose the type: Person for a personal brand site, LocalBusiness for a service business. A personal brand fronting a business can use both, linked (Person worksFor → LocalBusiness).
2. Build the JSON-LD. Person: name, url, image (real headshot), jobTitle, worksFor, sameAs. LocalBusiness: name, url, image/logo, telephone, address, sameAs. Name, address, and telephone must match the canonical NAP character-for-character.
3. Fill sameAs with every live, verified profile URL — Facebook, Instagram, YouTube, LinkedIn, and the Google Maps listing. No dead or unclaimed profiles.
4. Install the JSON-LD site-wide via the SEO plugin or theme header — at minimum on the homepage and About page.
5. Validate with Google's Rich Results Test and the Schema Markup Validator: zero errors, and warnings reviewed.
6. Click every sameAs URL from the rendered source to confirm each resolves to the right profile.
7. Re-run this skill whenever a profile URL changes — stale sameAs links break the entity graph.

## Definition of done (QA checklist)
- [ ] JSON-LD present in page source on the homepage (and About page)
- [ ] Validates with zero errors in Rich Results Test / Schema Markup Validator
- [ ] sameAs lists all live profiles; every URL resolves correctly
- [ ] Schema NAP matches GBP and website NAP exactly
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
A persistent agent (Claude Fable 5 or a comparable OpenAI/Google model) builds the JSON-LD, runs both validators, clicks every sameAs URL, and loops on each error until the full Definition of done passes — zero validation errors, not 90% of the checklist.
Because stale sameAs links break the entity graph, it keeps the canonical NAP and the live profile-URL set in memory and re-verifies them on every later run, logging a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing (dedicated guide "How to Set Up Schema Markup for Personal Brand Site" is queued in Gaps & Tasks to Create — high priority)
- Related (run order): ensure-nap-consistency-across-platforms → claim-and-brand-facebook-page (and the other profile skills) → this
- Cross-links: /knowledge-panel (schema is the technical leg of a panel) · /personal-brand (Phase 1) · /entity-linking

END
claim-and-brand-facebook-page.skill.md — Put the Facebook business page under the owner's control with correct admin structure, real branding, and NAP that matches the canon.
START

---
name: claim-and-brand-facebook-page
description: Put the Facebook business page under the owner's control with correct admin structure, real branding, and NAP that matches the canon.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Claim and Brand Facebook Page

**Use this when** the Facebook page is unclaimed, controlled by an ex-employee or old agency, duplicated, unbranded, or showing stale business info.

## Inputs
- Business owner's personal Facebook profile (pages are controlled through real profiles/Business Manager)
- Canonical NAP record, real cover photo, and logo or owner headshot
- Client's Meta Business Manager (create one if none exists — it also owns the pixel and ad account)

## Steps
1. Search Facebook for the business name. Identify the real page plus any duplicates or auto-generated unofficial pages; claim or merge/report duplicates so one page remains.
2. Fix control first: the owner's profile gets Full control of the page. Agencies and VAs get task-level access through Business Manager — never sole admin. Remove ex-employees.
3. Connect the page to the client's Business Manager (prerequisite for the pixel and Dollar a Day).
4. Set the page name and username/handle to match the business entity exactly, per the canonical NAP.
5. Brand it real: profile photo (logo, or headshot for personal brands), real cover photo from the business — no stock.
6. Complete the About section: canonical NAP, hours matching GBP, website link, and a first-person description of who the business serves.
7. Verify from a logged-out browser: correct name, photos, phone, address, and site link all render publicly.

## Definition of done (QA checklist)
- [ ] Exactly one page exists for the business; duplicates merged or reported
- [ ] Owner holds Full control; no ex-employee or unknown admins; agency on task access via Business Manager
- [ ] Page name and handle match the business entity; About shows canonical NAP + working site link
- [ ] Profile and cover photos are real brand assets, no stock
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
A persistent agent (Claude Fable 5 or a comparable OpenAI/Google model) hunts duplicates until exactly one page remains, fixes control before cosmetics, and verifies everything from a logged-out browser — looping until the full Definition of done passes, not 90%.
It self-checks every line — admin roles, canonical NAP, real photos — against that checklist, stores the page URL and admin structure in memory for the sameAs and Business Manager runs that follow, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): ensure-nap-consistency-across-platforms → this → convert-instagram-to-professional-account → set-up-consistent-headshots-and-bios-across-profiles → add-schema-markup-person-localbusiness (add page URL to sameAs)
- Cross-links: /dad (Business Manager + page setup feeds campaigns) · /social-amplification (Stage 1)

END
configure-https-with-no-mixed-content.skill.md — Serve the entire site over HTTPS with zero mixed-content warnings so browsers, Google, and visitors trust every page.
START

---
name: configure-https-with-no-mixed-content
description: Serve the entire site over HTTPS with zero mixed-content warnings so browsers, Google, and visitors trust every page.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Configure HTTPS With No Mixed Content

**Use this when** any page shows "Not secure," a broken padlock, or console mixed-content warnings — or when HTTPS has never been verified end-to-end.

## Inputs
- Hosting control panel access (SSL certificate management)
- WordPress admin access
- List of key templates to test: homepage, contact page, a service page, a blog post

## Steps
1. Confirm a valid SSL certificate covers both the apex domain and www, and that it auto-renews at the host.
2. Force HTTPS site-wide: 301-redirect every https:// URL to https:// (host setting or server config). Test by loading the plain https:// version — it must redirect.
3. In WordPress, set both the WordPress Address and Site Address to https://.
4. Hunt mixed content: open each key template, check the browser console for mixed-content warnings, and search page source for hard-coded https:// references in images, scripts, stylesheets, and embeds.
5. Fix offenders at the source — update URLs in content and theme settings (a search-replace on https://yourdomain works for legacy content). Re-check third-party embeds.
6. Re-test all key templates: full padlock, no warnings, no console errors. Then confirm Google Search Console tracks the https property.

## Definition of done (QA checklist)
- [ ] Valid certificate on apex and www, auto-renewing
- [ ] https:// URLs 301-redirect to https:// (tested)
- [ ] Homepage, contact, service page, and a blog post all show the padlock with zero mixed-content console warnings
- [ ] No hard-coded https:// asset references remain in source on tested templates
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
A persistent agent (Claude Fable 5 or a comparable OpenAI/Google model) sweeps template after template — load, read the console, fix the https:// reference, reload — and refuses to stop at "mostly green": it loops until every Definition-of-done item passes, not 90%.
It self-verifies against that checklist on all key templates, keeps the list of fixed offenders and tested templates in memory so later runs diff new content instead of re-auditing blind, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): ensure-proper-dns-records → this → ensure-site-loads-under-3-seconds-on-mobile
- Cross-links: /website-qa-audit (Layer 1 HTTPS check)

END
convert-instagram-to-professional-account.skill.md — Switch Instagram to a professional account connected to the Facebook page, with handle, bio, and photo matching the brand canon.
START

---
name: convert-instagram-to-professional-account
description: Switch Instagram to a professional account connected to the Facebook page, with handle, bio, and photo matching the brand canon.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Convert Instagram to Professional Account

**Use this when** the business's Instagram is still a personal account, isn't connected to the Facebook page, or carries an off-canon handle, bio, or photo.

## Inputs
- Login to the Instagram account (owner-held credentials)
- Claimed, branded Facebook page (run claim-and-brand-facebook-page first)
- Canonical headshot/logo and bio copy, plus the canonical NAP contact details

## Steps
1. In Instagram settings, switch the account type to Professional (Business for a company; Creator fits some personal brands). This unlocks insights, contact buttons, and ad eligibility.
2. Connect the account to the business's Facebook page during the professional setup (via the client's Business Manager / Meta Business Suite). Without this link, Dollar a Day can't run placements or use the account properly.
3. Set the username and display name to match the business entity as closely as the platform allows — same spelling as the canon.
4. Apply the canonical profile photo (same headshot or logo used everywhere) and write the bio in first person: who you help, where, with what proof. Add the website link.
5. Add contact options — the canonical email and phone from the NAP record.
6. Confirm in Business Manager/Business Suite that the IG account appears alongside the page, and verify the public profile from a logged-out view.
7. Add the Instagram URL to the schema sameAs list (sibling skill).

## Definition of done (QA checklist)
- [ ] Account shows as Professional with insights available
- [ ] Connected to the correct Facebook page under the client's Business Manager
- [ ] Handle, display name, photo, and bio match the brand canon; website link works
- [ ] Contact options show canonical email/phone
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
A persistent agent (Claude Fable 5 or a comparable OpenAI/Google model) runs the conversion, the Business Manager connection, and the canon pass — handle, photo, bio, contacts — as one loop, re-checking the public profile logged-out until every Definition-of-done box passes, not 90%.
It pulls the canonical headshot and bio from memory of prior runs, records the IG URL for the schema sameAs step that follows, self-verifies against that checklist, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): claim-and-brand-facebook-page → this → set-up-youtube-channel-with-proper-branding → set-up-consistent-headshots-and-bios-across-profiles
- Cross-links: /dad (IG placements) · /personal-brand (Phase 1 social profiles)

END
create-clear-conversion-path.skill.md — Help a visitor take the next useful step. Make the path clear and check where the request lands.
START

---
name: create-clear-conversion-path
description: "Help a visitor take the next useful step. Make the path clear and check where the request lands."
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Create Clear Conversion Path

Use this guide to make it easy for people to ask your business for help. A clear path helps your team get requests it can answer. Next, [check your contact form](https://local-service-spotlight.github.io/task-library/?task=ensure-working-contact-form-delivers-notifications#task-ensure-working-contact-form-delivers-notifications) to make sure those requests reach the right person.

**The path:** Visitor need → Clear action → Usable form, booking or call → Team receipt → Named next owner.

**Use this when:** a new page or offer launches, visitors struggle to contact the business, or an existing path needs repair.

## Inputs
- The page, intended visitor and useful next action from the project’s [Goals, Content, and Targeting](https://blitzmetrics.com/gct-business-strategy/) brief: the goal, source content and people it serves.
- The actual contact, booking, purchase or download destination and the responsible team. Preserve legitimate privacy, legal and navigation links.
- Access to the owning page and destination settings, plus the agreed test scope and existing measurement plan if one is in use.

## Starting state and run record

Start with one named page, its intended visitor and action, the current destination, and the person or team that must receive the request. For appointments, include the approved availability or response promise, its time zone, eligible hosts and the escalation owner when coverage is missing. Record the page URL and revision, action label, destination, controlled-test ID and time, device, link/form/call result, receiver evidence, unresolved issue, and next owner. Count clicks, accepted requests, connected calls and qualified leads separately. Compare lead rates only when real baseline and follow-up data use the same lead definition and data source over equal-length windows; traffic mix and season changes can still affect the result. This guide does not estimate sales uplift.

## First-run prompt

> Map the visitor’s path on the supplied page. Improve the main call to action and its destination within the authorized scope. Check the visible result and the actual receiving system separately. Report clicks, submitted requests and received leads as different evidence.

## Steps
1. Name the page’s intended visitor and desired result in one sentence. Choose the primary action for that journey; a service quote page and a customer-support page can have different valid actions.
2. Trace the current route from the page to the final destination. Record confusing labels, dead links, repeated questions and unnecessary detours. Do not infer the cause of low lead volume from a page glance alone.
3. Write a specific action label such as “Request a roof check” rather than a vague “Learn more” when a request is the real next step. State what happens next and any material cost or commitment accurately.
4. Place the action where it supports the page’s explanation and is reachable on mobile. Keep relevant secondary choices and accessibility controls. The source’s two-click idea is a reachability target, not a rule that every real booking or purchase must finish in two clicks.
5. Edit the supported page source and destination. Keep required fields limited to the actual business need; preserve necessary consent and disclosures. Use the true service or offer page, following the [Money Tree](https://blitzmetrics.com/money-tree/) when it applies: the site map of posts and the pages where people book or buy.
6. Before submitting a booking, compare the earliest selectable appointment with the actual promised window. Save the check time, displayed time zone, first available slot and any empty result. A calendar that loads is not proof that a visitor can book within the promise. Check that required choices are clear and cannot accept contradictory answers; mutually exclusive answers need a single-choice control. Treat a mismatch as a defect, not a reason to silently change the promise, add a host or buy a plan.
7. Test the link and form or booking flow using the authorized controlled test. Check errors, success state and mobile use. Avoid a real charge, booking or message beyond the existing test scope; label that untested portion rather than calling the whole path passed.
8. Verify receipt in the actual inbox, booking tool or customer system and identify who follows up. For a tested booking, match its ID to the assigned eligible host, saved answers and required notifications; check cancellation and reminder behavior only within the authorized test scope. A listed host or an empty availability response with an error does not prove staffed coverage. A success page or analytics event alone is not proof that the team got the request.
9. If tracking is in scope, check one appropriate received event per intended action and its consent behavior. Save the route, test evidence and measured result; compare later lead performance only with real comparable data.

## Definition of done (QA checklist)

- [ ] Each money-page opening makes the customer's situation, supported value and next buying step clear in the first 2–3 sentences, with relevant authentic proof; [opening review](https://local-service-spotlight.github.io/task-library/?task=step-7-write-hook-and-establish-context#task-step-7-write-hook-and-establish-context) is recorded, not inferred from a CTA or unmeasured conversion promise

- [ ] The page has an understandable primary action for its intended visitor.
- [ ] The route reaches the correct destination with no unnecessary dead end.
- [ ] Phone layout and required fields work, with privacy and accessibility intact; answers cannot contradict one another.
- [ ] If booking is offered, the observed slot fits the actual promised window and time zone, or the exact mismatch and coverage owner remain open.
- [ ] Any controlled booking has matching assignment, answer and receiver evidence. Untested notifications, cancellations or reminders remain explicitly unknown.
- [ ] Visitor success and team receipt have independent evidence or precise open limits.
- [ ] Tracking and business outcomes are reported separately, with an actual next owner.

## Example(s)

**Fictional teaching example.** Oak Repair’s service page says “Contact,” leading to a menu with four choices. The lesson changes the label to “Request a roof check” and links directly to the quote form. The form explains that the team will reply by the next business day, a promise supplied for this fictional exercise. A mock test record shows one successful submission and one matching receiver entry. The lesson proves how to check a path; it makes no claim about a real lead or conversion-rate increase.

**Fictional booking example.** A service promises a call within three days, but the first selectable slot is three weeks away. The page loads and the button works, yet this path fails its stated promise. Save the visible dates and time zone, then route the gap to the existing calendar owner. Do not claim a staffing, calendar-sync or subscription cause without checking it. No real appointment was booked in this example.

## Handoff and Content Factory context

Hand the route record to the named page or lead-response owner. The handoff is ready when that owner confirms the destination and response responsibility against the test ID; if confirmation is missing, record it as pending. For booking routes, the existing calendar or lead-response owner receives any promise-to-availability gap with the observation and next check. Preserve their existing follow-up record; do not open a duplicate chase or automatically put the business owner into the host rotation. Use [ensure working contact form delivers notifications](https://local-service-spotlight.github.io/task-library/?task=ensure-working-contact-form-delivers-notifications#task-ensure-working-contact-form-delivers-notifications) for a form-delivery defect or [add click to call links for mobile](https://local-service-spotlight.github.io/task-library/?task=add-click-to-call-links-for-mobile#task-add-click-to-call-links-for-mobile) for a call-link defect.

This is a setup check for **Post** in the [Content Factory](https://blitzmetrics.com/content-factory/), the process that turns real stories into useful content. A published page needs a working way for a reader to reach the business. Check that path before **Promote** sends more people to it. Promotion, spend and customer follow-up remain separately scoped work.

## When this runs

Run for a new offer or a material page, form or booking change. Later improvement uses real performance reviews on the agreed cadence; no ads or automatic schedule are created by this guide.

## First-run setup and continuity

Open the supplied task file and its linked source. Verify the project’s real inputs, account, access and output folder before work. This Markdown file is a guide; it does not install an app, connect an account, supply a subscription or create a schedule. Carry out work already authorized; do not ask for the same approval again. Keep any unsupplied destination or new action outside that scope clearly pending.

Save source IDs, versions, decisions, checked outputs and next owner in the project tracker. Before a retry, check the saved state and other workers’ changes. A model name does not guarantee memory or a running timer. Repeated work needs an actual configured trigger and durable state; one-off work can be started by the prompt above.

Keep agent media muted with volume zero before playback. If mute cannot be verified, use captions, metadata or still frames. State the limit: silent visual checks do not prove spoken-word accuracy or audio quality. Do not start sound through the user’s speakers unless explicitly asked.

## Write up the real run

For every actual attempt, [write its meta article](https://blitzmetrics.com/meta-article-prompt/) with this recipe and revision, trigger, steps performed, output evidence, measured result, gaps and next owner. Failed, blocked and partial attempts also get a written record. A draft can satisfy writing; publishing it follows the existing job scope.

Keep one stable execution ID across retries and edits. A separately scoped child task may have its own ID linked to its parent. Writing the parent’s meta record is part of that run, not an endless new chain. The [recipe and meta-article guide](https://localservicespotlight.com/meta-articles/) explains this distinction. Teaching examples are not real executions and must not enter the run count.

## Definitive article & links

- Canonical article: https://blitzmetrics.com/digital-plumbing
- Exact task: [Create Clear Conversion Path](https://local-service-spotlight.github.io/task-library/?task=create-clear-conversion-path#task-create-clear-conversion-path)
- Writing standard: [Article Guidelines](https://localservicespotlight.com/article-guidelines/)
- [Digital Plumbing training](https://blitzmetrics.com/digital-plumbing/)
- [SEO Tree](https://blitzmetrics.com/seo-tree/)

## Review and evidence still needed

The source contributor status is preserved. It is not certification of this draft or proof of account access, completed work or a live outcome. The worked example teaches the method and is explicitly fictional.
- The actual owner must supply the intended action, response promise and test scope; no conversion performance has been measured by this draft.

END
create-linkedin-page-matching-business-entity.skill.md — Set up a LinkedIn presence whose name and details exactly match the business entity, strengthening the entity graph Google reads.
START

---
name: create-linkedin-page-matching-business-entity
description: Set up a LinkedIn presence whose name and details exactly match the business entity, strengthening the entity graph Google reads.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Create LinkedIn Page Matching Business Entity

**Use this when** the business has no LinkedIn page, the page name doesn't match the legal/brand entity, or the page is orphaned under a departed employee's profile.

## Inputs
- Owner's LinkedIn profile (company pages are administered through personal profiles)
- Canonical NAP record, logo, real cover image, and canonical bio/description copy
- Website URL

## Steps
1. Search LinkedIn for existing pages with the business name. Claim or consolidate strays — one entity, one page (a second competing page is entity vandalism).
2. Create (or take over) the Company Page with the name spelled exactly like the business entity in the canonical NAP. For a pure personal brand, the person's profile serves the role — same canon rules apply.
3. Make the owner a super admin. Operators get admin roles under them; remove ex-employees.
4. Complete the profile: logo as page photo, real cover image, website URL, industry, location matching the canonical address, and a first-person About section describing who the business serves.
5. Have current team members set the page as their employer so the page accrues real affiliation signals.
6. Verify the public page from a logged-out browser: name, location, and site link all match canon.
7. Add the LinkedIn URL to the schema sameAs list and website footer (sibling skills).

## Definition of done (QA checklist)
- [ ] Page name matches the business entity name character-for-character
- [ ] Owner is super admin; no orphan or duplicate pages remain
- [ ] Location and contact details match the canonical NAP; website link works
- [ ] Logo and cover are real brand assets; About written in first person
- [ ] LinkedIn URL present in schema sameAs
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
A persistent agent (Claude Fable 5 or a comparable OpenAI/Google model) consolidates stray pages down to exactly one, sets the name character-for-character to the canon, and re-verifies the public page from a logged-out browser — looping until every Definition-of-done item passes, not 90%.
It self-checks admin roles and NAP details against that checklist, keeps the page URL in memory for the schema sameAs and footer runs that follow, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): set-up-youtube-channel-with-proper-branding → this → set-up-consistent-headshots-and-bios-across-profiles → add-schema-markup-person-localbusiness
- Cross-links: /knowledge-panel (entity validation) · /personal-brand (Phase 1)

END
ensure-nap-consistency-across-platforms.skill.md — Make the business Name, Address, and Phone identical character-for-character across every platform so Google can trust the entity.
START

---
name: ensure-nap-consistency-across-platforms
description: Make the business Name, Address, and Phone identical character-for-character across every platform so Google can trust the entity.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Ensure NAP Consistency Across Platforms

**Use this when** the business name, address, or phone number appears in more than one variant anywhere online (suite vs. ste., LLC vs. no LLC, old phone numbers).

## Inputs
- Verified Google Business Profile (run verify-google-business-profile first)
- One canonical NAP record decided with the owner: exact name spelling, exact address format, one phone number in one format
- Login access to website, GBP, and all social profiles

## Steps
1. Write the canonical NAP with the owner and freeze it: one spelling of the name (with or without LLC — pick one), one address format (Suite vs. Ste — pick one), one phone format. Store it in the client record.
2. Inventory every surface that shows NAP: Google Business Profile, website footer, contact page, About page, schema markup, Facebook page, Instagram bio, YouTube About, LinkedIn page, email signatures, and any directory listings you control.
3. Compare each surface to the canon character-for-character. Log every mismatch — "St." vs "Street" is a mismatch.
4. Fix mismatches at the source, starting with GBP and the website (footer, contact page, and the JSON-LD schema must all match).
5. Update the social profiles next, then directories you can access.
6. Re-run the comparison after edits — platform review queues (GBP especially) can silently revert changes.

## Definition of done (QA checklist)
- [ ] Canonical NAP documented in the client record
- [ ] GBP, website footer, contact page, and schema markup show identical NAP, character-for-character
- [ ] Facebook, Instagram, YouTube, and LinkedIn show the same NAP (as much as each field allows)
- [ ] Zero known surfaces still showing an old phone number or name variant
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
A persistent, max-effort agent (Claude Fable 5 or a comparable OpenAI/Google model) runs this as a diff loop: inventory every NAP surface, fix mismatches, then re-crawl days later to catch GBP review-queue reverts — repeating until every Definition-of-done box passes, not 90%.
It self-verifies character-for-character against that checklist, holds the frozen canonical NAP and surface inventory in memory so each run diffs against canon instead of starting over, and logs a meta-article example every run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): verify-google-business-profile → this → add-schema-markup-person-localbusiness (schema NAP must match) → set-up-consistent-headshots-and-bios-across-profiles
- Cross-links: /website-qa-audit · /knowledge-panel (entity consistency is the foundation of a panel)

END
ensure-site-loads-under-3-seconds-on-mobile.skill.md — Get the website loading in under 3 seconds on a mobile device, because slow plumbing wastes every ad dollar and ranking the site earns.
START

---
name: ensure-site-loads-under-3-seconds-on-mobile
description: Get the website loading in under 3 seconds on a mobile device, because slow plumbing wastes every ad dollar and ranking the site earns.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Ensure Site Loads Under 3 Seconds on Mobile

**Use this when** the site feels slow on a phone, PageSpeed Insights mobile scores are poor, or before sending any Dollar a Day traffic to the site.

## Inputs
- Admin access to WordPress (plugins, theme, media) and hosting/CDN
- Baseline measurement: PageSpeed Insights mobile run for the homepage and the top landing page
- List of the highest-traffic pages (from GA4 if installed)

## Steps
1. Baseline first (MAA: Metrics before Action): run PageSpeed Insights on mobile for the homepage and top landing pages. Save scores and load times — this is your before evidence.
2. Fix images, the usual offender: compress, serve modern formats, size to display dimensions, lazy-load below-the-fold images. Hero images shot on a phone are often uploaded at full resolution — scale them.
3. Cut render-blocking weight: remove unused plugins and scripts, defer non-critical JavaScript, drop heavy page-builder modules that load site-wide.
4. Enable caching at the host and a CDN if available; verify caching is actually serving (check response headers).
5. Re-test on PageSpeed Insights and on a real phone over cellular — the lived experience is the test that matters.
6. Repeat steps 2–4 until mobile load is under 3 seconds, then record before/after numbers in the client record (Analysis → Action complete).

## Definition of done (QA checklist)
- [ ] Homepage and top landing page load in under 3 seconds on mobile (PageSpeed Insights + real-device check)
- [ ] No unused plugins or render-blocking scripts left from the audit
- [ ] Caching/CDN confirmed serving
- [ ] Before/after measurements recorded in the client record
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
This is a literal optimization loop, so run it on a max-effort agent (Claude Fable 5 or a comparable OpenAI/Google model): re-measure PageSpeed after every fix — images, scripts, caching — and keep cutting weight until mobile load is under 3 seconds and every Definition-of-done box passes, not 90%.
It self-verifies against that checklist with fresh measurements rather than assuming a fix worked, carries the before/after baselines in memory across runs so regressions stand out, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): configure-https-with-no-mixed-content → this → write-proper-title-tags-and-meta-descriptions
- Cross-links: /website-qa-audit (Layer 1 speed check) · /maa (measure → analyze → act) · /dad (never pay to send traffic to a slow page)

END
ensure-working-contact-form-delivers-notifications.skill.md — Check that a form sends the right request to the right person. Keep proof from both ends.
START

---
name: ensure-working-contact-form-delivers-notifications
description: "Check that a form sends the right request to the right person. Keep proof from both ends."
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Ensure Working Contact Form Delivers Notifications

Use this guide to check that a web form sends each request to the right person. It helps you catch lost requests before you send more people to your site. Start with [a clear contact path](https://local-service-spotlight.github.io/task-library/?task=create-clear-conversion-path#task-create-clear-conversion-path), which picks the next step for your visitor.

**The path:** Form input → Accepted request → Team receipt → Follow-up owner.

**Use this when:** a form launches, its plugin or sender changes, or expected website requests are missing.

## Inputs
- The form URLs and IDs, supported form settings access and the approved monitored receiver.
- The actual sending service and current [email authentication setup](https://local-service-spotlight.github.io/task-library/?task=configure-spf-dkim-dmarc-for-deliverability#task-configure-spf-dkim-dmarc-for-deliverability), with access to relevant delivery logs or a named mail owner.
- The authorized test scope, clear test marker, device coverage and expected receipt window. Identify downstream customer-record, booking or automatic-reply actions before submitting.

## Starting state and run record

Start with the supplied form IDs, intended receiver, test marker, approved device scope and receipt window. For each test, record form ID and revision, marker and time, device, accepted or rejected result, matching receiver record and time, delivery delay, downstream effect, issue and next owner. The acceptance measure is a matching request at the approved destination within the agreed window; a success banner or mail-server acceptance alone does not pass. Keep tests separate from real leads and do not turn test counts into sales claims.

## First-run prompt

> Check the supplied forms end to end within the approved test scope. Fix recipient, sender or success-trigger defects at their source. Record the visitor state and actual receiver evidence separately, and keep test records distinct from real leads.

## Steps
1. Map each form to its intended receiver and follow-up team. Read the recipient, From and Reply-To settings plus any customer-system or autoresponder connections. Confirm what a test will trigger so it does not create an unrequested appointment, charge or message chain.
2. Save the current settings and prepare a clearly marked controlled test with no real customer data. Use the supplied receiver and response window; do not substitute an arbitrary personal inbox.
3. Test desktop and mobile paths within that authority. Check required-field errors, accessible labels and submission behavior. Record the form ID, time and test marker, avoiding private data in public evidence.
4. Verify the actual receiving inbox or system entry and delivery time. Inspect junk folders and mail logs when needed. A browser success message or mail-server acceptance is not the same as a message reaching the monitored inbox.
5. For a wrong recipient, update the owning form setting. For sender failure, use the site’s supported authenticated mail or provider integration and its verified domain setup. Use an owned sender address and an appropriate Reply-To; do not spoof the visitor’s address as the authenticated From identity.
6. Ensure success is shown only after the form accepts the intended request, and that errors give a useful next step. If analytics is in scope, trigger the agreed successful-submission event at that point, not merely on a button click.
7. Re-test the affected chain after each fix. Inspect actual received analytics events when included, honoring consent. A Meta Lead event applies only where its meaning and current setup match the real action; installing tracking is not mandatory to prove email delivery.
8. Save the paired visitor and receiver evidence, configured destination and next owner. Mark controlled test entries according to the system’s established process so they do not inflate lead reports; do not delete records blindly.

## Definition of done (QA checklist)

- [ ] Desktop and mobile form behavior was checked for the declared form set.
- [ ] Each accepted test has a matching receipt at the approved monitored destination within the stated window.
- [ ] Sender, recipient and Reply-To behavior are correct and authenticated where required.
- [ ] Success and optional tracking follow actual accepted submissions, with no duplicate event or false lead claim.
- [ ] Test records, downstream effects, remaining gaps and response owner are documented.

## Example(s)

**Fictional teaching example.** A quote form shows “Thanks,” but its notification still goes to a retired mailbox. The lesson updates the recipient to the business’s monitored queue and sends a marked test under a supplied test scope. The mock record pairs form TEST-01 at 10:00 with a receiver entry at 10:01. A second phone test has its own marker. Two received tests prove the lesson path, not two customer leads.

## Handoff and Content Factory context

Hand the paired form and receiver records to the named mail or lead-response owner. The handoff is accepted when that owner confirms the monitored destination and response responsibility for the tested forms; otherwise record acceptance as pending. Use [configure spf dkim dmarc for deliverability](https://local-service-spotlight.github.io/task-library/?task=configure-spf-dkim-dmarc-for-deliverability#task-configure-spf-dkim-dmarc-for-deliverability) for authentication defects or [create clear conversion path](https://local-service-spotlight.github.io/task-library/?task=create-clear-conversion-path#task-create-clear-conversion-path) when the path itself is confusing.

This is a setup check for **Post** in the [Content Factory](https://blitzmetrics.com/content-factory/), the process that turns real stories into useful content. A published page needs a working way for a reader to reach the business. Check that path before **Promote** sends more people to it. Promotion, spend and customer follow-up remain separately scoped work.

## When this runs

Run on setup and after form, mail or plugin changes. The source proposes a quarterly re-test; use that only when adopted in the project’s actual maintenance schedule with a safe test scope and monitored owner.

## First-run setup and continuity

Open the supplied task file and its linked source. Verify the project’s real inputs, account, access and output folder before work. This Markdown file is a guide; it does not install an app, connect an account, supply a subscription or create a schedule. Carry out work already authorized; do not ask for the same approval again. Keep any unsupplied destination or new action outside that scope clearly pending.

Save source IDs, versions, decisions, checked outputs and next owner in the project tracker. Before a retry, check the saved state and other workers’ changes. A model name does not guarantee memory or a running timer. Repeated work needs an actual configured trigger and durable state; one-off work can be started by the prompt above.

Keep agent media muted with volume zero before playback. If mute cannot be verified, use captions, metadata or still frames. State the limit: silent visual checks do not prove spoken-word accuracy or audio quality. Do not start sound through the user’s speakers unless explicitly asked.

## Write up the real run

For every actual attempt, [write its meta article](https://blitzmetrics.com/meta-article-prompt/) with this recipe and revision, trigger, steps performed, output evidence, measured result, gaps and next owner. Failed, blocked and partial attempts also get a written record. A draft can satisfy writing; publishing it follows the existing job scope.

Keep one stable execution ID across retries and edits. A separately scoped child task may have its own ID linked to its parent. Writing the parent’s meta record is part of that run, not an endless new chain. The [recipe and meta-article guide](https://localservicespotlight.com/meta-articles/) explains this distinction. Teaching examples are not real executions and must not enter the run count.

## Definitive article & links

- Canonical article: https://blitzmetrics.com/digital-plumbing
- Exact task: [Ensure Working Contact Form Delivers Notifications](https://local-service-spotlight.github.io/task-library/?task=ensure-working-contact-form-delivers-notifications#task-ensure-working-contact-form-delivers-notifications)
- Writing standard: [Article Guidelines](https://localservicespotlight.com/article-guidelines/)
- [Digital Plumbing training](https://blitzmetrics.com/digital-plumbing/)
- [Google Workspace DKIM setup](https://knowledge.workspace.google.com/admin/security/set-up-dkim)
- [Google Analytics DebugView](https://support.google.com/analytics/answer/7201382?hl=en)

## Review and evidence still needed

The source contributor status is preserved. It is not certification of this draft or proof of account access, completed work or a live outcome. The worked example teaches the method and is explicitly fictional.
- Real receiver evidence and authorized downstream test effects must be supplied; this authoring pass submitted no form or message.

END
set-correct-business-categories.skill.md — Select the most accurate primary and secondary Google Business Profile categories so the listing ranks for the searches that actually drive revenue.
START

---
name: set-correct-business-categories
description: Select the most accurate primary and secondary Google Business Profile categories so the listing ranks for the searches that actually drive revenue.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Set Correct Business Categories

**Use this when** a GBP's primary category is generic ("Contractor" instead of "Fence contractor"), missing, or stuffed with aspirational categories the business doesn't serve.

## Inputs
- Verified GBP with edit access
- The business's money service — the one offering that drives most revenue (from GCT: Goals first)
- List of real secondary services the business actually delivers

## Steps
1. Name the money service with the owner. The primary category must match it, not the broadest label — primary category is the strongest ranking lever on the profile.
2. In GBP, search the category picker for the most specific category that matches the money service. Pick specific over general every time (e.g., "Fence contractor," not "Contractor").
3. Add secondary categories only for services the business genuinely sells today. No aspirational categories, no stuffing — irrelevant categories dilute relevance and invite suspensions.
4. Sanity-check against winners: search the money keyword in Google Maps for the service area and note the primary categories the top 3 listings use.
5. Save and re-check after a few days — category edits go through Google review and can be rejected or reverted.
6. Record primary + secondary categories in the client record so future audits can detect drift.

## Definition of done (QA checklist)
- [ ] Primary category is the most specific available match to the money service
- [ ] Every secondary category maps to a service the business actually delivers
- [ ] No generic, aspirational, or unrelated categories remain
- [ ] Edits survived Google's review (re-checked after a few days) and are documented
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
Category edits sit in Google review for days and can be silently rejected — a persistent agent (Claude Fable 5 or a comparable OpenAI/Google model) submits, waits, re-checks, and resubmits until every Definition-of-done item passes, not 90%.
It self-verifies against that checklist, keeps the chosen primary/secondary categories and the top-3 competitor categories in memory so later runs detect drift instantly, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): verify-google-business-profile → ensure-nap-consistency-across-platforms → upload-real-photos-and-set-business-hours → this
- Cross-links: /nine-triangles (GCT: Goals decide the money service) · /website-qa-audit

END
set-up-call-tracking-for-phone-conversions.skill.md — Track calls from your site without losing the right phone route. Check the call and its record.
START

---
name: set-up-call-tracking-for-phone-conversions
description: "Track calls from your site without losing the right phone route. Check the call and its record."
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Set Up Call Tracking for Phone Conversions

Use this guide to check which calls reach your team and where they come from. This helps you spot missed calls before you pay to bring more people to your site. It follows [the contact path check](https://local-service-spotlight.github.io/task-library/?task=create-clear-conversion-path#task-create-clear-conversion-path), which shows where a visitor can call you.

**The path:** Call plan → Number routing → Controlled call → Measured outcome.

**Use this when:** phone calls matter to the business and the agreed measurement plan needs reliable source or outcome tracking.

## Inputs
- The actual business line, receiving team, hours and approved public number policy.
- An existing or authorized call-tracking provider and budget, number availability, supported website integration and account access. A purchase or new subscription is not implied by downloading this guide.
- The chosen provider’s current setup and attribution instructions, with their URL and review date. Check what the actual account supports before changing it; a missing provider or unsupported feature remains a setup dependency.
- The attribution design, approved controlled-test window, reporting destination and recording/consent policy. Keep caller details and recordings in the approved private system.

## Starting state and run record

Start with the approved business and receiving numbers, provider, source list, attribution question, controlled-test window and named phone/reporting owners. For each test, record source/page and revision, device, visible number and telephone-link target, test-call ID and time, routed line, provider record, connected/answered state, qualified outcome if the owner confirms it, integration event if in scope, issue and next owner. Measure click, call attempt, connected call, answered call and qualified lead as separate states. A test call proves routing only; compare lead rates or revenue only from real, consistently defined records and never infer sales uplift from setup.

## First-run prompt

> Configure the scoped call-tracking path with the actual provider. Check visible numbers and telephone links, forwarding and received call records. Distinguish clicks, connected calls and qualified outcomes. Do not enable recording or send new customer data to other platforms outside the approved design.

## Steps
1. Define the question to answer: calls by page, campaign, source or actual qualified outcome. Record the limits of that attribution design and whether dynamic number insertion is appropriate. A form-only business may not need this task.
2. Confirm the stable business number and the intended receiving line. Reuse or provision the authorized tracking number or pool in the actual provider, accounting for the agreed cost and ownership. Do not purchase numbers without that scope.
3. Configure forwarding, business-hours routing and fallback behavior in the provider. Keep recording off unless it is part of the authorized, reviewed policy and necessary notices/consent handling are in place. This guide does not supply a legal determination.
4. Install the provider’s supported number-swap integration at the intended source. Dynamic number insertion changes a displayed phone number for a visitor or source; test that the telephone-link target changes with the visible text. [Google Tag Manager (GTM)](https://local-service-spotlight.github.io/task-library/?task=install-google-tag-manager-container#task-install-google-tag-manager-container) can load the provider’s script when that provider supports it; it is not a required dependency for every setup.
5. Preserve the underlying identity and approved profile-number strategy. Do not blindly paste changing session numbers into schema or citations. A stable approved tracking number may be allowed by a platform’s actual rules; document the reason rather than claiming all tracking numbers always break identity.
6. Place a marked controlled test within the agreed window. Check that the intended line rings, routing and fallback work, and a matching call record appears. A telephone tap alone does not prove connection or answer.
7. Connect only the approved reporting integration. Map call states to their actual meanings and inspect received events. A browser Pixel event on a link click does not by itself attribute an offline completed call; missing provider support is a concrete integration gap.
8. Record the number map, tested source rules, call IDs, outcome definitions and privacy settings. Separate test calls from customer reports and keep unsupported attribution unknown. Hand the receiving team the actual follow-up process.

## Definition of done (QA checklist)

- [ ] The tracking design and provider scope answer a defined business question.
- [ ] Visible numbers and telephone targets agree for tested source/device cases.
- [ ] A controlled call reaches the right line and has a matching provider record.
- [ ] Connected, answered and qualified calls use distinct verified meanings in reports.
- [ ] Recording, customer-data handling, costs and any external event integration follow the actual approved design.

## Example(s)

**Fictional teaching example.** Oak Repair uses one tracked website number that forwards to its existing line. A lesson call record shows “answered, 42 seconds”; the website click log only shows that a phone link was tapped. The report counts one answered test call, not a qualified customer. Qualification remains unknown until the responsible team supplies the real outcome. No number is bought or called for this teaching example.

## Handoff and Content Factory context

Hand the routing map to the named phone owner and the state definitions to the reporting owner. The handoff is accepted when the phone owner confirms the receiving line and the reporting owner confirms the event meanings against the test IDs; otherwise leave the relevant acceptance pending. Use [add click to call links for mobile](https://local-service-spotlight.github.io/task-library/?task=add-click-to-call-links-for-mobile#task-add-click-to-call-links-for-mobile) for a broken tap target or [ensure nap consistency across platforms](https://local-service-spotlight.github.io/task-library/?task=ensure-nap-consistency-across-platforms#task-ensure-nap-consistency-across-platforms) for an identity mismatch.

This is a setup check for **Post** in the [Content Factory](https://blitzmetrics.com/content-factory/), the process that turns real stories into useful content. A published page needs a working way for a reader to reach the business. Check that path before **Promote** sends more people to it. Promotion, spend and customer follow-up remain separately scoped work.

## When this runs

Run at installation and after routing, number, website or attribution changes. Optional recurring call checks need a real test window and receiving owner; no unannounced periodic calls are created.

## First-run setup and continuity

Open the supplied task file and its linked source. Verify the project’s real inputs, account, access and output folder before work. This Markdown file is a guide; it does not install an app, connect an account, supply a subscription or create a schedule. Carry out work already authorized; do not ask for the same approval again. Keep any unsupplied destination or new action outside that scope clearly pending.

Save source IDs, versions, decisions, checked outputs and next owner in the project tracker. Before a retry, check the saved state and other workers’ changes. A model name does not guarantee memory or a running timer. Repeated work needs an actual configured trigger and durable state; one-off work can be started by the prompt above.

Keep agent media muted with volume zero before playback. If mute cannot be verified, use captions, metadata or still frames. State the limit: silent visual checks do not prove spoken-word accuracy or audio quality. Do not start sound through the user’s speakers unless explicitly asked.

## Write up the real run

For every actual attempt, [write its meta article](https://blitzmetrics.com/meta-article-prompt/) with this recipe and revision, trigger, steps performed, output evidence, measured result, gaps and next owner. Failed, blocked and partial attempts also get a written record. A draft can satisfy writing; publishing it follows the existing job scope.

Keep one stable execution ID across retries and edits. A separately scoped child task may have its own ID linked to its parent. Writing the parent’s meta record is part of that run, not an endless new chain. The [recipe and meta-article guide](https://localservicespotlight.com/meta-articles/) explains this distinction. Teaching examples are not real executions and must not enter the run count.

## Definitive article & links

- Canonical article: https://blitzmetrics.com/digital-plumbing
- Exact task: [Set Up Call Tracking for Phone Conversions](https://local-service-spotlight.github.io/task-library/?task=set-up-call-tracking-for-phone-conversions#task-set-up-call-tracking-for-phone-conversions)
- Writing standard: [Article Guidelines](https://localservicespotlight.com/article-guidelines/)
- [Digital Plumbing training](https://blitzmetrics.com/digital-plumbing/)
- [Google business representation rules](https://support.google.com/business/answer/3038177?hl=en)

## Review and evidence still needed

The source contributor status is preserved. It is not certification of this draft or proof of account access, completed work or a live outcome. The worked example teaches the method and is explicitly fictional.
- The provider-specific integration and attribution limits must be checked against the chosen product’s current documentation before configuration. No calls, purchases or legal consent determinations occurred during drafting.

END
set-up-youtube-channel-with-proper-branding.skill.md — Create and brand a YouTube channel connected to the website, ready to host the one-minute videos the Content Factory produces.
START

---
name: set-up-youtube-channel-with-proper-branding
description: Create and brand a YouTube channel connected to the website, ready to host the one-minute videos the Content Factory produces.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Set Up YouTube Channel With Proper Branding

**Use this when** the business has no YouTube channel, an unbranded default channel, or a channel stranded in a personal account nobody controls.

## Inputs
- Business owner's Google account (use a Brand Account or grant the owner channel access — never a VA's personal channel)
- Canonical headshot/logo, a real banner image, and the canonical bio copy
- At least one real video to publish (a one-minute video or the WHY video)

## Steps
1. Create or claim the channel under the owner's Google account. If others must manage it, use a Brand Account / channel permissions rather than sharing passwords.
2. Set the channel name to match the business entity (or the person, for personal brands) and claim a handle as close to the canon as available.
3. Brand it: profile photo = the canonical headshot/logo; banner = a real photo of the business or person at work, not stock.
4. Write the channel description in first person with the core topics and service area, and add the canonical contact email.
5. Add the website link in the channel's links section so the channel points home.
6. Publish at least one real video — a one-minute video answering a customer question is the standard starter — so the channel isn't an empty shell.
7. Add the channel URL to the schema sameAs list and the website footer (sibling skills).

## Definition of done (QA checklist)
- [ ] Channel exists under owner-controlled access (no password-sharing, no VA-owned channel)
- [ ] Name/handle, photo, and banner match the brand canon; no stock imagery
- [ ] Description in first person; website link live on the channel
- [ ] At least one real video published; channel URL added to sameAs and footer
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
A persistent agent (Claude Fable 5 or a comparable OpenAI/Google model) does not stop at a branded empty shell: it loops through access setup, canon branding, the website link, and a first real published video until the entire Definition of done passes, not 90%.
It self-verifies against that checklist from a logged-out view, carries the canon assets and channel URL in memory for the sameAs/footer siblings and future Content Factory uploads, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): convert-instagram-to-professional-account → this → create-linkedin-page-matching-business-entity
- Cross-links: /one-minute-video-guide (what to publish first) · /content-factory (videos flow here) · /dad (YouTube campaigns need a real channel)

END
upload-real-photos-and-set-business-hours.skill.md — Load the Google Business Profile with recent real photos (no stock) and make the posted hours match reality, including holidays.
START

---
name: upload-real-photos-and-set-business-hours
description: Load the Google Business Profile with recent real photos (no stock) and make the posted hours match reality, including holidays.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Upload Real Photos and Set Business Hours

**Use this when** a verified Google Business Profile has stock images, stale photos, an empty gallery, or hours that don't match when the business actually answers.

## Inputs
- Verified GBP with Manager or Owner access
- 10+ recent real photos from the owner's phone: owner headshot, team, storefront/vehicles, real jobs in progress, before/after shots
- The true operating hours, confirmed by the owner (including when phones are actually answered)

## Steps
1. Collect real photos only — phone-shot, recent, recognizably this business. Reject stock photography and AI-generated images on sight; they destroy trust and violate the no-stock rule.
2. Upload to the right GBP slots: logo, cover photo, then gallery photos across exterior, interior, team, and at-work categories.
3. Delete or flag outdated photos (old branding, ex-employees, previous location).
4. Set regular hours to match reality. If calls are answered beyond door hours, use the "more hours" options where applicable.
5. Add special hours for every upcoming holiday this quarter — wrong holiday hours generate the angriest reviews.
6. View the live listing on Google Maps from a phone: confirm photos render, the cover photo is the one you chose, and hours read correctly.
7. Set a recurring reminder to add fresh photos monthly — recency is a ranking and trust signal.

## Definition of done (QA checklist)
- [ ] 10 or more real photos live on the profile; zero stock or AI images
- [ ] Logo and cover photo set and rendering on the Maps listing
- [ ] Regular hours match confirmed reality; special hours set for upcoming holidays
- [ ] Outdated photos removed or flagged
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
This task never really ends — fresh photos monthly, special hours every holiday — which is exactly what a persistent agent (Claude Fable 5 or a comparable OpenAI/Google model) is for: it uploads, confirms the live Maps rendering, and loops until every Definition-of-done box passes, not 90%.
It self-verifies against that checklist (photo count, zero stock, hours match reality), remembers in memory which photos and hours shipped on prior runs so each pass only adds what is new, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): verify-google-business-profile → ensure-nap-consistency-across-platforms → this → set-correct-business-categories
- Cross-links: /website-qa-audit (no-stock-images check) · /one-minute-video-guide (same phone-real-content principle)

END
verify-domain-ownership-and-registrar-access.skill.md — Confirm the business actually owns its domain and can log into the registrar — the single point of failure under everything else in digital plumbing.
START

---
name: verify-domain-ownership-and-registrar-access
description: Confirm the business actually owns its domain and can log into the registrar — the single point of failure under everything else in digital plumbing.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Verify Domain Ownership and Registrar Access

**Use this when** onboarding any client, when nobody remembers where the domain is registered, or when a past webmaster "handled all that."

## Inputs
- The domain name(s) in use
- The business owner present (recovery may require their identity/email/payment history)
- WHOIS lookup access (any public WHOIS tool)

## Steps
1. Run a WHOIS lookup: identify the registrar, creation/expiry dates, and registrant (often privacy-masked — the registrar is the key fact).
2. Ask the owner to log into that registrar while you watch. If they can't, find who can: old webmaster, ex-agency, a defunct email. This is the moment to recover control, not during an outage.
3. If a third party holds the domain, transfer it: initiate a registrar account change or domain transfer into an account owned by the business, with the owner's email on file.
4. Harden the account: owner's current email as primary contact, two-factor authentication on, domain transfer lock on, auto-renew on with a valid payment method.
5. Check expiry: renew now if less than 6 months out. An expired domain takes the website, email, and every profile link down with it.
6. Confirm DNS management access from this account (or document where DNS is delegated) — sibling skills depend on it.
7. Record registrar, account holder, expiry date, and nameservers in the client record.

## Definition of done (QA checklist)
- [ ] Owner can personally log into the registrar account holding the domain
- [ ] Registrant/account belongs to the business, not a vendor or ex-employee
- [ ] 2FA on, transfer lock on, auto-renew on with valid payment; expiry >6 months out
- [ ] DNS management location confirmed and documented with nameservers
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
A persistent agent (Claude Fable 5 or a comparable OpenAI/Google model) treats this as the single point of failure it is: it works recovery or transfer to the end — not "emailed the old webmaster, waiting" — and loops until every Definition-of-done item passes, not 90%.
It self-verifies 2FA, transfer lock, auto-renew, and expiry against that checklist, writes registrar, nameservers, and expiry date to memory so every later DNS, email, and GSC run builds on confirmed access, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): this → ensure-proper-dns-records → set-up-professional-email-on-domain → configure-spf-dkim-dmarc-for-deliverability
- Cross-links: /personal-brand (Phase 1: register the name domain) · verify-google-search-console-and-connect-to-ga4 (DNS TXT verification needs this access)

END
verify-google-business-profile.skill.md — Complete Google's verification of the Google Business Profile and put admin control in the business owner's own hands, so the profile can rank in Maps and anchor the entity.
START

---
name: verify-google-business-profile
description: Complete Google's verification of the Google Business Profile and put admin control in the business owner's own hands, so the profile can rank in Maps and anchor the entity.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: complete
---

# Verify Google Business Profile

**Use this when** a business (or personal brand with a physical/service presence) has no verified Google Business Profile, or nobody knows which account controls it.

## Inputs
- Business owner's own Google account (never verify under an agency or VA account)
- Canonical NAP record: exact business Name, Address, Phone
- Ability to receive Google's verification (video walkthrough, postcard, phone, or email — whatever Google offers this listing)

## Steps
1. Search the exact business name on Google and Google Maps. Find the existing profile, including any unclaimed or duplicate listings.
2. If a profile exists, start "Claim this business" / "Own this business?" from the listing. If none exists, create one in the Google Business Profile manager with the canonical NAP.
3. Sign in as the business owner — the owner's Google account must end up as Primary owner. Agencies and VAs get added later as Managers, never as Primary owner.
4. Complete whichever verification method Google offers (video verification is most common now: film the storefront/vehicle/equipment and proof of business as prompted). Follow it to the end — a half-verified profile is invisible.
5. Once verified, audit Profile access: remove ex-employees and unknown accounts, demote agencies to Manager.
6. Confirm the profile data matches the canonical NAP character-for-character (this feeds the NAP consistency task).
7. Record the managing Google account and verification date in the client record.

## Definition of done (QA checklist)
- [ ] Profile shows as Verified in the Google Business Profile dashboard (no pending banner)
- [ ] Business owner's own Google account is Primary owner; access list contains no strangers
- [ ] Listing appears on Google Maps when searching the exact business name
- [ ] NAP on the profile matches the canonical NAP record exactly
- [ ] Managing account + verification date documented in the client record
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- The /digital-plumbing hub links the library's real GBP verification examples (Requirement 3). Example needed here — run the Meta-Article Prompt after the next real run.

## Run on a persistent agent (Fable 5)
Google's verification can stretch across days and methods, and a half-verified profile is invisible — a persistent agent (Claude Fable 5 or a comparable OpenAI/Google model) follows it to the end, re-checking status and access until every Definition-of-done item passes, not 90%.
It self-verifies owner, access list, and NAP against that checklist, writes the managing account and verification date to memory so every downstream GBP run builds on confirmed control, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): ensure-nap-consistency-across-platforms → upload-real-photos-and-set-business-hours → set-correct-business-categories
- Cross-links: /website-qa-audit (Layer 3 re-checks GBP verification) · /personal-brand (Phase 1) · /dad (verified plumbing is a prerequisite)

END
verify-google-search-console-and-connect-to-ga4.skill.md — Verify Search Console ownership of the domain and link it to GA4 so search queries, impressions, and clicks flow into one measurement view.
START

---
name: verify-google-search-console-and-connect-to-ga4
description: Verify Search Console ownership of the domain and link it to GA4 so search queries, impressions, and clicks flow into one measurement view.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: active
gated_by: client-access-checklist (rows 1 and 3 — this task IS row 1)
---

# Verify Google Search Console and Connect to GA4

**Use this when** nobody can see what the site ranks for, GSC is unverified or stuck in an old webmaster's account, or GA4 shows no Search Console data.

> **This task is a gate, not a nice-to-have.** No content ships to a property that hasn't cleared it.
> On 2026-06-14 we published 16 articles to a client site that had no GSC property. Six of them were
> never indexed and nobody knew for six weeks. See `Access-Checklist/RCA-2026-07-27-anthonyhilb-gsc.md`.
> Before running this task, check `Access-Checklist/ACCESS-REGISTER.json` and run
> `python3 Access-Checklist/access_audit.py --domain <domain>` — we often already hold access nobody remembered.

## Inputs
- Business owner's Google account (property ownership stays with the client)
- DNS access at the registrar/DNS host (for domain verification — see verify-domain-ownership-and-registrar-access)
- GA4 property with Editor access (run set-up-ga4-with-internal-traffic-filtering first)

## Steps
1. In Search Console under the owner's Google account, add a Domain property for the root domain (covers http/https, www/non-www, and subdomains in one property).
2. Verify via the DNS TXT record GSC provides: add it at the DNS host, wait for propagation, click Verify.
3. Audit users: owner's account holds Owner; operators added as Full users; ex-webmasters and unknown accounts removed.
4. Submit the XML sitemap (from the sitemap skill) and confirm Success status.
5. Link to GA4: in GA4 Admin → Product links → Search Console links, connect the GSC property to the GA4 property and select the web data stream.
6. In GA4, confirm the Search Console reports appear (publish the Search Console collection from the Library if hidden) and queries begin flowing — allow up to 48 hours for first data.
7. Record the verification method and property details in the client record so access never gets lost again.

## Definition of done (QA checklist)
- [ ] Domain property verified in GSC via DNS TXT, owned by the client's account
- [ ] User list audited — no stale or unknown accounts with access
- [ ] Sitemap submitted with Success status
- [ ] GSC↔GA4 link live; Search Console reports visible in GA4 with query data (within 48h)
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)

**anthonyhilb.com — the cost of skipping this task (July 2026).** We published 16 how-to guides on
June 14 to a client site we publish to but do not host. Because our GSC coverage audit took its
denominator from the hosting fleet, the site could not appear as a gap; because the client-facing
"needs your login" list was written from memory rather than from a checklist, Search Console was
never requested. Five weekly reports read "flat, content needs more time." On July 27 a direct index
check found **6 of the 16 guides had never been indexed** — including the three most commercial
topics. The same probe found no GA4 and no GTM either: 16 articles shipped into a property with zero
measurement. The fleet-wide sweep that followed found 127 more properties in the same condition,
50 of them on our own hosting.

**What the fix looked like:** build the audit denominator from work (`build_access_register.py`
merges credentials + hosting fleet + client rosters + client project folders → 265 properties, 160
of them previously invisible), probe each one from public HTML (`access_audit.py`), and run it
weekly (`access-coverage-audit`). Full write-up:
`Access-Checklist/RCA-2026-07-27-anthonyhilb-gsc.md`.

**The transferable lesson:** an audit is only as honest as its denominator. Ours reported "92 sites
not in GSC" with total confidence while being structurally incapable of seeing the site that broke.

## Run on a persistent agent (Fable 5)
DNS propagation and the up-to-48-hour wait for first query data make this a long-horizon task: a persistent agent (Claude Fable 5 or a comparable OpenAI/Google model) verifies, links, then returns to confirm data actually flows, looping until the entire Definition of done passes, not 90%.
It self-verifies each item — TXT live, users audited, GSC-GA4 link active — against that checklist, persists the verification method and property details in memory so access never gets lost between runs, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): create-xml-sitemap-and-reference-in-robots-txt → set-up-ga4-with-internal-traffic-filtering → this
- Cross-links: /website-qa-audit · /maa (GSC impressions/clicks are core Metrics) · /seo-tree (rankings prove the tree is working)

END
write-proper-title-tags-and-meta-descriptions.skill.md — Give every indexable page a unique title tag under 60 characters and meta description under 160 characters, each carrying its focus keyword.
START

---
name: write-proper-title-tags-and-meta-descriptions
description: Give every indexable page a unique title tag under 60 characters and meta description under 160 characters, each carrying its focus keyword.
category: Digital Plumbing
stage: —
definitive_article: /digital-plumbing
status: needs-work
---

# Write Proper Title Tags and Meta Descriptions

**Use this when** pages have missing, duplicate, truncated, or keyword-less titles and meta descriptions — or after launching any new page.

## Inputs
- Crawl or page list of all indexable pages (Rank Math's list or a site crawl)
- Focus keyword per page (from the page's GCT: what searcher is this page for?)
- Access to the SEO plugin (Rank Math) to edit titles and metas

## Steps
1. Inventory every indexable page and its current title and meta description. Flag missing, duplicate, over-length, and keyword-less entries.
2. For each page, confirm the focus keyword — the real phrase its target searcher uses. One page, one keyword family (no two pages competing for the same term; that's content vandalism).
3. Write the title: under 60 characters, focus keyword near the front, brand at the end if it fits. Describe what the page actually delivers — no clickbait, no AI-fluff phrasing.
4. Write the meta description: under 160 characters, focus keyword included naturally, plus a concrete reason to click (outcome, proof, or offer). Active voice.
5. Enter both in Rank Math per page and confirm no template is overriding them.
6. QA pass: every title and meta unique site-wide; spot-check a Google result (site:yourdomain) to see how they render in the SERP.

## Definition of done (QA checklist)
- [ ] Every indexable page has a title under 60 characters containing its focus keyword
- [ ] Every indexable page has a meta description under 160 characters containing its focus keyword
- [ ] Zero duplicate titles or metas site-wide
- [ ] No truncation on spot-checked SERP renderings
- [ ] Linked back to the definitive article and relevant siblings
- [ ] Complies with Blog Posting Guidelines (if it publishes content)

## Example(s)
- Example needed — run the Meta-Article Prompt after first real run.

## Run on a persistent agent (Fable 5)
A long-horizon agent (Claude Fable 5 or a comparable OpenAI/Google model) works the full page inventory, not a sample: write, check length and keyword, re-crawl for duplicates, and loop until every indexable page passes the entire Definition of done, not 90% of pages.
It self-verifies the 60/160 limits and site-wide uniqueness against that checklist programmatically, stores the page-to-keyword map in memory so new pages slot into the same canon on later runs, and logs a meta-article example each run so the library compounds.
See `boil-the-ocean.md` for the full operating principles.

## Definitive article & links
- Hub: /digital-plumbing
- Related (run order): this → ensure-robots-meta-not-blocking-indexing → create-xml-sitemap-and-reference-in-robots-txt
- Cross-links: /blog-posting-guidelines (title/meta rules live here) · /website-qa-audit (Layer 2 title/meta checks) · /seo-tree (one page per concept)

END

Originally published .

Dennis Yu
Dennis Yu
Dennis Yu is the CEO of Local Service Spotlight, a platform that amplifies the reputations of contractors and local service businesses using the Content Factory process. He is a former search engine engineer who has spent a billion dollars on Google and Facebook ads for Nike, Quiznos, Ashley Furniture, Red Bull, State Farm, and other brands. Dennis has achieved 25% of his goal of creating a million digital marketing jobs by partnering with universities, professional organizations, and agencies. Through Local Service Spotlight, he teaches the Dollar a Day strategy and Content Factory training to help local service businesses enhance their existing local reputation and make the phone ring. Dennis coaches young adult agency owners serving plumbers, AC technicians, landscapers, roofers, electricians, and believes there should be a standard in measuring local marketing efforts, much like doctors and plumbers must be certified. He has appeared on 353 podcasts with 619 credited episodes — see the full list of his podcast appearances.