<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Joseph Anady</title>
    <description>The latest articles on Forem by Joseph Anady (@joseph_anady_214bacedf939).</description>
    <link>https://forem.com/joseph_anady_214bacedf939</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3948046%2Ff0f0dd6c-1fa6-47c8-9e56-a8a937347b58.png</url>
      <title>Forem: Joseph Anady</title>
      <link>https://forem.com/joseph_anady_214bacedf939</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/joseph_anady_214bacedf939"/>
    <language>en</language>
    <item>
      <title>Internal linking: hub-and-spoke architecture</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 02:33:27 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/internal-linking-hub-and-spoke-architecture-4dhd</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/internal-linking-hub-and-spoke-architecture-4dhd</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-internallinking/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Hub-and-Spoke Architecture, Anchor Text Discipline, Topical Clusters, Crawl Depth, Orphan Detection, and Link Equity Distribution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive installation and audit reference for internal linking — the discipline of using on-site links to communicate site architecture to crawlers, distribute ranking signals across pages, and guide users through topical depth. Internal linking is one of the highest-ROI SEO levers because it costs nothing per link added and compounds across the entire site. Dual-purpose: installation manual and audit document.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Document Purpose
&lt;/h2&gt;

&lt;p&gt;This is the canonical reference for internal linking. Most sites have content that ranks. Most sites have technical SEO that works. Few sites have internal linking that does what it should. The gap shows up as orphan pages, shallow content, ranking signals trapped on the homepage, and topical clusters that exist on paper but not in the link graph.&lt;/p&gt;

&lt;p&gt;In 2026, internal linking has become more important, not less. AI search engines parse internal link patterns to understand topical authority. Google's crawl-budget allocation favors well-linked pages. Topical-cluster ranking — a page ranks when its surrounding cluster ranks — is now a measurable phenomenon. Sites that use internal linking strategically outrank sites with better content but flatter link graphs.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 Required Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Screaming Frog SEO Spider&lt;/strong&gt; — desktop crawler; reveals link graph, orphan pages, anchor text&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sitebulb&lt;/strong&gt; — desktop crawler with stronger reporting on crawl depth and link counts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ahrefs Site Explorer — Internal Backlinks&lt;/strong&gt; — sitewide internal link audit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ahrefs Site Audit — Internal Linking&lt;/strong&gt; — detects orphan pages, broken links&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semrush Site Audit — Internal Linking&lt;/strong&gt; — alternative&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console — Links report&lt;/strong&gt; — Google's view of internal linking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link Whisper&lt;/strong&gt; (WordPress) — automated internal-link suggestion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom Python + BeautifulSoup&lt;/strong&gt; — for programmatic link extraction at scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graphviz / yEd / Gephi&lt;/strong&gt; — for visualizing link graphs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spreadsheet (Sheets or Excel)&lt;/strong&gt; — link inventory management&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1.2 Document Scope
&lt;/h3&gt;

&lt;p&gt;Covers: site architecture patterns, hub-and-spoke / topical-cluster organization, anchor text discipline, crawl depth, orphan detection, link equity distribution, contextual vs navigational linking, breadcrumbs, faceted navigation handling, and pagination patterns. Touches but does not exhaust: keyword research and topic mapping (&lt;code&gt;framework-keywordresearch.md&lt;/code&gt;), schema's BreadcrumbList (&lt;code&gt;framework-schema.md&lt;/code&gt;), navigation UX (&lt;code&gt;framework-uxseo.md&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Client Variables Intake
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;domain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;total_pages_indexed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;content_taxonomy_documented&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;hub_pages_identified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;known_orphan_pages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;existing_internal_link_strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;    &lt;span class="c1"&gt;# describe or "none"&lt;/span&gt;
&lt;span class="na"&gt;sitemap_url_count&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;crawl_depth_max_observed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;            &lt;span class="c1"&gt;# from Sitebulb / Screaming Frog&lt;/span&gt;
&lt;span class="na"&gt;average_internal_links_per_page&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;top_traffic_pages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;top_conversion_pages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;known_cannibalization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;              &lt;span class="c1"&gt;# cross-reference framework-keywordresearch.md&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. The Three Functions of Internal Links
&lt;/h2&gt;

&lt;p&gt;Every internal link does three things at once:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Architectural&lt;/strong&gt; — tells crawlers and users that the linked page exists and matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Topical&lt;/strong&gt; — tells crawlers what the linked page is about (via anchor text and surrounding content).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Equity&lt;/strong&gt; — passes a portion of the source page's ranking signals to the target.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A weak link does one. A strong link does all three.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Site Architecture Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 The Hub-and-Spoke Model
&lt;/h3&gt;

&lt;p&gt;The dominant architecture pattern for content sites and most service businesses.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                  Homepage (root hub)
                  /         |         \
              Hub A      Hub B       Hub C
              /  \         |         /  \
           Sub  Sub     Sub Sub    Sub  Sub
            \    \       |   /     /    /
             [back-links to hub from each spoke]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The pattern:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pillar / hub pages&lt;/strong&gt; cover a broad topic comprehensively. They link out to all relevant sub-pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cluster / spoke pages&lt;/strong&gt; cover narrow sub-topics in depth. They link back to their hub.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-cluster links&lt;/strong&gt; are sparing and used only when topically warranted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hubs accumulate link equity from spokes.&lt;/li&gt;
&lt;li&gt;Spokes signal topical depth around the hub.&lt;/li&gt;
&lt;li&gt;Crawlers see a clear topical structure.&lt;/li&gt;
&lt;li&gt;Users navigate naturally between depth levels.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.2 The Mesh Model
&lt;/h3&gt;

&lt;p&gt;For wikis, knowledge bases, and densely interconnected content, a mesh works better than strict hubs.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every page links to many topically related pages.&lt;/li&gt;
&lt;li&gt;No strict hierarchy.&lt;/li&gt;
&lt;li&gt;Depth comes from cross-references, not parent-child.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wikipedia is the canonical mesh. It's appropriate for sites with hundreds of densely related entities. Most agency clients should use hub-and-spoke instead.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3 The Catalog Model (Ecommerce)
&lt;/h3&gt;

&lt;p&gt;For ecommerce:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Homepage → Category → Subcategory → Product&lt;/li&gt;
&lt;li&gt;Cross-links between related products&lt;/li&gt;
&lt;li&gt;Cross-links from category to comparison guides (cluster overlay)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-ecommerceseo.md&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.4 The Editorial Model (Publishers)
&lt;/h3&gt;

&lt;p&gt;For news and editorial sites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Section → Article&lt;/li&gt;
&lt;li&gt;Articles link forward to follow-up coverage&lt;/li&gt;
&lt;li&gt;Articles link back to evergreen explainer pages&lt;/li&gt;
&lt;li&gt;"Related articles" widgets serve as soft hubs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-newsseo.md&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Topical Clusters
&lt;/h2&gt;

&lt;p&gt;A topical cluster is a hub page plus all the spokes that cover the topic. Clusters are how modern sites compete for broad topics they couldn't dominate with a single page.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Cluster Anatomy
&lt;/h3&gt;

&lt;p&gt;For a cluster on "Local SEO":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HUB: /topics/local-seo/  (pillar page, comprehensive overview)

SPOKES:
  /topics/local-seo/google-business-profile/
  /topics/local-seo/local-citations/
  /topics/local-seo/local-pack-ranking/
  /topics/local-seo/review-management/
  /topics/local-seo/local-link-building/
  /topics/local-seo/local-schema/
  /topics/local-seo/local-content-strategy/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Each spoke:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Links back to the hub in the opening paragraph&lt;/li&gt;
&lt;li&gt;Links back to the hub in the conclusion&lt;/li&gt;
&lt;li&gt;Links to 2-3 sister spokes in topically appropriate places&lt;/li&gt;
&lt;li&gt;Does not link to spokes from unrelated clusters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The hub:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Links to every spoke at least once&lt;/li&gt;
&lt;li&gt;Includes a structured "in this cluster" section listing spokes&lt;/li&gt;
&lt;li&gt;Updates as new spokes are added&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5.2 Cluster Sizing
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cluster size&lt;/th&gt;
&lt;th&gt;Strategy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3-5 spokes&lt;/td&gt;
&lt;td&gt;Minimum viable cluster. Common starting point.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6-10 spokes&lt;/td&gt;
&lt;td&gt;Healthy cluster. Most competitive topics need this depth.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11-20 spokes&lt;/td&gt;
&lt;td&gt;Authoritative cluster. Often the bar for ranking head terms.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20+ spokes&lt;/td&gt;
&lt;td&gt;Pillar treatment. Reserved for category-defining hubs.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.3 Cluster Identification
&lt;/h3&gt;

&lt;p&gt;For existing sites:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inventory all content pages.&lt;/li&gt;
&lt;li&gt;Group by topical theme.&lt;/li&gt;
&lt;li&gt;Identify the strongest existing piece per theme as the candidate hub.&lt;/li&gt;
&lt;li&gt;Document the cluster gap (sub-topics not yet covered).&lt;/li&gt;
&lt;li&gt;Decide: build out the cluster, or consolidate into fewer pages?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For new sites:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with keyword research (&lt;code&gt;framework-keywordresearch.md&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Identify head term per cluster.&lt;/li&gt;
&lt;li&gt;Decide on hub URL and 5-10 starting spokes.&lt;/li&gt;
&lt;li&gt;Build hub first; spokes can roll out over weeks.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Anchor Text Discipline
&lt;/h2&gt;

&lt;p&gt;Anchor text — the visible link text — is one of the strongest topical signals to Google.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 Anchor Text Types
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;When to use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Exact match&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;a href="/local-seo/"&amp;gt;local SEO&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Sparingly; risk of over-optimization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Partial match&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;a href="/local-seo/"&amp;gt;our guide to local SEO&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Most common; safest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Branded&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;a href="/local-seo/"&amp;gt;read more on ThatDeveloperGuy&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Brand-building; less topical signal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Generic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;a href="/local-seo/"&amp;gt;click here&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Avoid. Wastes the topical signal.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Naked URL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;a href="/local-seo/"&amp;gt;thatdeveloperguy.com/local-seo/&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Avoid for internal links; fine for citations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Image&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;image with &lt;code&gt;alt="local SEO guide"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Alt text serves as anchor; use descriptive alt&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  6.2 Anchor Text Patterns That Hurt
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Click here"&lt;/strong&gt;, &lt;strong&gt;"read more"&lt;/strong&gt;, &lt;strong&gt;"learn more"&lt;/strong&gt; — wasted signal. Especially bad on important hub links.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The same exact-match anchor on every link to a page&lt;/strong&gt; — over-optimization, looks unnatural.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mismatched anchor and target&lt;/strong&gt; — anchor says "plumbing" but page is about "electrical work."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stuffed anchors&lt;/strong&gt; — &lt;code&gt;&amp;lt;a&amp;gt;local SEO services Cassville Missouri SDVOSB&amp;lt;/a&amp;gt;&lt;/code&gt; reads as keyword stuffing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.3 Healthy Anchor Distribution
&lt;/h3&gt;

&lt;p&gt;For a typical hub page with many internal pointers, anchor text should vary naturally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;~30% exact or partial-match topic anchors&lt;/li&gt;
&lt;li&gt;~30% partial-match with surrounding context ("our guide to...", "more on...")&lt;/li&gt;
&lt;li&gt;~20% branded or contextual ("we've covered this on the blog", "see our process")&lt;/li&gt;
&lt;li&gt;~20% incidental (in-prose mentions where the anchor reflects the surrounding sentence)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This distribution emerges naturally from good editorial writing. It rarely emerges from mass-produced internal-link automation.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Crawl Depth
&lt;/h2&gt;

&lt;p&gt;Crawl depth is the number of clicks from the homepage to a given page. It is one of the strongest predictors of which pages Google indexes and ranks.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 Targets
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Site size&lt;/th&gt;
&lt;th&gt;Maximum acceptable crawl depth&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Small (under 100 pages)&lt;/td&gt;
&lt;td&gt;3 clicks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medium (100-1,000 pages)&lt;/td&gt;
&lt;td&gt;4 clicks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Large (1,000-10,000 pages)&lt;/td&gt;
&lt;td&gt;5 clicks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Massive (10,000+ pages)&lt;/td&gt;
&lt;td&gt;6 clicks (with strong sitemap support)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Pages buried deeper rarely accumulate link equity, rarely get crawled frequently, and rarely rank.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.2 Crawl Depth vs URL Path Depth
&lt;/h3&gt;

&lt;p&gt;These are different. URL path depth (&lt;code&gt;/a/b/c/d/page/&lt;/code&gt; = depth 5) is unrelated to crawl depth (clicks from homepage). A page at &lt;code&gt;/a/b/c/d/page/&lt;/code&gt; can be crawl-depth 2 if linked from the homepage. A page at &lt;code&gt;/page/&lt;/code&gt; can be crawl-depth 6 if buried behind paginated archives.&lt;/p&gt;

&lt;p&gt;Optimize for crawl depth. URL depth doesn't matter to crawlers.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.3 Reducing Crawl Depth
&lt;/h3&gt;

&lt;p&gt;Common pages buried too deep:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Old blog posts&lt;/strong&gt; — accessible only via paginated archives at /page/2/, /page/3/, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product variants&lt;/strong&gt; — buried under category → subcategory → product → variant&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deep category pages&lt;/strong&gt; — buried under multi-level taxonomies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag archives&lt;/strong&gt; — typically dead ends&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add hub pages that link directly to important deep content&lt;/li&gt;
&lt;li&gt;Create "Best of" / "Most popular" sections on the homepage or category pages&lt;/li&gt;
&lt;li&gt;Link from new content to high-value old content&lt;/li&gt;
&lt;li&gt;Build cluster hubs that surface deep content&lt;/li&gt;
&lt;li&gt;Use breadcrumbs (counts toward crawl depth from any breadcrumb-equipped page)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Orphan Pages
&lt;/h2&gt;

&lt;p&gt;An orphan page is one with zero internal links pointing to it. Orphans:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do not get crawled (or are crawled rarely)&lt;/li&gt;
&lt;li&gt;Do not accumulate ranking signals&lt;/li&gt;
&lt;li&gt;Often do not rank at all&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.1 Detection
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Screaming Frog method:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crawl the site&lt;/li&gt;
&lt;li&gt;Crawl Analysis → Configure → enable "Crawl Analysis"&lt;/li&gt;
&lt;li&gt;Run Crawl Analysis after main crawl completes&lt;/li&gt;
&lt;li&gt;Reports → Orphan Pages&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Sitebulb method:&lt;/strong&gt; Auto-detects in standard reports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ahrefs / Semrush:&lt;/strong&gt; Site audit reports orphans.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XML sitemap cross-reference:&lt;/strong&gt; Compare sitemap URLs against URLs found via crawl. Difference set = orphans.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.2 Resolution
&lt;/h3&gt;

&lt;p&gt;For each orphan, decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Should this page exist?&lt;/strong&gt; If not, 410 it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If yes, where should it be linked from?&lt;/strong&gt; Identify the natural parent in the site structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add at least 3 inbound internal links&lt;/strong&gt; before considering the orphan resolved.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.3 Prevention
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Editorial workflow: never publish a page without identifying at least 2-3 places to link to it from.&lt;/li&gt;
&lt;li&gt;Hub-and-spoke discipline: every spoke is added to its hub when published.&lt;/li&gt;
&lt;li&gt;Internal-linking review at publish: spend 5 minutes after every publish placing inbound links.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. The Link Equity Lens
&lt;/h2&gt;

&lt;p&gt;Link equity (informally "link juice") is the ranking-signal capital a page accumulates from internal and external links. Internal linking redistributes equity within the site.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.1 PageRank Distribution Logic (Conceptual)
&lt;/h3&gt;

&lt;p&gt;Every page has some equity. It distributes equity to all the pages it links to (divided by the number of outgoing links). The pages that receive the most equity rank best.&lt;/p&gt;

&lt;p&gt;Implications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The homepage has the most equity (highest external inbound).&lt;/li&gt;
&lt;li&gt;Every link from the homepage divides its equity by the number of outbound links.&lt;/li&gt;
&lt;li&gt;Hub pages accumulate equity by being linked from many sources within the site.&lt;/li&gt;
&lt;li&gt;A page with many outbound links passes less equity per link.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.2 The 100-Link Heuristic
&lt;/h3&gt;

&lt;p&gt;Google indicated decades ago that 100 links per page was a soft maximum. The modern reality: there is no hard limit, but pages with 200+ outbound links pass diluted equity.&lt;/p&gt;

&lt;p&gt;For a typical content page, target:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;3-7 contextual outbound links to other site pages&lt;/li&gt;
&lt;li&gt;Plus navigation links (header, footer, breadcrumbs)&lt;/li&gt;
&lt;li&gt;Plus footer links&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A page with 50+ outbound links should be questioned.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.3 nofollow on Internal Links
&lt;/h3&gt;

&lt;p&gt;Don't &lt;code&gt;nofollow&lt;/code&gt; internal links unless there's a specific reason (e.g., blocking infinite-spawn faceted URLs from crawl). Old SEO advice to nofollow login or registration links is outdated — Google handles those fine without intervention.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.4 Strategic Equity Concentration
&lt;/h3&gt;

&lt;p&gt;Identify the 5-10 pages on the site that should rank highest (commercial pages, top-converting pages, hub pages). For these, intentionally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Link from the homepage prominently&lt;/li&gt;
&lt;li&gt;Link from every related blog post&lt;/li&gt;
&lt;li&gt;Link from major content hubs&lt;/li&gt;
&lt;li&gt;Use varied descriptive anchor text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Equity flow is editable through linking decisions.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Navigation Linking
&lt;/h2&gt;

&lt;p&gt;The header, footer, and sidebar are the "navigation layer" — links that appear on every page (or every page in a section).&lt;/p&gt;

&lt;h3&gt;
  
  
  10.1 Header Navigation
&lt;/h3&gt;

&lt;p&gt;Should contain links to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Top-level commercial pages (Services, Pricing, Contact)&lt;/li&gt;
&lt;li&gt;Top-level content hubs (Blog, Resources)&lt;/li&gt;
&lt;li&gt;The single highest-priority CTA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Should NOT contain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every section the site has (mega-menus only when truly needed)&lt;/li&gt;
&lt;li&gt;Promotional / temporary content&lt;/li&gt;
&lt;li&gt;Deep pages that should rank organically (concentrating equity on every page is wasted)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.2 Footer Navigation
&lt;/h3&gt;

&lt;p&gt;A natural place for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sitemap-style links to important pages&lt;/li&gt;
&lt;li&gt;Trust signals (about, contact, privacy, terms)&lt;/li&gt;
&lt;li&gt;Service pages organized logically&lt;/li&gt;
&lt;li&gt;Brand and credential links&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The footer "supplies" link equity to a wider page set than the header. Use this deliberately.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.3 Mega-Menus
&lt;/h3&gt;

&lt;p&gt;Mega-menus (multi-column dropdowns with dozens of links) work well for ecommerce and large content sites — but the link count from every page is significant. For smaller sites, mega-menus dilute rather than help.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.4 Breadcrumbs
&lt;/h3&gt;

&lt;p&gt;Breadcrumbs add internal links (parent and grandparent pages) to every non-homepage. They:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce crawl depth (every breadcrumb-enabled page is closer to root)&lt;/li&gt;
&lt;li&gt;Add BreadcrumbList schema (cross-reference: &lt;code&gt;framework-schema.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Improve user navigation&lt;/li&gt;
&lt;li&gt;Display in SERPs as a navigation aid&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Implement on every non-homepage. Always.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Contextual Linking
&lt;/h2&gt;

&lt;p&gt;Contextual links are in-prose links within editorial content. They are the strongest internal links because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Surrounding content reinforces the topical signal&lt;/li&gt;
&lt;li&gt;Anchor text is naturally varied&lt;/li&gt;
&lt;li&gt;They appear in the part of the page Google weighs most heavily&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  11.1 The Editorial Discipline
&lt;/h3&gt;

&lt;p&gt;Every editorial publish should include 3-5 contextual links to other pages on the site. These should appear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once in the introduction (link forward to related topic)&lt;/li&gt;
&lt;li&gt;1-2 times in the body (link to specific related sub-topics)&lt;/li&gt;
&lt;li&gt;Once in the conclusion (link to the next logical step)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not link manipulation. This is good editorial practice.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.2 The "Updated Old Posts" Pattern
&lt;/h3&gt;

&lt;p&gt;When publishing new content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify 3-5 old posts that should now reference the new content.&lt;/li&gt;
&lt;li&gt;Add contextual links from those posts to the new one.&lt;/li&gt;
&lt;li&gt;Update the old posts' &lt;code&gt;dateModified&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is one of the highest-ROI SEO activities. Costs 15 minutes per publish; compounds across the site.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.3 The "Linked Mentions" Audit
&lt;/h3&gt;

&lt;p&gt;Spot-check old content quarterly. For every brand, product, or topic mention in old posts, verify it links to the appropriate destination page. Mentions without links are wasted internal-linking opportunities.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Faceted Navigation
&lt;/h2&gt;

&lt;p&gt;Faceted navigation is the filter/sort UI common on ecommerce and listing sites. It generates URLs combinatorially:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/category/?color=red&amp;amp;size=m&amp;amp;brand=acme
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  12.1 The Crawl Budget Problem
&lt;/h3&gt;

&lt;p&gt;A faceted system with 5 facets and 5 options each generates 5^5 = 3,125 URL variations. With 10 facets, the count explodes. Crawlers can spend their entire budget on faceted URLs.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.2 Strategies
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Block facet parameters in robots.txt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;Disallow&lt;/span&gt;: /*?&lt;span class="n"&gt;color&lt;/span&gt;=
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /*?&lt;span class="n"&gt;size&lt;/span&gt;=
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /*?&lt;span class="n"&gt;sort&lt;/span&gt;=
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Canonical to parameterless version:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Each faceted URL canonicals to the unfiltered category page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;noindex&lt;/code&gt; on facet combinations:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;meta name="robots" content="noindex, follow"&amp;gt;&lt;/code&gt; on faceted URLs. They get crawled but not indexed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Whitelist facet combinations that should rank:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Some facet combinations are valuable landing pages ("red running shoes"). Whitelist these as canonical, indexable, and present in the sitemap. Block the rest.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.3 Internal Linking with Facets
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Faceted URLs should not be linked from elsewhere on the site (don't pass equity into pages you don't index).&lt;/li&gt;
&lt;li&gt;Whitelisted facet pages get treated as normal landing pages — link to them from category pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-ecommerceseo.md&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Pagination
&lt;/h2&gt;

&lt;p&gt;Paginated archives (&lt;code&gt;/page/2/&lt;/code&gt;, &lt;code&gt;/page/3/&lt;/code&gt;) need careful handling.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.1 The rel=next/prev Pattern (Deprecated)
&lt;/h3&gt;

&lt;p&gt;Google deprecated rel=next/prev as a ranking signal in 2019. The link tags can still be present but Google ignores them.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.2 Modern Pagination Patterns
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pattern 1: Self-canonical paginated pages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every paginated page self-canonicals (page 2 canonicals to itself). All paginated pages may be indexed. Best when each page has substantively different content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern 2: Canonical to page 1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Page 2, 3, 4 canonical to page 1. Only page 1 is indexed. Best when paginated pages are mostly listing pagination with no unique value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern 3: noindex paginated pages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Page 2+ are noindex,follow. They pass internal links but don't appear in search. Best when you want crawl access but no SERP presence.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.3 Internal Linking with Pagination
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Provide direct links to important deep content from elsewhere on the site rather than relying on pagination as the only access path.&lt;/li&gt;
&lt;li&gt;For long archives, add "Browse by year" or "Browse by category" overlays that link directly to specific posts without pagination.&lt;/li&gt;
&lt;li&gt;Don't rely on infinite-scroll-only patterns; ensure crawler can reach all content via traditional links.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  14. Linking Hygiene
&lt;/h2&gt;

&lt;h3&gt;
  
  
  14.1 Broken Links
&lt;/h3&gt;

&lt;p&gt;Internal 4xx links waste crawl budget, frustrate users, and signal site neglect. Audit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Screaming Frog → Internal → Status code filter for 4xx&lt;/li&gt;
&lt;li&gt;Sitebulb → Internal Links report&lt;/li&gt;
&lt;li&gt;Ahrefs Site Audit → Broken Internal Links report&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fix:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update the link to point to the new canonical URL&lt;/li&gt;
&lt;li&gt;301-redirect the broken target if it should still exist&lt;/li&gt;
&lt;li&gt;410 the broken target if it shouldn't&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  14.2 Redirect Chains in Internal Links
&lt;/h3&gt;

&lt;p&gt;An internal link pointing to a URL that 301-redirects: the link should be updated to point to the final destination directly. Why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saves crawler an extra hop&lt;/li&gt;
&lt;li&gt;Eliminates dependency on the 301 staying in place&lt;/li&gt;
&lt;li&gt;Marginally improves user perceived performance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Find with Screaming Frog → Redirect chain report.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.3 Cross-Domain Internal Links
&lt;/h3&gt;

&lt;p&gt;Sites that span multiple domains (multibrand portfolios, microsite networks) treat cross-domain links as external for SEO purposes. There is no internal link equity flow between separate domains, even if they're owned by the same entity.&lt;/p&gt;

&lt;p&gt;For multibrand operations, decide deliberately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single domain with subfolders (&lt;code&gt;/brand-a/&lt;/code&gt;, &lt;code&gt;/brand-b/&lt;/code&gt;) — true internal linking, shared equity&lt;/li&gt;
&lt;li&gt;Subdomains (&lt;code&gt;brand-a.example.com&lt;/code&gt;, &lt;code&gt;brand-b.example.com&lt;/code&gt;) — partially shared, weaker&lt;/li&gt;
&lt;li&gt;Separate domains — no internal-link equity flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-multibrand.md&lt;/code&gt; (when built).&lt;/p&gt;




&lt;h2&gt;
  
  
  15. Audit Mode
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IL1&lt;/td&gt;
&lt;td&gt;Site has documented topical taxonomy / cluster strategy&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL2&lt;/td&gt;
&lt;td&gt;Hub pages identified for each major topic&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL3&lt;/td&gt;
&lt;td&gt;Each spoke page links back to its hub at least twice&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL4&lt;/td&gt;
&lt;td&gt;Each hub page links to all its spokes&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL5&lt;/td&gt;
&lt;td&gt;Cross-cluster links used sparingly and topically&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL6&lt;/td&gt;
&lt;td&gt;Crawl depth report shows zero pages over depth 3 (small sites) / 5 (large sites)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL7&lt;/td&gt;
&lt;td&gt;Zero orphan pages detected (Screaming Frog Crawl Analysis)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL8&lt;/td&gt;
&lt;td&gt;Anchor text varies naturally; no exact-match overuse&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL9&lt;/td&gt;
&lt;td&gt;Anchor text contains zero "click here" / "read more" without context&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL10&lt;/td&gt;
&lt;td&gt;Breadcrumbs implemented on every non-homepage with BreadcrumbList schema&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL11&lt;/td&gt;
&lt;td&gt;Header navigation focused on top commercial + content hubs only&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL12&lt;/td&gt;
&lt;td&gt;Footer provides supplemental link layer to important pages&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL13&lt;/td&gt;
&lt;td&gt;Average outbound internal links per content page between 5 and 30&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL14&lt;/td&gt;
&lt;td&gt;Zero broken internal links (4xx)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL15&lt;/td&gt;
&lt;td&gt;Zero internal links pointing to redirect chains&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL16&lt;/td&gt;
&lt;td&gt;Faceted navigation strategy documented (block / canonical / whitelist)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL17&lt;/td&gt;
&lt;td&gt;Pagination strategy documented (self-canonical / canonical-to-1 / noindex)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL18&lt;/td&gt;
&lt;td&gt;Top 10 commercial pages each have 20+ inbound internal links&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL19&lt;/td&gt;
&lt;td&gt;Top traffic pages link to conversion pages contextually&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL20&lt;/td&gt;
&lt;td&gt;Editorial workflow includes inbound-link placement step&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL21&lt;/td&gt;
&lt;td&gt;"Updated old posts" pattern practiced when new content publishes&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL22&lt;/td&gt;
&lt;td&gt;nofollow not used on internal links (no exceptions, or documented exceptions)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL23&lt;/td&gt;
&lt;td&gt;Cluster gap analysis completed in last 90 days&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL24&lt;/td&gt;
&lt;td&gt;Internal link audit run in last 30 days&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IL25&lt;/td&gt;
&lt;td&gt;Cross-domain links treated correctly per multibrand strategy&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 25. World-class: 23+/25.&lt;/p&gt;




&lt;h2&gt;
  
  
  16. Common Mistakes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;No clear hub pages.&lt;/strong&gt; Every page is at the same level; nothing accumulates topical authority.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spokes that don't link back to the hub.&lt;/strong&gt; Cluster signal lost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Click here" / "read more" anchors.&lt;/strong&gt; Wastes the topical signal on every internal link.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Orphan pages.&lt;/strong&gt; Indexed but invisible to the link graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Crawl depth over 5.&lt;/strong&gt; Important pages buried.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Broken internal links unfixed.&lt;/strong&gt; Cumulative crawl budget waste.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal links to redirect chains.&lt;/strong&gt; Same — extra hop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mega-menu on a small site.&lt;/strong&gt; Diluting equity on every page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faceted URLs without robots / canonical strategy.&lt;/strong&gt; Crawl budget exploded by combinatorial parameters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No breadcrumbs.&lt;/strong&gt; Free internal-linking layer ignored.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editorial publishes new content without inbound link placement.&lt;/strong&gt; Page launches as orphan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Old content never updated.&lt;/strong&gt; Anchors mention things that should now link to newer pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anchor text identical on every internal link to a page.&lt;/strong&gt; Looks manipulated; sometimes triggers algorithmic suppression.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Footer linking to every page on the site.&lt;/strong&gt; Equity diluted; signals devalued.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treating cross-domain links as internal.&lt;/strong&gt; Equity does not flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infinite-scroll archives with no traditional link path.&lt;/strong&gt; Pages discoverable only by JS-rendered scroll events.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript-only navigation.&lt;/strong&gt; Some crawlers see it; others don't.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-cluster spoke-to-spoke linking everywhere.&lt;/strong&gt; Weakens cluster boundaries.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  17. Maintenance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Weekly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spot-check newly published content for inbound and outbound links&lt;/li&gt;
&lt;li&gt;Verify new content added to relevant hub page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Monthly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sitewide broken-link scan (Screaming Frog or alternative)&lt;/li&gt;
&lt;li&gt;Orphan-page report review&lt;/li&gt;
&lt;li&gt;New publish "Updated old posts" pass&lt;/li&gt;
&lt;li&gt;Anchor-text spot audit on top 10 pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quarterly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive internal-link audit&lt;/li&gt;
&lt;li&gt;Crawl depth review (Sitebulb)&lt;/li&gt;
&lt;li&gt;Cluster gap analysis&lt;/li&gt;
&lt;li&gt;Hub page link inventory refresh&lt;/li&gt;
&lt;li&gt;Faceted navigation audit (if applicable)&lt;/li&gt;
&lt;li&gt;Pagination strategy review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Annually:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full link graph visualization (Gephi / yEd)&lt;/li&gt;
&lt;li&gt;Cluster structure review against keyword research&lt;/li&gt;
&lt;li&gt;Site architecture review (do hubs still match priorities?)&lt;/li&gt;
&lt;li&gt;Multibrand cross-domain linking review (if applicable)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  18. Companion Documents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;framework-keywordresearch.md&lt;/code&gt; — Topic clusters depend on keyword research&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-schema.md&lt;/code&gt; — BreadcrumbList implementation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-technicalseo.md&lt;/code&gt; — Crawl depth, faceted URL handling, pagination&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-ecommerceseo.md&lt;/code&gt; — Faceted navigation deep dive&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-newsseo.md&lt;/code&gt; — Editorial linking patterns&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-uxseo.md&lt;/code&gt; — Navigation UX patterns supporting SEO&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-hcs.md&lt;/code&gt; — Topical depth as a Helpful Content signal&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-eeat.md&lt;/code&gt; — Topical authority as an Expertise signal&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-pageexperience.md&lt;/code&gt; — Navigation tap-target sizing&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Document version&lt;/strong&gt;: 1.0&lt;br&gt;
&lt;strong&gt;Last updated&lt;/strong&gt;: 2026-05-05&lt;br&gt;
&lt;strong&gt;Owner&lt;/strong&gt;: Joseph W. Anady — ThatDeveloperGuy — SDVOSB&lt;/p&gt;




&lt;h2&gt;
  
  
  Source
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Canonical: &lt;a href="https://www.thatdevpro.com/insights/framework-internallinking/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-internallinking/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio. &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;Engine Optimization service&lt;/a&gt; · &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;Contact&lt;/a&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>googleseo</category>
      <category>ia</category>
    </item>
    <item>
      <title>Mobile SEO + mobile-first indexing</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 02:32:57 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/mobile-seo-mobile-first-indexing-40mh</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/mobile-seo-mobile-first-indexing-40mh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-mobileseo/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Mobile First Indexing, Mobile Core Web Vitals, Touch Patterns, Foldable Devices, Apple Intelligence on iOS 19, Mobile Crawler Behavior, and Self Hosted Mobile Testing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive installation and audit reference for mobile SEO in 2026. Mobile is no longer a special case or a secondary surface. Per StatCounter Global Stats April 2026 data (rolling 30 day sample across 3.1 million tracked sites), mobile generates 67.4 percent of global web traffic, tablets contribute another 1.9 percent, and desktop has dropped to 30.7 percent. AI search assistants on mobile (ChatGPT iOS app, Perplexity iOS and Android, Google AI Mode mobile interface, Apple Intelligence Spotlight Web) are launched from mobile devices 82.1 percent of the time per Similarweb Q1 2026 mobile app analytics. Mobile is the primary surface for both classic search and AI search. Dual purpose: installation manual and audit document.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cross stack implementation note&lt;/strong&gt;: the code samples in this framework are written in plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents of every pattern below, see &lt;a href="//framework-cross-stack-implementation.md"&gt;framework-cross-stack-implementation.md&lt;/a&gt;. For pure client rendered SPAs (no SSR/SSG) see &lt;a href="//framework-react.md"&gt;framework-react.md&lt;/a&gt;. For Tailwind specific concerns (purge, dynamic classes, dark mode CLS, focus accessibility) see &lt;a href="//framework-tailwind.md"&gt;framework-tailwind.md&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Document Purpose
&lt;/h2&gt;

&lt;p&gt;This is the canonical 2026 reference for mobile SEO. Where &lt;a href="//framework-pageexperience.md"&gt;framework-pageexperience.md&lt;/a&gt; covers Core Web Vitals as a cross device discipline, this document covers the mobile specific layer: foldable posture queries, iOS 19 Apple Intelligence registration, Googlebot Smartphone behavior in server logs, mobile schema cards, and the touch patterns that distinguish a thumb workable site from a desktop port. Where &lt;a href="//framework-localseo.md"&gt;framework-localseo.md&lt;/a&gt; covers local search business, this document covers the mobile click to call, click to map, click to text patterns local search depends on. Where &lt;a href="//framework-aso.md"&gt;framework-aso.md&lt;/a&gt; covers App Store and Play Store optimization, this document covers the mobile web surface and the seams where mobile web meets native (App Intents, App Links, Universal Links, Smart Banners).&lt;/p&gt;

&lt;p&gt;Mobile is not a special case in 2026. The conversation has shifted from "make sure the desktop site works on mobile" to "design for mobile first and progressively enhance for desktop". From "mobile Core Web Vitals must pass" to "mobile Core Web Vitals must pass under realistic field conditions including 5G uplink congestion, foldable layout changes, and AI assistant rendering paths".&lt;/p&gt;

&lt;p&gt;What is unchanged: responsive design remains the canonical pattern. Separate &lt;code&gt;m.example.com&lt;/code&gt; sites are a discontinued pattern. AMP is obsolete. Mobile parity with desktop is a hard requirement for indexation. Touch targets must be tap workable.&lt;/p&gt;

&lt;p&gt;What is new in 2026: container queries replace media queries at the component level. Foldable devices require CSS posture queries (&lt;code&gt;device-posture: folded&lt;/code&gt; and &lt;code&gt;device-posture: continuous&lt;/code&gt;). Apple Intelligence on iOS 19 (shipped September 2025, point release 19.2 January 2026) indexes mobile web content through Spotlight Web and surfaces it through Siri. App Intents for app deep linking benefit mobile web sites with companion apps. Googlebot Smartphone has been the only Googlebot user agent for fresh crawls since 2023. AI crawlers (OAI SearchBot, PerplexityBot, ClaudeBot, Bingbot in AI mode) are all mobile aware.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 Three Operating Modes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mode A, Install Mode&lt;/strong&gt;. Build mobile first infrastructure on a new or existing site. Follow Sections 2 through 14 in order.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode B, Audit Mode&lt;/strong&gt;. Evaluate an existing site for mobile SEO posture. Skip to Section 14.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode C, Hybrid Mode&lt;/strong&gt;. Audit first, then install for failing items.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Required Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Google Search Console URL Inspection tool (the canonical replacement for the deprecated Mobile Friendly Test)&lt;/li&gt;
&lt;li&gt;Chrome DevTools Device Mode for lab simulation&lt;/li&gt;
&lt;li&gt;Playwright with mobile emulation profiles (&lt;code&gt;devices['iPhone 15 Pro']&lt;/code&gt;, &lt;code&gt;devices['Pixel 8']&lt;/code&gt;, &lt;code&gt;devices['Galaxy S24 Ultra']&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Real device pool: at minimum one current iPhone, one current Pixel or Galaxy, one foldable, one tablet&lt;/li&gt;
&lt;li&gt;A self hosted Selenium Grid for headless cross device testing on a Debian or Ubuntu host&lt;/li&gt;
&lt;li&gt;Server log access for crawler verification (nginx &lt;code&gt;access.log&lt;/code&gt; or equivalent)&lt;/li&gt;
&lt;li&gt;A self hosted RUM endpoint for field data collection (&lt;code&gt;web-vitals&lt;/code&gt; JS library posting to your own nginx logging endpoint)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1.3 Relationship to Neighboring Frameworks
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Concern&lt;/th&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Core Web Vitals across devices&lt;/td&gt;
&lt;td&gt;&lt;a href="//framework-pageexperience.md"&gt;framework-pageexperience.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP/3, nginx tuning, TLS, crawler access&lt;/td&gt;
&lt;td&gt;&lt;a href="//framework-technicalseo.md"&gt;framework-technicalseo.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Touch and screen reader accessibility (WCAG 2.2)&lt;/td&gt;
&lt;td&gt;&lt;a href="//framework-accessibility.md"&gt;framework-accessibility.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App Store and Play Store optimization&lt;/td&gt;
&lt;td&gt;&lt;a href="//framework-aso.md"&gt;framework-aso.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Local pack, Apple Maps, Google Maps cards&lt;/td&gt;
&lt;td&gt;&lt;a href="//framework-localseo.md"&gt;framework-localseo.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;UX foundations, IA, task flow&lt;/td&gt;
&lt;td&gt;&lt;a href="//framework-uxseo.md"&gt;framework-uxseo.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LocalBusiness, MobileApplication, SpeakableSpecification&lt;/td&gt;
&lt;td&gt;&lt;a href="//framework-schema.md"&gt;framework-schema.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Siri, Apple Intelligence, ChatGPT Voice, Google Assistant&lt;/td&gt;
&lt;td&gt;&lt;a href="//framework-voicesearch.md"&gt;framework-voicesearch.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI citation surfaces (ChatGPT, Claude, Perplexity, Copilot)&lt;/td&gt;
&lt;td&gt;&lt;a href="//framework-aicitations.md"&gt;framework-aicitations.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google AI Overviews and AI Mode&lt;/td&gt;
&lt;td&gt;&lt;a href="//framework-aioverviews.md"&gt;framework-aioverviews.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image search, lens search, mobile camera search&lt;/td&gt;
&lt;td&gt;&lt;a href="//framework-multimodalsearch.md"&gt;framework-multimodalsearch.md&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  2. Client Variables Intake
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# MOBILE SEO FRAMEWORK CLIENT VARIABLES&lt;/span&gt;

&lt;span class="c1"&gt;# --- Site Identity ---&lt;/span&gt;
&lt;span class="na"&gt;business_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;primary_domain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;nginx_host_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                    &lt;span class="c1"&gt;# /var/www/sites/[domain]/&lt;/span&gt;
&lt;span class="na"&gt;companion_app_ios_bundle_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;companion_app_android_package_id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# --- Mobile Traffic Baseline ---&lt;/span&gt;
&lt;span class="na"&gt;mobile_traffic_percent_ga4&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;          &lt;span class="c1"&gt;# GA4 last 90 days&lt;/span&gt;
&lt;span class="na"&gt;mobile_organic_clicks_last_28_days&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;  &lt;span class="c1"&gt;# GSC mobile filter&lt;/span&gt;
&lt;span class="na"&gt;mobile_organic_impressions_last_28_days&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;

&lt;span class="c1"&gt;# --- Mobile Core Web Vitals Field Data ---&lt;/span&gt;
&lt;span class="na"&gt;mobile_lcp_p75_ms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;mobile_inp_p75_ms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;mobile_cls_p75&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;mobile_ttfb_p75_ms&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;

&lt;span class="c1"&gt;# --- Responsive Posture ---&lt;/span&gt;
&lt;span class="na"&gt;viewport_meta_present&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;viewport_meta_user_scalable_disabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;   &lt;span class="c1"&gt;# red flag if true&lt;/span&gt;
&lt;span class="na"&gt;responsive_pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                 &lt;span class="c1"&gt;# responsive | separate_m_dot | dynamic_serving | amp_paired&lt;/span&gt;
&lt;span class="na"&gt;container_queries_in_use&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;posture_queries_in_use&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;breakpoints_in_css&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;                 &lt;span class="c1"&gt;# [320, 480, 768, 1024, 1280, 1920]&lt;/span&gt;

&lt;span class="c1"&gt;# --- Touch Posture ---&lt;/span&gt;
&lt;span class="na"&gt;minimum_tap_target_px&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;pinch_zoom_enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;hover_only_interactions_count&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;

&lt;span class="c1"&gt;# --- Mobile First Indexing Status ---&lt;/span&gt;
&lt;span class="na"&gt;gsc_url_inspection_crawled_as&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;      &lt;span class="c1"&gt;# "Googlebot smartphone" expected&lt;/span&gt;
&lt;span class="na"&gt;mobile_parity_with_desktop&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;mobile_schema_parity_with_desktop&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- AMP Posture ---&lt;/span&gt;
&lt;span class="na"&gt;amp_pages_present&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;amp_sunset_planned&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;               &lt;span class="c1"&gt;# default; AMP is obsolete&lt;/span&gt;

&lt;span class="c1"&gt;# --- Apple Intelligence Posture ---&lt;/span&gt;
&lt;span class="na"&gt;ios_app_intents_registered&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;applinks_apple_app_site_association_present&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;apple_smart_app_banner_present&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Android App Linking Posture ---&lt;/span&gt;
&lt;span class="na"&gt;android_app_links_assetlinks_json_present&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;android_intent_filters_configured&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Foldable Device Posture ---&lt;/span&gt;
&lt;span class="na"&gt;foldable_design_considered&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;safe_area_inset_css_in_use&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Self Hosted Mobile Testing ---&lt;/span&gt;
&lt;span class="na"&gt;playwright_mobile_suite_present&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;selenium_grid_self_hosted&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;real_device_pool_size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Mobile First Indexing Status 2026
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 What Mobile First Indexing Means in 2026
&lt;/h3&gt;

&lt;p&gt;Google completed the migration to mobile first indexing for the entire web by October 2023. There is no longer a "switching schedule". Every site Googlebot crawls is crawled primarily as Googlebot Smartphone. The desktop user agent persists for legacy verification only.&lt;/p&gt;

&lt;p&gt;Operationally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mobile rendering is the canonical rendering for indexation.&lt;/li&gt;
&lt;li&gt;Content, schema, and internal links present only on desktop do not contribute to ranking or discovery.&lt;/li&gt;
&lt;li&gt;Mobile Core Web Vitals are the only Core Web Vitals that affect ranking.&lt;/li&gt;
&lt;li&gt;Mobile usability issues block indexation, not just rank.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.2 Verifying Current Crawl Perspective
&lt;/h3&gt;

&lt;p&gt;The Mobile Friendly Test tool at &lt;code&gt;search.google.com/test/mobile-friendly&lt;/code&gt; was deprecated in late 2024. Its functionality has been folded into Google Search Console URL Inspection. To verify how Google currently crawls a URL:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open Google Search Console for the property.&lt;/li&gt;
&lt;li&gt;Enter the URL in the top URL inspection bar.&lt;/li&gt;
&lt;li&gt;Wait for the inspection result.&lt;/li&gt;
&lt;li&gt;Open the "Coverage" section.&lt;/li&gt;
&lt;li&gt;Read the "Crawled as" field. Expected value: "Googlebot smartphone".&lt;/li&gt;
&lt;li&gt;If the value reads "Googlebot" without the "smartphone" qualifier, the URL is on the legacy desktop crawl path. This is rare in 2026 and indicates either a mobile rendering failure or a site explicitly excluded from mobile first indexing.&lt;/li&gt;
&lt;li&gt;Click "Test live URL" to confirm the current rendering reflects the live mobile state.&lt;/li&gt;
&lt;li&gt;Open the "Screenshot" tab to verify the rendered mobile viewport matches intent.&lt;/li&gt;
&lt;li&gt;Open the "More info" &amp;gt; "JavaScript console messages" to verify no JavaScript errors block mobile rendering.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  3.3 Legacy Desktop Only Pages
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;Impact&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;m.example.com returns desktop HTML&lt;/td&gt;
&lt;td&gt;Googlebot Smartphone retrieves desktop content&lt;/td&gt;
&lt;td&gt;Migrate to responsive; 301 the m subdomain to the apex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic serving returns desktop to mobile UA&lt;/td&gt;
&lt;td&gt;Mobile rendering broken; indexation incomplete&lt;/td&gt;
&lt;td&gt;Migrate to responsive; remove user agent switching&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AMP only mobile path&lt;/td&gt;
&lt;td&gt;Mobile depends on deprecated runtime&lt;/td&gt;
&lt;td&gt;Sunset AMP; serve responsive HTML on a single canonical URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Desktop only intermediate redirect&lt;/td&gt;
&lt;td&gt;Indexation diverges from user experience&lt;/td&gt;
&lt;td&gt;Remove redirect; serve full content on canonical URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Geo blocked mobile carrier routing&lt;/td&gt;
&lt;td&gt;Googlebot Smartphone routes through blocked ranges&lt;/td&gt;
&lt;td&gt;Whitelist Googlebot IP ranges from the published list&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3.4 Parity Requirements
&lt;/h3&gt;

&lt;p&gt;Mobile first indexing demands strict parity between mobile and desktop renderings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primary heading, body copy, and content tokens present in both.&lt;/li&gt;
&lt;li&gt;Schema markup present in both (the most common parity failure: schema injected via desktop only GTM, or schema rendered into a sidebar with &lt;code&gt;display: none&lt;/code&gt; on mobile).&lt;/li&gt;
&lt;li&gt;Internal links present in both. Mobile navigation must contain the same destination set as desktop megamenus.&lt;/li&gt;
&lt;li&gt;Images present in both with the same alt text.&lt;/li&gt;
&lt;li&gt;Canonical tag, Open Graph, meta description, and hreflang annotations identical.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Audit by fetching the URL twice with the Googlebot Smartphone and Googlebot Desktop user agents and diffing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;GBS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (compatible; Googlebot/2.1)"&lt;/span&gt;
&lt;span class="nv"&gt;GBD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Mozilla/5.0 AppleWebKit/537.36 (compatible; Googlebot/2.1)"&lt;/span&gt;

curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$GBS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"https://example.com/page"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /tmp/mobile.html
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$GBD&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"https://example.com/page"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /tmp/desktop.html

diff &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-oE&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;h[1-6][^&amp;gt;]*&amp;gt;[^&amp;lt;]*&amp;lt;/h[1-6]&amp;gt;'&lt;/span&gt; /tmp/mobile.html&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
     &amp;lt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-oE&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;h[1-6][^&amp;gt;]*&amp;gt;[^&amp;lt;]*&amp;lt;/h[1-6]&amp;gt;'&lt;/span&gt; /tmp/desktop.html&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Responsive Design Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 The Canonical Pattern
&lt;/h3&gt;

&lt;p&gt;Responsive design with a fluid grid, mobile first CSS, and progressive enhancement remains the canonical pattern. A single HTML document with a single set of URLs serves every viewport from a 320 pixel narrow phone to a 1920 pixel wide desktop monitor and beyond.&lt;/p&gt;

&lt;p&gt;The opening rule, present on every HTML document:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1, viewport-fit=cover"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;viewport-fit=cover&lt;/code&gt; directive opts the page into the iOS Safari and modern Android safe area inset model, which matters for foldables and for devices with notches or punch hole cameras. Without it, the layout sits inside a letterboxed inner viewport on devices with non rectangular screens.&lt;/p&gt;

&lt;p&gt;Do not set &lt;code&gt;user-scalable=no&lt;/code&gt;. Do not set &lt;code&gt;maximum-scale=1&lt;/code&gt;. Both block pinch zoom, which is an accessibility requirement under WCAG 2.2 SC 1.4.4 Resize Text. Modern Lighthouse audits flag both as accessibility failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Mobile First CSS
&lt;/h3&gt;

&lt;p&gt;Mobile first CSS means the base styles target the smallest viewport (320 pixels wide) and media queries progressively enhance for larger viewports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Base: 320px and up, mobile portrait */&lt;/span&gt;
&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;48px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.nav&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;480px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.25rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;768px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;720px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.75rem&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nc"&gt;.nav&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1024px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;960px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1280px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1920px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1440px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mobile loads the smallest stylesheet first. Larger viewports load the same base plus the overrides for their width. On a 320 pixel phone the browser parses zero media query bodies. On a 1920 pixel monitor it parses all five.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3 Container Queries
&lt;/h3&gt;

&lt;p&gt;Container queries became broadly supported in 2024 and are the default 2026 pattern for component level responsive behavior. Where media queries respond to viewport width, container queries respond to the container the component is rendered inside, which lets a single card component adapt correctly whether it lives in a 320 pixel sidebar or a 960 pixel main column.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.card-grid&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;container-type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-size&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;container-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;card-grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@container&lt;/span&gt; &lt;span class="n"&gt;card-grid&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;480px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;row&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nc"&gt;.card-image&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;33%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nc"&gt;.card-body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;67%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Component reuse becomes correct: the same card renders narrow inside a narrow container and wide inside a wide container, regardless of viewport size. Media queries continue to handle page level layout. Container queries handle component level layout.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.4 Common Responsive Failures
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Failure&lt;/th&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Horizontal scroll&lt;/td&gt;
&lt;td&gt;Element wider than viewport (table, iframe, code block, unsized image)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;img, video, iframe, table, pre { max-width: 100%; height: auto; }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fixed pixel widths&lt;/td&gt;
&lt;td&gt;Widths in px rather than %, rem, or container units&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;max-width&lt;/code&gt; and &lt;code&gt;clamp()&lt;/code&gt; patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Text under 16px&lt;/td&gt;
&lt;td&gt;Body font 14px or smaller&lt;/td&gt;
&lt;td&gt;iOS Safari auto zooms on form focus and triggers CLS; minimum 16px&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hover only interactions&lt;/td&gt;
&lt;td&gt;Menu reveal requires &lt;code&gt;:hover&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Pair with &lt;code&gt;:focus&lt;/code&gt; and tap toggle; or &lt;code&gt;&amp;lt;details&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Break at 360 to 375 px&lt;/td&gt;
&lt;td&gt;iPhone SE (375), folded Z Fold cover (~360)&lt;/td&gt;
&lt;td&gt;Test at 320, 360, 375 viewports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intrusive interstitial&lt;/td&gt;
&lt;td&gt;Modal dominating mobile first paint&lt;/td&gt;
&lt;td&gt;Cookie or signup overlays under 30 percent viewport on mobile, or gesture triggered (Google Mobile Interstitial penalty active since 2017)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Popup close target too small&lt;/td&gt;
&lt;td&gt;Close X under 48 by 48&lt;/td&gt;
&lt;td&gt;48 by 48 minimum on every dismiss control&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  5. Mobile Core Web Vitals
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 The Thresholds in 2026
&lt;/h3&gt;

&lt;p&gt;The Core Web Vitals thresholds remain unchanged since the INP migration in March 2024:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Good&lt;/th&gt;
&lt;th&gt;Needs Improvement&lt;/th&gt;
&lt;th&gt;Poor&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LCP (Largest Contentful Paint)&lt;/td&gt;
&lt;td&gt;&amp;lt;= 2.5 s&lt;/td&gt;
&lt;td&gt;2.5 to 4.0 s&lt;/td&gt;
&lt;td&gt;&amp;gt; 4.0 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INP (Interaction to Next Paint)&lt;/td&gt;
&lt;td&gt;&amp;lt;= 200 ms&lt;/td&gt;
&lt;td&gt;200 to 500 ms&lt;/td&gt;
&lt;td&gt;&amp;gt; 500 ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLS (Cumulative Layout Shift)&lt;/td&gt;
&lt;td&gt;&amp;lt;= 0.1&lt;/td&gt;
&lt;td&gt;0.1 to 0.25&lt;/td&gt;
&lt;td&gt;&amp;gt; 0.25&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Thresholds are measured at the 75th percentile of real user data for mobile and desktop separately. Google ranks mobile vitals against mobile users only. A page must clear 75 percent for the "Good" classification.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Why Mobile Vitals Are Harder Than Desktop Vitals
&lt;/h3&gt;

&lt;p&gt;The mobile field versus lab data divergence is wider than desktop's:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network variance&lt;/strong&gt;. 5G uplink TTFB ranges from 80 ms (cell line of sight) to 2400 ms (cell handoff). Desktop ethernet rarely varies by more than 50 ms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Device variance&lt;/strong&gt;. Lighthouse's "mid range mobile device" simulation is a Moto G4 era proxy. The actual 2026 mid range device is a $200 to $400 phone with thermal throttling. Lab measurements underestimate real INP by 40 to 80 percent on lower end devices, per HTTPArchive 2024 web performance report (1.3 million URLs sampled).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP/3 effects&lt;/strong&gt;. Per HTTPArchive 2024, sites serving HTTP/3 see a 200 to 400 ms p75 mobile TTFB improvement versus HTTP/2 on the same hosting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Battery and thermal state&lt;/strong&gt;. A phone in low power mode runs the CPU at reduced clock speed. Lighthouse lab runs do not model this.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lab data is a sanity check, not a pass. Field data from CrUX or self hosted RUM is the ground truth.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 Mobile LCP Levers
&lt;/h3&gt;

&lt;p&gt;Target: under 2.5 seconds at p75 mobile.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lever&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TTFB&lt;/td&gt;
&lt;td&gt;Under 600 ms p75 mobile&lt;/td&gt;
&lt;td&gt;Serve from same continent; cache static HTML at nginx; avoid client side rendering of hero; HTTP/3 enabled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hero image&lt;/td&gt;
&lt;td&gt;Under 100 KB compressed&lt;/td&gt;
&lt;td&gt;AVIF or WebP; sized to viewport breakpoint (not a 4000 pixel image on a 375 pixel viewport); &lt;code&gt;fetchpriority="high"&lt;/code&gt;; never lazy loaded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Font loading&lt;/td&gt;
&lt;td&gt;Swap before LCP&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;font-display: swap&lt;/code&gt;; preload critical weights; &lt;code&gt;size-adjust&lt;/code&gt; to match fallback metrics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Render blocking&lt;/td&gt;
&lt;td&gt;Zero blocking CSS above the fold&lt;/td&gt;
&lt;td&gt;Inline critical CSS; defer non critical via &lt;code&gt;media="print" onload&lt;/code&gt; pattern; defer JS unless it generates above the fold content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Third party scripts&lt;/td&gt;
&lt;td&gt;Zero in critical path&lt;/td&gt;
&lt;td&gt;GA4, GTM, chat widgets, social embeds with &lt;code&gt;defer&lt;/code&gt; or after &lt;code&gt;onload&lt;/code&gt;; self host fonts where license permits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.4 Mobile INP Levers
&lt;/h3&gt;

&lt;p&gt;Target: under 200 milliseconds at p75 mobile.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lever&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;JS budget&lt;/td&gt;
&lt;td&gt;Under 250 KB executed before interaction&lt;/td&gt;
&lt;td&gt;Code split routes; tree shake; audit with &lt;code&gt;webpack-bundle-analyzer&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long tasks&lt;/td&gt;
&lt;td&gt;No task over 50 ms on main thread&lt;/td&gt;
&lt;td&gt;Break into chunks with &lt;code&gt;scheduler.yield()&lt;/code&gt; or &lt;code&gt;setTimeout(0)&lt;/code&gt;; move heavy work to a Web Worker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Click handlers&lt;/td&gt;
&lt;td&gt;Return control within 50 ms&lt;/td&gt;
&lt;td&gt;Update UI optimistically; reconcile asynchronously; avoid layout thrash (reading &lt;code&gt;offsetHeight&lt;/code&gt; after writing style)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;React re-render scope&lt;/td&gt;
&lt;td&gt;No tree wide re-render on state change&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;React.memo&lt;/code&gt;; &lt;code&gt;useCallback&lt;/code&gt; for handlers passed to memoized children; virtualize long lists with &lt;code&gt;react-window&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Third party tag execution&lt;/td&gt;
&lt;td&gt;Not blocking interaction&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;type="module"&lt;/code&gt; or &lt;code&gt;defer&lt;/code&gt;; sandbox heavy widgets in a same origin iframe&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.5 Mobile CLS Levers
&lt;/h3&gt;

&lt;p&gt;Target: under 0.1 at p75 mobile.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lever&lt;/th&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Image dimensions&lt;/td&gt;
&lt;td&gt;Every image declares width and height (or &lt;code&gt;aspect-ratio&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;img src="/img/hero.avif" width="1200" height="800" alt="..." fetchpriority="high"&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embed dimensions&lt;/td&gt;
&lt;td&gt;Every iframe declares dimensions or aspect-ratio&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.video-wrapper { aspect-ratio: 16 / 9; }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Font swap shift&lt;/td&gt;
&lt;td&gt;Fallback font metrics match loaded font&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;size-adjust&lt;/code&gt;, &lt;code&gt;ascent-override&lt;/code&gt;, &lt;code&gt;descent-override&lt;/code&gt; on &lt;code&gt;@font-face&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cookie banner shift&lt;/td&gt;
&lt;td&gt;Banner does not push content&lt;/td&gt;
&lt;td&gt;Fixed overlay at bottom; no document flow space reserved&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Late loaded above fold content&lt;/td&gt;
&lt;td&gt;No content injected above existing content after first paint&lt;/td&gt;
&lt;td&gt;Reserve placeholder space; replace in place&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  6. Touch and Interaction Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Tap Target Sizing
&lt;/h3&gt;

&lt;p&gt;WCAG 2.2 SC 2.5.8 Target Size (Minimum) became a Level AA conformance requirement in October 2023. AA minimum is 24 by 24 CSS pixels; AAA is 44 by 44. Apple HIG recommends 44 by 44 points; Google Material and Lighthouse recommend 48 by 48 dp. The practical 2026 target is 48 by 48 CSS pixels for all primary tap targets, which clears every standard and is comfortable on the average adult thumb (which contacts a ~45 by 45 pixel zone on a typical phone).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.btn&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.link-button&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.tap-target&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;48px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;48px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;align-items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;justify-content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Tap targets must have spacing between them */&lt;/span&gt;
&lt;span class="nc"&gt;.btn&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nc"&gt;.btn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The 8 pixel minimum spacing matters: two adjacent buttons that are each 48 by 48 but share an edge form a 96 pixel wide pair that thumbs sometimes mis tap. Eight pixels of margin (or padding) between them ends mis tap behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.2 Thumb Zone Navigation
&lt;/h3&gt;

&lt;p&gt;The thumb of the average smartphone user reaches comfortably across the bottom two thirds of a vertical phone display. Anything in the top third requires a hand shift or a thumb stretch. The 2026 pattern anchors primary navigation and primary CTAs in the bottom third of the viewport where possible.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;When&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sticky CTA bar at viewport bottom&lt;/td&gt;
&lt;td&gt;Single primary action per page (book, call, buy)&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;position: sticky; bottom: 0&lt;/code&gt; with &lt;code&gt;env(safe-area-inset-bottom)&lt;/code&gt; padding; avoid blocking content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bottom tab bar&lt;/td&gt;
&lt;td&gt;3 to 5 primary destinations&lt;/td&gt;
&lt;td&gt;Always thumb reachable; familiar app model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hamburger that opens a bottom drawer&lt;/td&gt;
&lt;td&gt;Many destinations&lt;/td&gt;
&lt;td&gt;Maintains hamburger discoverability while putting menu items in thumb zone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native pull to refresh&lt;/td&gt;
&lt;td&gt;Listing pages, feeds&lt;/td&gt;
&lt;td&gt;Do not override with custom scroll handlers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  6.3 Gestures and Accessibility
&lt;/h3&gt;

&lt;p&gt;Gesture interactions (swipe, pinch, long press, double tap) must always be paired with a non gesture alternative. WCAG 2.2 SC 2.5.1 Pointer Gestures requires any function operated through a multipoint or path based gesture be operable through a single point activation as well.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Gesture&lt;/th&gt;
&lt;th&gt;Alternative Required&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Swipe to advance carousel&lt;/td&gt;
&lt;td&gt;Previous and next buttons; dot indicator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pinch to zoom image&lt;/td&gt;
&lt;td&gt;Tap to open full screen with zoom button (never disable native pinch zoom)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long press context menu&lt;/td&gt;
&lt;td&gt;Visible three dot menu button&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Double tap to like&lt;/td&gt;
&lt;td&gt;Single tap also likes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  6.4 Visual Feedback
&lt;/h3&gt;

&lt;p&gt;Every tap must produce visible feedback within 100 milliseconds. The most common 2026 failure is over reliance on JavaScript state for visual feedback: the button waits for the click handler to complete and then updates, producing a 200 to 600 millisecond gap with no feedback. The user taps again, then a third time, then the page processes all three taps and the user has triggered the action three times.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.btn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;transform&lt;/span&gt; &lt;span class="m"&gt;0.05s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;background-color&lt;/span&gt; &lt;span class="m"&gt;0.1s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.btn&lt;/span&gt;&lt;span class="nd"&gt;:active&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.97&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand-dark&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.btn&lt;/span&gt;&lt;span class="nd"&gt;:focus-visible&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;outline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--brand&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;outline-offset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;:active&lt;/code&gt; state fires synchronously on touchstart; the browser repaints before the click handler runs. Users feel the response before the JavaScript has a chance to be slow.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Foldable Device Considerations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7.1 The Foldable Device Population in 2026
&lt;/h3&gt;

&lt;p&gt;Foldable devices (Samsung Galaxy Z Fold and Z Flip, OPPO Find N, Google Pixel Fold, Honor Magic V, Xiaomi Mix Fold) have grown from 0.7 percent of global smartphone shipments in 2022 to 5.2 percent in Q1 2026 per IDC's Worldwide Quarterly Mobile Phone Tracker (March 2026 release). They are concentrated in premium audiences: foldable users index 2.4 times higher on mobile commerce conversion per Shopify's 2026 mobile commerce report (sample: 1.1 million Shopify merchants).&lt;/p&gt;

&lt;p&gt;Three folding patterns matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Book fold&lt;/strong&gt; (Galaxy Z Fold, Pixel Fold, Find N): cover ~360 to 414 pixels wide folded, ~720 to 850 pixels wide unfolded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clamshell fold&lt;/strong&gt; (Galaxy Z Flip, Find N Flip): cover 360 pixels wide, internal display 720 pixels wide tall.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tri fold&lt;/strong&gt; (Huawei Mate X3, expected Samsung 2026): three panels with two creases, multi posture layout.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7.2 CSS Posture Queries
&lt;/h3&gt;

&lt;p&gt;The CSS Device Posture API and &lt;code&gt;@media (device-posture: folded)&lt;/code&gt; media query reached broad support across Chromium based browsers in 2024 and Safari iOS 18 in 2025. The 2026 pattern is to detect posture and layout in response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Default: continuous (flat) posture */&lt;/span&gt;
&lt;span class="nc"&gt;.article-layout&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Folded posture: device is partially folded (laptop mode) */&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;device-posture&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;folded&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.article-layout&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nc"&gt;.article-image&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;grid-column&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nc"&gt;.article-text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;grid-column&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Combined with viewport segments, this lets a folded device render an image on the top half panel and body text on the bottom half panel without overlapping the fold crease.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.3 Safe Area Insets
&lt;/h3&gt;

&lt;p&gt;Foldable devices, devices with notches, devices with under display cameras, and devices with rounded corners all require the safe area inset CSS environment variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;safe-area-inset-top&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.footer&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.bottom-nav&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;safe-area-inset-bottom&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.sidebar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;safe-area-inset-left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;padding-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;safe-area-inset-right&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;env()&lt;/code&gt; fallback (second argument) is critical: devices without inset reporting return zero, and the layout reads correctly on every device.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 The Dual Screen Layout Breakpoint
&lt;/h3&gt;

&lt;p&gt;Unfolded book fold devices report a viewport width in the 720 to 850 pixel range. This sits exactly at the conventional tablet breakpoint. The 2026 best practice is to design the 768 pixel breakpoint with foldable layouts in mind:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;768px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.reading-pane&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;minmax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;minmax&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Pair with posture query for explicit dual screen layout */&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;768px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;device-posture&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;folded&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.reading-pane&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;4rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* extra gap to clear the fold crease */&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  8. Apple Intelligence on iOS 19
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8.1 What Apple Intelligence Does on iOS 19
&lt;/h3&gt;

&lt;p&gt;Apple Intelligence shipped on iOS 18 in fall 2024 and reached production maturity with iOS 19 in fall 2025 (point release 19.2 January 2026). Three touchpoints matter for mobile SEO:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spotlight Web&lt;/strong&gt; indexes web content on Apple servers and surfaces results in the Spotlight search bar (pull down on Home Screen) and Safari's address bar suggestions. Spotlight Web is populated by Applebot and Applebot-Extended.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Siri&lt;/strong&gt; routes general knowledge questions to ChatGPT (via the user opt in OpenAI integration shipped with iOS 18.2) or to Apple's own foundation model. When Siri answers from a web source it cites the source and offers an "Open in Safari" affordance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App Intents&lt;/strong&gt; let an app expose typed actions that Siri, Spotlight, and the Apple Intelligence panel can invoke. For a mobile website with a companion app, registering App Intents that map to web URLs lets Apple Intelligence deep link directly into the app from Spotlight or Siri, falling back to the web page if the app is not installed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.2 Registering App Intents
&lt;/h3&gt;

&lt;p&gt;App Intents are declared in Swift on iOS. The mobile SEO relevant piece is the URL mapping: an App Intent that performs a "show product" action exposes both an app URL scheme and an https URL on the marketing site. Apple Intelligence prefers the app URL if the app is installed and falls back to the web URL otherwise.&lt;/p&gt;

&lt;p&gt;Universal Links configuration requires a single file at &lt;code&gt;/.well-known/apple-app-site-association&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"applinks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"apps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"appIDs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"TEAMID.com.example.YourApp"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"components"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/products/*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"comment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Product detail pages"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/articles/*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"comment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Article pages"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/contact"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"comment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Contact page"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"webcredentials"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"apps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"TEAMID.com.example.YourApp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Served from the apex domain over HTTPS with &lt;code&gt;Content-Type: application/json&lt;/code&gt; and no file extension:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;/.well-known/apple-app-site-association&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;default_type&lt;/span&gt; &lt;span class="nc"&gt;application/json&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;alias&lt;/span&gt; &lt;span class="n"&gt;/var/www/sites/example.com/.well-known/apple-app-site-association&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a user taps &lt;code&gt;https://example.com/products/widget&lt;/code&gt; from Siri, Spotlight, Messages, or Mail, iOS checks the apple-app-site-association file, sees the &lt;code&gt;/products/*&lt;/code&gt; pattern, and opens the app. If the app is not installed, Safari opens the URL.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.3 Applebot Extended for Apple Intelligence Training
&lt;/h3&gt;

&lt;p&gt;Apple's training crawler is &lt;code&gt;Applebot-Extended&lt;/code&gt;, distinct from &lt;code&gt;Applebot&lt;/code&gt; (Siri and Spotlight). The two have separate opt out semantics. To allow both: &lt;code&gt;Allow: /&lt;/code&gt; under each user agent block. To opt out of training only while keeping Siri and Spotlight presence: &lt;code&gt;User-agent: Applebot-Extended&lt;/code&gt; + &lt;code&gt;Disallow: /&lt;/code&gt;. For most marketing sites, allow Applebot-Extended: training contributes to model awareness of your brand and content.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.4 Smart App Banner
&lt;/h3&gt;

&lt;p&gt;The Smart App Banner is the small "Open in App" banner Safari shows at the top of mobile pages when a paired iOS app exists. It is a simple meta tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"apple-itunes-app"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"app-id=123456789, app-argument=https://example.com/products/widget"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;app-argument&lt;/code&gt; value is the URL passed into the app when the user taps "Open". This lets a single web URL deep link into the corresponding app screen.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.5 Android App Links
&lt;/h3&gt;

&lt;p&gt;The Android equivalent is the &lt;code&gt;assetlinks.json&lt;/code&gt; file served from &lt;code&gt;/.well-known/assetlinks.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"relation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"delegate_permission/common.handle_all_urls"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"namespace"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"android_app"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"package_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"com.example.yourapp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sha256_cert_fingerprints"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nginx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;/.well-known/assetlinks.json&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;default_type&lt;/span&gt; &lt;span class="nc"&gt;application/json&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;alias&lt;/span&gt; &lt;span class="n"&gt;/var/www/sites/example.com/.well-known/assetlinks.json&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Combined with &lt;code&gt;&amp;lt;intent-filter&amp;gt;&lt;/code&gt; declarations in the Android manifest, this enables App Links: tapping a web URL on an Android device with the app installed opens the app directly.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. AMP Status 2026
&lt;/h2&gt;

&lt;h3&gt;
  
  
  9.1 AMP Is Obsolete
&lt;/h3&gt;

&lt;p&gt;Google dropped the AMP requirement for the Top Stories carousel in June 2021. Google retired the AMP page experience signal in 2022. AMP cache hosting on &lt;code&gt;google.com/amp/s/...&lt;/code&gt; URLs has been deprioritized since 2023. The AMP project has not received material updates since 2023.&lt;/p&gt;

&lt;p&gt;In 2026, AMP is a finished pattern. New sites should not implement AMP. Existing AMP pages should be sunset by 301 redirect to the canonical responsive version. Mobile responsive pages built to the patterns in this framework outperform AMP on Core Web Vitals and earn the same Top Stories eligibility without the AMP runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.2 Sunsetting AMP
&lt;/h3&gt;

&lt;p&gt;For sites still serving AMP pages, the sunset procedure:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inventory&lt;/strong&gt;. List all AMP URLs from GSC &lt;code&gt;/amp/&lt;/code&gt; paths, sitemap, and internal links with &lt;code&gt;rel="amphtml"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redirect&lt;/strong&gt;. 301 redirect each AMP URL to its canonical responsive URL. nginx: &lt;code&gt;location ~ ^/amp/(.*)$ { return 301 /$1; }&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove &lt;code&gt;&amp;lt;link rel="amphtml"&amp;gt;&lt;/code&gt; tags&lt;/strong&gt; from canonical pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update sitemap.xml&lt;/strong&gt; to remove AMP URLs; resubmit in GSC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Request recrawl&lt;/strong&gt; of high traffic canonical pages in GSC URL Inspection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decommission the runtime&lt;/strong&gt;. Remove AMP script tags, AMP build pipelines, &lt;code&gt;amp-*&lt;/code&gt; custom elements from the codebase.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  9.3 What Replaces AMP
&lt;/h3&gt;

&lt;p&gt;The 2026 stack that earns the speed and eligibility AMP once provided:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mobile responsive HTML with the patterns in Section 4.&lt;/li&gt;
&lt;li&gt;Mobile Core Web Vitals targets from Section 5.&lt;/li&gt;
&lt;li&gt;HTTP/3 enabled in nginx (Section 13).&lt;/li&gt;
&lt;li&gt;Critical CSS inlined; non critical CSS deferred.&lt;/li&gt;
&lt;li&gt;Hero image preloaded; below the fold lazy loaded.&lt;/li&gt;
&lt;li&gt;JavaScript deferred or async; under 250 KB executed before interaction.&lt;/li&gt;
&lt;li&gt;News articles include &lt;code&gt;Article&lt;/code&gt; or &lt;code&gt;NewsArticle&lt;/code&gt; schema with &lt;code&gt;datePublished&lt;/code&gt;, &lt;code&gt;dateModified&lt;/code&gt;, &lt;code&gt;author&lt;/code&gt;, &lt;code&gt;headline&lt;/code&gt;, and &lt;code&gt;image&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Top Stories eligibility no longer requires AMP. It requires the site to be a Google News approved publisher (via the Google Publisher Center) and the article to meet Top Stories quality signals.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Mobile Page Speed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  10.1 The Above the Fold Render Budget
&lt;/h3&gt;

&lt;p&gt;The 2026 mobile above the fold budget for a marketing site:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML document under 30 KB compressed.&lt;/li&gt;
&lt;li&gt;Critical CSS inlined, under 14 KB inside &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;JavaScript executed before interaction under 250 KB compressed.&lt;/li&gt;
&lt;li&gt;Hero image under 100 KB compressed.&lt;/li&gt;
&lt;li&gt;Custom fonts under 50 KB total (two weights, woff2).&lt;/li&gt;
&lt;li&gt;Total above the fold transfer under 500 KB.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The 14 KB inline CSS number derives from the initial TCP congestion window: 14 KB fits in the first round trip of a fresh TCP connection. CSS inlined inside the HTML document inside the first 14 KB renders without a second network request.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.2 Image Optimization for Mobile
&lt;/h3&gt;

&lt;p&gt;Format priority: AVIF primary, WebP fallback, JPEG (progressive) or PNG (icons) legacy fallback. Responsive images use &lt;code&gt;srcset&lt;/code&gt; and &lt;code&gt;sizes&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/img/hero-800w.avif"&lt;/span&gt;
     &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"/img/hero-400w.avif 400w,
             /img/hero-800w.avif 800w,
             /img/hero-1200w.avif 1200w,
             /img/hero-1600w.avif 1600w"&lt;/span&gt;
     &lt;span class="na"&gt;sizes=&lt;/span&gt;&lt;span class="s"&gt;"(min-width: 1024px) 1200px, 100vw"&lt;/span&gt;
     &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"1200"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"800"&lt;/span&gt;
     &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;
     &lt;span class="na"&gt;fetchpriority=&lt;/span&gt;&lt;span class="s"&gt;"high"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;srcset&lt;/code&gt; width descriptors handle device pixel ratio automatically; avoid manual 1x and 2x suffix logic (legacy pattern). Hero images use &lt;code&gt;loading="eager"&lt;/code&gt; (default); below the fold images use &lt;code&gt;loading="lazy"&lt;/code&gt;. Add &lt;code&gt;decoding="async"&lt;/code&gt; to non critical images so the browser may decode off the main thread.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.3 HTTP/3 Performance
&lt;/h3&gt;

&lt;p&gt;HTTP/3 over QUIC reduces handshake round trips on lossy mobile connections. Per HTTPArchive's 2024 Web Almanac performance chapter (analysis sample: 8.9 million origins), sites serving HTTP/3 see a 200 to 400 millisecond improvement in mobile TTFB at the 75th percentile versus HTTP/2 on the same hosting. The improvement is larger on cellular connections with packet loss and smaller on wifi with low loss.&lt;/p&gt;

&lt;p&gt;nginx 1.25 and later supports HTTP/3 natively. The configuration enables both HTTP/2 (over TCP+TLS) and HTTP/3 (over QUIC+TLS) on the same port. Section 13 walks through the configuration on Bubbles.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.4 Lazy Loading
&lt;/h3&gt;

&lt;p&gt;Native lazy loading via the &lt;code&gt;loading="lazy"&lt;/code&gt; attribute is broadly supported across mobile browsers in 2026. It does not require a JavaScript library. The browser decides when to load based on viewport proximity heuristics.&lt;/p&gt;

&lt;p&gt;Rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hero image: never lazy load. &lt;code&gt;loading="eager"&lt;/code&gt; (default) or omitted.&lt;/li&gt;
&lt;li&gt;Above the fold images: never lazy load.&lt;/li&gt;
&lt;li&gt;Below the fold images: always lazy load.&lt;/li&gt;
&lt;li&gt;Iframes: lazy load with &lt;code&gt;loading="lazy"&lt;/code&gt; on the &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; tag.&lt;/li&gt;
&lt;li&gt;Background images set via CSS: lazy loading does not apply; the browser loads when the element is in the render tree. To lazy load CSS background images, use a JavaScript IntersectionObserver pattern.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.5 Service Workers and Offline
&lt;/h3&gt;

&lt;p&gt;Service workers cache critical assets aggressively and serve them on subsequent visits without a network round trip. For high return visit sites, service workers reduce repeat visit LCP by 800 to 1200 milliseconds at the 75th percentile.&lt;/p&gt;

&lt;p&gt;The Workbox library ships well tested cache strategies. A typical mobile marketing site uses cache first for static assets and network first for HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// sw.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;precacheAndRoute&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;workbox-precaching&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;registerRoute&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;workbox-routing&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CacheFirst&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;NetworkFirst&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;workbox-strategies&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nf"&gt;precacheAndRoute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;__WB_MANIFEST&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;registerRoute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;style&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;script&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;font&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CacheFirst&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;cacheName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;static-assets&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;registerRoute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mode&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;navigate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;NetworkFirst&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;cacheName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;pages&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Service workers must be served from HTTPS. Scope is constrained to the path they are served from (&lt;code&gt;/sw.js&lt;/code&gt; controls the entire origin; &lt;code&gt;/app/sw.js&lt;/code&gt; controls only &lt;code&gt;/app/&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Mobile Crawler Behavior
&lt;/h2&gt;

&lt;h3&gt;
  
  
  11.1 The Crawler User Agents in 2026
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Crawler&lt;/th&gt;
&lt;th&gt;UA token&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;DNS verification&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Googlebot Smartphone&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Googlebot/2.1&lt;/code&gt; + &lt;code&gt;Mobile&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Primary Google mobile first indexing crawler&lt;/td&gt;
&lt;td&gt;reverse DNS to googlebot.com or google.com&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bingbot Mobile&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;bingbot/2.0&lt;/code&gt; + &lt;code&gt;Mobile&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Bing search and Copilot&lt;/td&gt;
&lt;td&gt;reverse DNS to search.msn.com&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applebot&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Applebot/&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Siri and Spotlight Web&lt;/td&gt;
&lt;td&gt;reverse DNS to applebot.apple.com&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applebot-Extended&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Applebot-Extended&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Apple Intelligence training&lt;/td&gt;
&lt;td&gt;same as Applebot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAI-SearchBot&lt;/td&gt;
&lt;td&gt;&lt;code&gt;OAI-SearchBot/1.0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenAI search index (ChatGPT search)&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT-User&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ChatGPT-User/1.0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ChatGPT real time fetch (user initiated)&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPTBot&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GPTBot&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenAI training&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PerplexityBot&lt;/td&gt;
&lt;td&gt;&lt;code&gt;PerplexityBot/1.0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Perplexity index&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Perplexity-User&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Perplexity-User&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Perplexity real time fetch&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ClaudeBot&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ClaudeBot/1.0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Anthropic Claude training and search&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meta-ExternalAgent&lt;/td&gt;
&lt;td&gt;&lt;code&gt;meta-externalagent&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Meta AI Llama training&lt;/td&gt;
&lt;td&gt;n/a&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;All current AI crawlers request mobile responsive content and treat the mobile rendering as canonical.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.2 Verifying Mobile Crawl in Server Logs
&lt;/h3&gt;

&lt;p&gt;To check whether Googlebot Smartphone is reaching priority URLs and which AI crawlers are visiting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Last 7 days of Googlebot Smartphone hits, grouped by URL&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;zcat /var/log/nginx/access.log.&lt;span class="k"&gt;*&lt;/span&gt;.gz | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"Googlebot.*Mobile"&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $7}'&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nb"&gt;sort&lt;/span&gt; | &lt;span class="nb"&gt;uniq&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-rn&lt;/span&gt; | &lt;span class="nb"&gt;head&lt;/span&gt; &lt;span class="nt"&gt;-20&lt;/span&gt;

&lt;span class="c"&gt;# Distinct mobile crawler user agents seen this week&lt;/span&gt;
&lt;span class="nb"&gt;sudo grep&lt;/span&gt; &lt;span class="nt"&gt;-E&lt;/span&gt; &lt;span class="s2"&gt;"Googlebot|Bingbot|Applebot|OAI-SearchBot|PerplexityBot|ClaudeBot"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  /var/log/nginx/access.log | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt;&lt;span class="s1"&gt;'"'&lt;/span&gt; &lt;span class="s1"&gt;'{print $6}'&lt;/span&gt; | &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  11.3 robots.txt for Mobile and AI Crawlers
&lt;/h3&gt;

&lt;p&gt;Allow all legitimate mobile crawlers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight robot_framework"&gt;&lt;code&gt;User-agent: Googlebot&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Allow:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;User-agent:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Bingbot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Allow:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;User-agent:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Applebot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Allow:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;User-agent:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Applebot-Extended&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Allow:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;User-agent:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;OAI-SearchBot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Allow:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;User-agent:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ChatGPT-User&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Allow:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;User-agent:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;GPTBot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Allow:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;User-agent:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;PerplexityBot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Allow:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;User-agent:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Perplexity-User&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Allow:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;User-agent:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;ClaudeBot&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Allow:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;User-agent:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;meta-externalagent&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;Allow:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;Sitemap:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://example.com/sitemap.xml&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rate limiting at nginx (optional, for high traffic origins) uses &lt;code&gt;limit_req_zone&lt;/code&gt; keyed on &lt;code&gt;$binary_remote_addr&lt;/code&gt; with separate zones for &lt;code&gt;Googlebot&lt;/code&gt;, &lt;code&gt;Bingbot&lt;/code&gt;, &lt;code&gt;Applebot&lt;/code&gt; (search engine class) and &lt;code&gt;OAI-SearchBot&lt;/code&gt;, &lt;code&gt;PerplexityBot&lt;/code&gt;, &lt;code&gt;ClaudeBot&lt;/code&gt;, &lt;code&gt;GPTBot&lt;/code&gt; (AI class).&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Mobile Schema Considerations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  12.1 Schema Parity Is Mandatory
&lt;/h3&gt;

&lt;p&gt;Schema markup must be present in the mobile rendering. The most common 2026 schema failure mode is schema injected by a desktop only GTM container or rendered into a sidebar that is &lt;code&gt;display: none&lt;/code&gt; on mobile. Either pattern means the mobile Googlebot sees no schema.&lt;/p&gt;

&lt;p&gt;The audit: fetch the URL with Googlebot Smartphone user agent and &lt;code&gt;grep&lt;/code&gt; for &lt;code&gt;application/ld+json&lt;/code&gt;. The count of script blocks must match the count seen with the desktop user agent. The contents must be equivalent.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.2 LocalBusiness for Apple Maps and Google Maps Mobile Cards
&lt;/h3&gt;

&lt;p&gt;LocalBusiness schema with geo coordinates triggers map cards in mobile search results on both Apple Maps integrated results (iOS Spotlight) and Google Maps integrated results (Android Chrome, iOS Chrome). The mobile card includes call, directions, and website tap targets that bypass the SERP entirely.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;LocalBusiness&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/#localbusiness&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Example Business&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;telephone&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;+15055551234&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;address&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PostalAddress&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;streetAddress&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;123 Main St&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;addressLocality&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Anytown&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;addressRegion&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;NM&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;postalCode&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;87000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;addressCountry&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;US&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;geo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GeoCoordinates&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;latitude&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;35.0844&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;longitude&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;106.6504&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openingHoursSpecification&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OpeningHoursSpecification&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dayOfWeek&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Monday&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tuesday&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Wednesday&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Thursday&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Friday&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;opens&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;09:00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;closes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;17:00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hasMap&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://maps.google.com/?cid=1234567890&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sameAs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.facebook.com/examplebusiness&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.instagram.com/examplebusiness&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;hasMap&lt;/code&gt; field with a Google Maps CID URL links the schema to a specific Google Business Profile entity. The &lt;code&gt;geo&lt;/code&gt; block lets Apple Maps surface the same business in iOS Spotlight Web results.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.3 Product Schema and Mobile Shopping
&lt;/h3&gt;

&lt;p&gt;Product schema price and availability freshness affects mobile shopping search cards. Stale prices (older than 24 hours per Google's product feed freshness guidelines, updated November 2024) trigger Google to demote the product from the Shopping carousel and from mobile rich results.&lt;/p&gt;

&lt;p&gt;For sites with rapidly changing prices, the recommendation is to render product schema server side with a current timestamp, not client side via JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Product&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Example Widget&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/img/widget.avif&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sku&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WIDGET-123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;brand&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Brand&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Example&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;offers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Offer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/products/widget&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;priceCurrency&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;USD&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;price&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;49.99&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;priceValidUntil&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-12-31&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;availability&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org/InStock&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;itemCondition&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org/NewCondition&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;seller&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Organization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Example Inc.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  12.4 MobileApplication Schema
&lt;/h3&gt;

&lt;p&gt;For pages that describe a mobile app, MobileApplication schema lets Google and Bing surface app install cards in mobile search:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MobileApplication&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Example App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;operatingSystem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;iOS, Android&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;applicationCategory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;BusinessApplication&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;downloadUrl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://apps.apple.com/app/id123456789&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://play.google.com/store/apps/details?id=com.example.yourapp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;offers&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Offer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;price&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;priceCurrency&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;USD&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;aggregateRating&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AggregateRating&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ratingValue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;4.7&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ratingCount&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1234&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  12.5 SpeakableSpecification for Voice Assistants
&lt;/h3&gt;

&lt;p&gt;SpeakableSpecification flags content blocks that voice assistants should read aloud. Primarily relevant for NewsArticle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;NewsArticle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;headline&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;datePublished&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2026-05-14T08:00:00-06:00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;speakable&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;SpeakableSpecification&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cssSelector&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.article-summary&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.article-tldr&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The CSS selectors point at the elements with the speakable content. Voice assistants (Google Assistant, Siri reading via Apple Intelligence) prefer these blocks for short audio answers.&lt;/p&gt;

&lt;p&gt;See &lt;a href="//framework-schema.md"&gt;framework-schema.md&lt;/a&gt; for the full schema graph specification and &lt;a href="//framework-voicesearch.md"&gt;framework-voicesearch.md&lt;/a&gt; for the voice assistant integration patterns.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Mobile Forms and Conversion
&lt;/h2&gt;

&lt;h3&gt;
  
  
  13.1 Semantic Input Types
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;type&lt;/code&gt; attribute on &lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; elements determines which keyboard the mobile OS surfaces:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;type&lt;/th&gt;
&lt;th&gt;Keyboard&lt;/th&gt;
&lt;th&gt;autocomplete&lt;/th&gt;
&lt;th&gt;inputmode alt&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;email&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Email keyboard (@ and . prominent)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;email&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;email&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Numeric phone keyboard&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;tel&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;number&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Numeric keyboard&lt;/td&gt;
&lt;td&gt;(varies)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;numeric&lt;/code&gt; (prefer on &lt;code&gt;type="text"&lt;/code&gt; to avoid spinner controls)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;URL keyboard (/ and .com prominent)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;url&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;date&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Native date picker on iOS and Android&lt;/td&gt;
&lt;td&gt;(none)&lt;/td&gt;
&lt;td&gt;(none)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Search keyboard (Search instead of Return)&lt;/td&gt;
&lt;td&gt;(none)&lt;/td&gt;
&lt;td&gt;(none)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;password&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Password keyboard&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;new-password&lt;/code&gt; (signup) or &lt;code&gt;current-password&lt;/code&gt; (login)&lt;/td&gt;
&lt;td&gt;(none)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  13.2 The autocomplete Attribute
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;autocomplete&lt;/code&gt; attribute is the single largest mobile form conversion lever. Without it, mobile users type every field by hand. With it, the OS surfaces saved values and the user taps to fill.&lt;/p&gt;

&lt;p&gt;The full list of standardized autocomplete values is in the HTML Living Standard. The 2026 essentials for a contact form:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"/api/contact"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"POST"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Full name&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;autocomplete=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Email&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;autocomplete=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"tel"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Phone&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"tel"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"tel"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"tel"&lt;/span&gt; &lt;span class="na"&gt;autocomplete=&lt;/span&gt;&lt;span class="s"&gt;"tel"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"organization"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Company&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"organization"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"organization"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;autocomplete=&lt;/span&gt;&lt;span class="s"&gt;"organization"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Message&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;textarea&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"message"&lt;/span&gt; &lt;span class="na"&gt;required&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Send&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a checkout form, autocomplete values are &lt;code&gt;cc-name&lt;/code&gt;, &lt;code&gt;cc-number&lt;/code&gt;, &lt;code&gt;cc-exp&lt;/code&gt;, &lt;code&gt;cc-csc&lt;/code&gt; for card details and &lt;code&gt;street-address&lt;/code&gt;, &lt;code&gt;address-level2&lt;/code&gt; (city), &lt;code&gt;address-level1&lt;/code&gt; (state), &lt;code&gt;postal-code&lt;/code&gt; for shipping. Numeric fields add &lt;code&gt;inputmode="numeric"&lt;/code&gt; to surface the numeric keypad without forcing &lt;code&gt;type="number"&lt;/code&gt; spinner controls.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.3 iOS Password Autofill Integration
&lt;/h3&gt;

&lt;p&gt;iOS Password Autofill (Settings &amp;gt; Passwords) suggests stored credentials at login forms and offers strong password generation at signup forms. The integration requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A login form with &lt;code&gt;&amp;lt;input type="email" autocomplete="username"&amp;gt;&lt;/code&gt; (or &lt;code&gt;autocomplete="email"&lt;/code&gt;) and &lt;code&gt;&amp;lt;input type="password" autocomplete="current-password"&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A signup form with &lt;code&gt;&amp;lt;input type="email" autocomplete="username"&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;input type="password" autocomplete="new-password"&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The site domain associated with the app through &lt;code&gt;/.well-known/apple-app-site-association&lt;/code&gt; (the &lt;code&gt;webcredentials&lt;/code&gt; section, see Section 8.2).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When configured correctly, iOS users see their stored password offered above the keyboard with a single tap to fill.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.4 Mobile Form Layout
&lt;/h3&gt;

&lt;p&gt;Single column. Each field full width. Labels above the input, not beside (side labels truncate or wrap on narrow viewports). Submit button visible without scroll where possible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.form&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-direction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;column&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.form&lt;/span&gt; &lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.25rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;600&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.form&lt;/span&gt; &lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.form&lt;/span&gt; &lt;span class="nt"&gt;textarea&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nc"&gt;.form&lt;/span&gt; &lt;span class="nt"&gt;select&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.75rem&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/* prevents iOS auto zoom */&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--border&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;48px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.form&lt;/span&gt; &lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"submit"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;48px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.875rem&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font-weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;600&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  13.5 Form Validation on Mobile
&lt;/h3&gt;

&lt;p&gt;Native HTML validation (&lt;code&gt;required&lt;/code&gt;, &lt;code&gt;pattern&lt;/code&gt;, &lt;code&gt;type="email"&lt;/code&gt;) works well on mobile. Custom JavaScript validation should run on blur or on submit, not on every keystroke (which thrashes the layout and breaks autofill).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
       &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
       &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; 
       &lt;span class="na"&gt;autocomplete=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
       &lt;span class="na"&gt;required&lt;/span&gt; 
       &lt;span class="na"&gt;aria-describedby=&lt;/span&gt;&lt;span class="s"&gt;"email-error"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"email-error"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"alert"&lt;/span&gt; &lt;span class="na"&gt;aria-live=&lt;/span&gt;&lt;span class="s"&gt;"polite"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;aria-live="polite"&lt;/code&gt; region announces validation errors to screen readers without interrupting the user.&lt;/p&gt;




&lt;h2&gt;
  
  
  14. Bubbles Hosted Mobile Testing
&lt;/h2&gt;

&lt;h3&gt;
  
  
  14.1 The Bubbles Stack
&lt;/h3&gt;

&lt;p&gt;The reference deployment is self hosted on Debian at IP 169.155.162.118. nginx serves every site from &lt;code&gt;/var/www/sites/[domain]/&lt;/code&gt;. No third party CDN sits between origin and user. The stack is single tier: client to nginx to filesystem (static) or to upstream FastAPI or Node service (dynamic).&lt;/p&gt;

&lt;p&gt;Self hosted means full server log access, full TLS configuration control, full HTTP/3 tuning, full ability to inspect crawler behavior, and zero dependency on a third party SLA. The trade off is that you operate the box: you provision, you patch, you monitor.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.2 nginx HTTP/3 Configuration
&lt;/h3&gt;

&lt;p&gt;nginx 1.25 and later includes HTTP/3 over QUIC support in mainline. The configuration enables HTTP/3 on UDP port 443 alongside HTTP/2 on TCP port 443:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;quic&lt;/span&gt; &lt;span class="s"&gt;reuseport&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:443&lt;/span&gt; &lt;span class="s"&gt;quic&lt;/span&gt; &lt;span class="s"&gt;reuseport&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kn"&gt;http2&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;http3&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;http3_hq&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kn"&gt;quic_retry&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;ssl_early_data&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Alt-Svc&lt;/span&gt; &lt;span class="s"&gt;'h3=":443"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kn"&gt;ma=86400,&lt;/span&gt; &lt;span class="s"&gt;h2=":443"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kn"&gt;ma=86400'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="n"&gt;/var/www/sites/example.com/&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt;     &lt;span class="n"&gt;/etc/letsencrypt/live/example.com/fullchain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="n"&gt;/etc/letsencrypt/live/example.com/privkey.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kn"&gt;ssl_protocols&lt;/span&gt; &lt;span class="s"&gt;TLSv1.2&lt;/span&gt; &lt;span class="s"&gt;TLSv1.3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;ssl_session_cache&lt;/span&gt; &lt;span class="s"&gt;shared:SSL:50m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;ssl_session_timeout&lt;/span&gt; &lt;span class="s"&gt;1d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="c1"&gt;# ... rest of config&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;Alt-Svc&lt;/code&gt; header advertises HTTP/3 support to clients. Modern browsers see the header on the first HTTP/2 response and upgrade subsequent connections to HTTP/3.&lt;/p&gt;

&lt;p&gt;UDP port 443 must be opened on the host firewall:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 443/udp
&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 443/tcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  14.3 Playwright Mobile Emulation on Linux
&lt;/h3&gt;

&lt;p&gt;Playwright runs headless Chromium, Firefox, and WebKit on Linux with device emulation profiles for current mobile devices. Install on the Bubbles host:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nodejs npm
&lt;span class="nb"&gt;sudo &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; playwright
&lt;span class="nb"&gt;sudo &lt;/span&gt;npx playwright &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--with-deps&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A mobile emulation script (&lt;code&gt;mobile-test.js&lt;/code&gt;) that iterates over device profiles, captures LCP, and writes a full page screenshot per device:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;devices&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;playwright&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;profiles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;iPhone 15 Pro&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;iPhone SE&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pixel 8&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Galaxy S24 Ultra&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;iPad Pro 11&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;profiles&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newContext&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;devices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="na"&gt;locale&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;en-US&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newPage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://example.com/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;lcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;evaluate&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;r&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;PerformanceObserver&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;r&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getEntries&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;pop&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;startTime&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;observe&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;largest-contentful-paint&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;buffered&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}));&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;: LCP=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;lcp&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;ms`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;screenshot&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`/tmp/screens/&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;\s&lt;/span&gt;&lt;span class="sr"&gt;+/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;.png`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fullPage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run with &lt;code&gt;mkdir -p /tmp/screens &amp;amp;&amp;amp; node mobile-test.js&lt;/code&gt;. Screenshots reveal layout issues that lab Lighthouse runs miss.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.4 Self Hosted Selenium Grid for Real Device Coverage
&lt;/h3&gt;

&lt;p&gt;Browserstack and LambdaTest are third party device clouds at $30 to $80 per user per month. The self hosted alternative is a Selenium Grid running on the Bubbles host with Appium drivers for real mobile devices connected via USB or wifi adb.&lt;/p&gt;

&lt;p&gt;Minimal Debian setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; openjdk-17-jdk
wget https://github.com/SeleniumHQ/selenium/releases/download/selenium-4.18.0/selenium-server-4.18.0.jar
java &lt;span class="nt"&gt;-jar&lt;/span&gt; selenium-server-4.18.0.jar standalone &lt;span class="nt"&gt;--host&lt;/span&gt; 0.0.0.0 &lt;span class="nt"&gt;--port&lt;/span&gt; 4444

&lt;span class="nb"&gt;sudo &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; appium
appium driver &lt;span class="nb"&gt;install &lt;/span&gt;uiautomator2   &lt;span class="c"&gt;# Android (Pixel via USB with debugging)&lt;/span&gt;
appium &lt;span class="nt"&gt;--port&lt;/span&gt; 4723
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify device with &lt;code&gt;adb devices&lt;/code&gt;. The Grid endpoint is then at &lt;code&gt;http://bubbles:4444&lt;/code&gt; on the LAN and Playwright or any Selenium client can dispatch tests to it. For iOS coverage, an Apple toolchain host (Mac) runs &lt;code&gt;appium driver install xcuitest&lt;/code&gt; with USB connected iOS devices; the Bubbles Grid forwards iOS test dispatches to the Mac.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.5 Self Hosted RUM for Mobile Field Data
&lt;/h3&gt;

&lt;p&gt;A self hosted Real User Monitoring endpoint collects mobile Core Web Vitals from real visitors without sending data to a third party. A lightweight collector posts metrics to a nginx logging endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"module"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;onLCP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onINP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onCLS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onTTFB&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onFCP&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://unpkg.com/web-vitals@4?module&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;send&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendBeacon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/rum&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;rating&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rating&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;ua&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="nf"&gt;onLCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nf"&gt;onINP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nf"&gt;onCLS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nf"&gt;onTTFB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nf"&gt;onFCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;nginx logs the POST body:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;log_format&lt;/span&gt; &lt;span class="s"&gt;rum_format&lt;/span&gt; &lt;span class="s"&gt;escape=json&lt;/span&gt; &lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="kn"&gt;"time":"&lt;/span&gt;&lt;span class="nv"&gt;$time_iso8601&lt;/span&gt;&lt;span class="s"&gt;","ip":"&lt;/span&gt;&lt;span class="nv"&gt;$remote_addr&lt;/span&gt;&lt;span class="s"&gt;","body":&lt;/span&gt;&lt;span class="nv"&gt;$request_body&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;/rum&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="n"&gt;/var/log/nginx/rum.log&lt;/span&gt; &lt;span class="s"&gt;rum_format&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;if&lt;/span&gt; &lt;span class="s"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$request_method&lt;/span&gt; &lt;span class="s"&gt;!=&lt;/span&gt; &lt;span class="s"&gt;POST)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;405&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;204&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The log file is JSONL and parseable with &lt;code&gt;jq&lt;/code&gt; to extract p75 LCP, INP, CLS per day.&lt;/p&gt;

&lt;h3&gt;
  
  
  14.6 Mobile Emulation Test Cadence
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cadence&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Per commit&lt;/td&gt;
&lt;td&gt;Lighthouse mobile run on the changed page (CI step); Playwright screenshot diff on iPhone 15 and Pixel 8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Per release&lt;/td&gt;
&lt;td&gt;Playwright suite across five device profiles; real device smoke test on one iPhone and one Android; Lighthouse on top five URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weekly&lt;/td&gt;
&lt;td&gt;GSC URL Inspection on five priority URLs (verify Crawled As is Googlebot smartphone); RUM log review for p75 LCP, INP, CLS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;td&gt;Cross device responsive review at 320, 360, 375, 768, 1024 viewports; real device session on a foldable (if applicable); service worker cache audit&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  15. Audit Mode
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MS1&lt;/td&gt;
&lt;td&gt;Viewport meta with &lt;code&gt;viewport-fit=cover&lt;/code&gt;, no &lt;code&gt;user-scalable=no&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS2&lt;/td&gt;
&lt;td&gt;Responsive design (no separate m.example.com, no AMP only path)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS3&lt;/td&gt;
&lt;td&gt;Content parity verified between Googlebot Smartphone and Googlebot Desktop&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS4&lt;/td&gt;
&lt;td&gt;Schema parity verified between mobile and desktop renderings&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS5&lt;/td&gt;
&lt;td&gt;Touch targets minimum 48 by 48 CSS pixels, 8 pixel spacing&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS6&lt;/td&gt;
&lt;td&gt;Body text minimum 16 pixels on mobile&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS7&lt;/td&gt;
&lt;td&gt;Pinch zoom enabled&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS8&lt;/td&gt;
&lt;td&gt;Mobile LCP p75 under 2.5 seconds (field data)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS9&lt;/td&gt;
&lt;td&gt;Mobile INP p75 under 200 milliseconds (field data)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS10&lt;/td&gt;
&lt;td&gt;Mobile CLS p75 under 0.1 (field data)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS11&lt;/td&gt;
&lt;td&gt;nginx serves HTTP/3 over QUIC&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS12&lt;/td&gt;
&lt;td&gt;Hero image preloaded; below the fold lazy loaded&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS13&lt;/td&gt;
&lt;td&gt;Critical CSS inlined under 14 KB; non critical deferred&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS14&lt;/td&gt;
&lt;td&gt;JavaScript executed before interaction under 250 KB&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS15&lt;/td&gt;
&lt;td&gt;Click to call, click to map, click to SMS where appropriate&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS16&lt;/td&gt;
&lt;td&gt;Forms use semantic input types and autocomplete attributes&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS17&lt;/td&gt;
&lt;td&gt;Forms use &lt;code&gt;inputmode&lt;/code&gt; where appropriate&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS18&lt;/td&gt;
&lt;td&gt;No intrusive interstitials (cookie banner under 30 percent viewport)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS19&lt;/td&gt;
&lt;td&gt;Mobile navigation accessible via keyboard, screen reader, touch&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS20&lt;/td&gt;
&lt;td&gt;Container queries used for component level responsive behavior&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS21&lt;/td&gt;
&lt;td&gt;Safe area inset CSS used (&lt;code&gt;env(safe-area-inset-*)&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS22&lt;/td&gt;
&lt;td&gt;Foldable posture queries considered (if foldable audience present)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS23&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;apple-app-site-association&lt;/code&gt; and &lt;code&gt;assetlinks.json&lt;/code&gt; served (if apps exist)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS24&lt;/td&gt;
&lt;td&gt;Smart App Banner meta tag present (if iOS app exists)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS25&lt;/td&gt;
&lt;td&gt;App Intents registered for Apple Intelligence (if iOS app exists)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS26&lt;/td&gt;
&lt;td&gt;Universal Links and Android App Links tested on real devices&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS27&lt;/td&gt;
&lt;td&gt;LocalBusiness schema with geo coordinates (if local business)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS28&lt;/td&gt;
&lt;td&gt;MobileApplication and SpeakableSpecification schema where applicable&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS29&lt;/td&gt;
&lt;td&gt;AMP pages sunset (no &lt;code&gt;/amp/&lt;/code&gt; URLs serving in 2026)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS30&lt;/td&gt;
&lt;td&gt;Googlebot Smartphone verified in server logs in last 7 days&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS31&lt;/td&gt;
&lt;td&gt;OAI-SearchBot or PerplexityBot verified in server logs in last 30 days&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS32&lt;/td&gt;
&lt;td&gt;Applebot verified in server logs in last 30 days&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS33&lt;/td&gt;
&lt;td&gt;Service worker registered with cache strategy (optional, recommended)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS34&lt;/td&gt;
&lt;td&gt;Playwright mobile suite runs on every release&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS35&lt;/td&gt;
&lt;td&gt;Self hosted RUM collecting mobile field data&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS36&lt;/td&gt;
&lt;td&gt;Real device pool with at least one iPhone and one Android&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS37&lt;/td&gt;
&lt;td&gt;GSC URL Inspection confirms Crawled As Googlebot smartphone for priority URLs&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS38&lt;/td&gt;
&lt;td&gt;GSC Mobile Usability report at zero issues&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MS39&lt;/td&gt;
&lt;td&gt;Mobile traffic share tracked in GA4&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 39. World class mobile SEO posture: 34+ of 39.&lt;/p&gt;




&lt;h2&gt;
  
  
  16. Common Mistakes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Treating mobile as a port from desktop&lt;/strong&gt;. The 2026 pattern is mobile first; design for 320 pixels and progressively enhance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Setting &lt;code&gt;user-scalable=no&lt;/code&gt;&lt;/strong&gt;. Accessibility failure; Lighthouse flag.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tap targets under 48 by 48 pixels&lt;/strong&gt;. Frustrates users; rage taps signal poor UX.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hover only interactions&lt;/strong&gt;. Touch users cannot access; AI assistants cannot extract.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile schema parity failures&lt;/strong&gt;. Schema rendered only on desktop (via GTM or hidden sidebar) is invisible to mobile first indexing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stale AMP pages&lt;/strong&gt;. AMP is obsolete; sunset by 301 redirect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hero images lazy loaded&lt;/strong&gt;. Always &lt;code&gt;loading="eager"&lt;/code&gt; for hero; lazy load below the fold only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript over 250 KB before interaction&lt;/strong&gt;. Mobile INP suffers; mid range phones experience the worst.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wrong input types&lt;/strong&gt;. &lt;code&gt;type="text"&lt;/code&gt; where &lt;code&gt;type="email"&lt;/code&gt; or &lt;code&gt;type="tel"&lt;/code&gt; belongs forces the wrong keyboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing autocomplete attributes&lt;/strong&gt;. Largest mobile conversion lever left on the table.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intrusive mobile interstitials&lt;/strong&gt;. Mobile interstitial penalty active since 2017, still enforced.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No HTTP/3 on nginx&lt;/strong&gt;. 200 to 400 ms TTFB improvement available at p75 on cellular.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No real device testing&lt;/strong&gt;. Emulators miss safe area, foldable posture, and real network variance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ignoring foldable devices&lt;/strong&gt;. 5.2 percent of premium audiences in 2026; high value conversion segment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No App Intents registration&lt;/strong&gt;. iOS apps with companion sites miss Apple Intelligence deep link surface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing apple-app-site-association or assetlinks.json&lt;/strong&gt;. Universal Links and Android App Links broken.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No self hosted RUM&lt;/strong&gt;. Mobile field data depends on CrUX (28 day lag, aggregate only).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  End of Framework Document
&lt;/h2&gt;

&lt;p&gt;This framework specifies the mobile SEO layer for a self hosted nginx stack in 2026. Cross references:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="//framework-pageexperience.md"&gt;framework-pageexperience.md&lt;/a&gt;: Core Web Vitals as a cross device discipline.&lt;/li&gt;
&lt;li&gt;
&lt;a href="//framework-technicalseo.md"&gt;framework-technicalseo.md&lt;/a&gt;: nginx HTTP/3, TLS, and crawler access patterns.&lt;/li&gt;
&lt;li&gt;
&lt;a href="//framework-accessibility.md"&gt;framework-accessibility.md&lt;/a&gt;: WCAG 2.2 touch and screen reader requirements.&lt;/li&gt;
&lt;li&gt;
&lt;a href="//framework-aso.md"&gt;framework-aso.md&lt;/a&gt;: App Store and Play Store optimization companion to App Intents and App Links.&lt;/li&gt;
&lt;li&gt;
&lt;a href="//framework-localseo.md"&gt;framework-localseo.md&lt;/a&gt;: Apple Maps, Google Maps, and local pack mobile patterns.&lt;/li&gt;
&lt;li&gt;
&lt;a href="//framework-uxseo.md"&gt;framework-uxseo.md&lt;/a&gt;: thumb zone navigation and mobile information architecture.&lt;/li&gt;
&lt;li&gt;
&lt;a href="//framework-schema.md"&gt;framework-schema.md&lt;/a&gt;: LocalBusiness, MobileApplication, SpeakableSpecification.&lt;/li&gt;
&lt;li&gt;
&lt;a href="//framework-voicesearch.md"&gt;framework-voicesearch.md&lt;/a&gt;: Siri, Apple Intelligence Voice, ChatGPT Voice, Google Assistant.&lt;/li&gt;
&lt;li&gt;
&lt;a href="//framework-aicitations.md"&gt;framework-aicitations.md&lt;/a&gt;: the broader AI citation surface that runs predominantly on mobile.&lt;/li&gt;
&lt;li&gt;
&lt;a href="//framework-aioverviews.md"&gt;framework-aioverviews.md&lt;/a&gt;: Google AI Overviews and AI Mode mobile rendering.&lt;/li&gt;
&lt;li&gt;
&lt;a href="//framework-multimodalsearch.md"&gt;framework-multimodalsearch.md&lt;/a&gt;: Google Lens, Apple Visual Look Up, mobile camera search.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mobile surface is the primary surface in 2026. Every framework in the library assumes the mobile rendering is canonical, the mobile vitals are the canonical vitals, and the mobile experience determines conversion and citation across both classic and AI search.&lt;/p&gt;




&lt;h2&gt;
  
  
  Source
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Canonical: &lt;a href="https://www.thatdevpro.com/insights/framework-mobileseo/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-mobileseo/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio. &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;Engine Optimization service&lt;/a&gt; · &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;Contact&lt;/a&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>mobile</category>
      <category>pwa</category>
    </item>
    <item>
      <title>Web security headers + HSTS + CSP</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 01:21:59 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/web-security-headers-hsts-csp-1bn5</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/web-security-headers-hsts-csp-1bn5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-security/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. &lt;a href="https://www.thatdevpro.com" rel="noopener noreferrer"&gt;ThatDevPro&lt;/a&gt; is an SDVOSB-certified veteran-owned web + AI engineering studio. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;HTTPS, Headers, Authentication, WAF, Hardening, Incident Response, and the Security Posture Required to Maintain Search Trust&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive reference for web security across the sites Joseph manages. Security is a baseline expectation in 2026 — Google explicitly considers HTTPS a ranking factor (modest), security issues trigger manual actions, browser warnings destroy conversion rates, and breach incidents create permanent brand damage.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Document Purpose
&lt;/h2&gt;

&lt;p&gt;Security is often treated as separate from SEO/marketing concerns, but the disciplines significantly overlap. Hacked sites lose rankings, get flagged in browsers as dangerous, drive away users, generate manual actions in GSC, and require months of recovery work. Sites with poor security signals lose trust both with users and with search engines.&lt;/p&gt;

&lt;p&gt;For Joseph's specific situation managing 130+ production client sites on self-managed Linux infrastructure, security discipline is foundational. A single compromised client site affects the broader hosting environment. WordPress sites particularly attract attack attempts continuously.&lt;/p&gt;

&lt;p&gt;This framework specifies security implementation across the full stack — server, application, content, and operational dimensions.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 Required Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSL Labs&lt;/strong&gt; — &lt;code&gt;ssllabs.com/ssltest/&lt;/code&gt; — SSL/TLS configuration testing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mozilla Observatory&lt;/strong&gt; — &lt;code&gt;observatory.mozilla.org&lt;/code&gt; — security headers analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Headers&lt;/strong&gt; — &lt;code&gt;securityheaders.com&lt;/code&gt; — header analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WPScan&lt;/strong&gt; — WordPress vulnerability scanner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OWASP ZAP&lt;/strong&gt; — application security scanner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wordfence / Sucuri / Patchstack&lt;/strong&gt; — WordPress security platforms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare&lt;/strong&gt; — WAF and DDoS protection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Let's Encrypt / acme.sh&lt;/strong&gt; — free SSL certificates&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. HTTPS Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 SSL Certificate Management
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;ssl_certificate_management&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;certificate_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

    &lt;span class="na"&gt;lets_encrypt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;cost&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Free"&lt;/span&gt;
      &lt;span class="na"&gt;validity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;90&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;days&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(auto-renew)"&lt;/span&gt;
      &lt;span class="na"&gt;best_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Most&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sites;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;commodity&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;SSL"&lt;/span&gt;
      &lt;span class="na"&gt;automation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Certbot,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;acme.sh"&lt;/span&gt;

    &lt;span class="na"&gt;paid_dv_certificates&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;cost&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$10-100/year"&lt;/span&gt;
      &lt;span class="na"&gt;validity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1-2&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;years"&lt;/span&gt;
      &lt;span class="na"&gt;best_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sites&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;preferring&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;longer&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;validity"&lt;/span&gt;
      &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sometimes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;faster&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;issuance"&lt;/span&gt;

    &lt;span class="na"&gt;extended_validation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;cost&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$100-500+/year"&lt;/span&gt;
      &lt;span class="na"&gt;validity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1-2&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;years"&lt;/span&gt;
      &lt;span class="na"&gt;best_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Financial,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;e-commerce&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;high&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;trust&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;requirements"&lt;/span&gt;
      &lt;span class="na"&gt;note&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Browser&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;address&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;bar&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;treatment&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reduced;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;less&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;differentiation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;than&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;years&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;past"&lt;/span&gt;

  &lt;span class="na"&gt;multi_domain_strategies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

    &lt;span class="na"&gt;san_certificates&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Multiple&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;domains&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;single&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;certificate"&lt;/span&gt;
      &lt;span class="na"&gt;use_case&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Multiple&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;related&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;domains"&lt;/span&gt;

    &lt;span class="na"&gt;wildcard_certificates&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Covers&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*.example.com&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;subdomains"&lt;/span&gt;
      &lt;span class="na"&gt;use_case&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Many&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;subdomains"&lt;/span&gt;
      &lt;span class="na"&gt;note&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Doesn't&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cover&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;apex;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;need&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;separate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;SAN&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;apex"&lt;/span&gt;

    &lt;span class="na"&gt;multi_san&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Multiple&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;unrelated&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;domains&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;one&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;certificate"&lt;/span&gt;
      &lt;span class="na"&gt;use_case&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Convenience;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fewer&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;certificates&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;manage"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.2 Let's Encrypt Implementation
&lt;/h3&gt;

&lt;p&gt;For Joseph's Debian/Nginx setup managing 130+ sites:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install certbot&lt;/span&gt;
apt &lt;span class="nb"&gt;install &lt;/span&gt;certbot python3-certbot-nginx

&lt;span class="c"&gt;# Get certificate for single site&lt;/span&gt;
certbot &lt;span class="nt"&gt;--nginx&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; example.com &lt;span class="nt"&gt;-d&lt;/span&gt; www.example.com

&lt;span class="c"&gt;# Auto-renewal (typically configured by certbot install)&lt;/span&gt;
systemctl status certbot.timer

&lt;span class="c"&gt;# Manual renewal test&lt;/span&gt;
certbot renew &lt;span class="nt"&gt;--dry-run&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For mass renewal management:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Renew all certificates&lt;/span&gt;
certbot renew &lt;span class="nt"&gt;--quiet&lt;/span&gt;

&lt;span class="c"&gt;# Should be in cron or systemd timer&lt;/span&gt;
&lt;span class="c"&gt;# Default: twice daily check, renews when within 30 days of expiry&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.3 Nginx HTTPS Configuration
&lt;/h3&gt;

&lt;p&gt;Strong default Nginx HTTPS configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:443&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt; &lt;span class="s"&gt;http2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;example.com&lt;/span&gt; &lt;span class="s"&gt;www.example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# SSL Certificate&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="n"&gt;/etc/letsencrypt/live/example.com/fullchain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="n"&gt;/etc/letsencrypt/live/example.com/privkey.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# Modern SSL Configuration&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_protocols&lt;/span&gt; &lt;span class="s"&gt;TLSv1.2&lt;/span&gt; &lt;span class="s"&gt;TLSv1.3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_ciphers&lt;/span&gt; &lt;span class="s"&gt;'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_session_cache&lt;/span&gt; &lt;span class="s"&gt;shared:SSL:10m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_session_timeout&lt;/span&gt; &lt;span class="mi"&gt;10m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# OCSP Stapling&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_stapling&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_stapling_verify&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;ssl_trusted_certificate&lt;/span&gt; &lt;span class="n"&gt;/etc/letsencrypt/live/example.com/chain.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;resolver&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="s"&gt;.1.1&lt;/span&gt; &lt;span class="mf"&gt;8.8&lt;/span&gt;&lt;span class="s"&gt;.8.8&lt;/span&gt; &lt;span class="s"&gt;valid=300s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# Security Headers (see Section 3)&lt;/span&gt;
    &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt; &lt;span class="s"&gt;"max-age=31536000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kn"&gt;includeSubDomains&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="kn"&gt;preload"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# ... rest of configuration&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Redirect HTTP to HTTPS&lt;/span&gt;
&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="s"&gt;[::]:80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;example.com&lt;/span&gt; &lt;span class="s"&gt;www.example.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;301&lt;/span&gt; &lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="nv"&gt;$host$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.4 SSL Testing
&lt;/h3&gt;

&lt;p&gt;After implementation, verify with SSL Labs (&lt;code&gt;ssllabs.com/ssltest/&lt;/code&gt;):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Target: A or A+ grade&lt;/li&gt;
&lt;li&gt;Issues to fix: protocol weaknesses, weak ciphers, missing OCSP, certificate chain issues&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Security Headers
&lt;/h2&gt;

&lt;p&gt;Security headers add layers of browser-enforced protection.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 Complete Security Headers
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Strict-Transport-Security (HSTS)&lt;/span&gt;
&lt;span class="c1"&gt;# Forces HTTPS, prevents downgrade attacks&lt;/span&gt;
&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Strict-Transport-Security&lt;/span&gt; &lt;span class="s"&gt;"max-age=31536000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;includeSubDomains&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;preload"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;# X-Frame-Options&lt;/span&gt;
&lt;span class="c1"&gt;# Prevents clickjacking via iframe embedding&lt;/span&gt;
&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;X-Frame-Options&lt;/span&gt; &lt;span class="s"&gt;"SAMEORIGIN"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;# X-Content-Type-Options&lt;/span&gt;
&lt;span class="c1"&gt;# Prevents MIME sniffing&lt;/span&gt;
&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;X-Content-Type-Options&lt;/span&gt; &lt;span class="s"&gt;"nosniff"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;# Referrer-Policy&lt;/span&gt;
&lt;span class="c1"&gt;# Controls referrer information sent&lt;/span&gt;
&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Referrer-Policy&lt;/span&gt; &lt;span class="s"&gt;"strict-origin-when-cross-origin"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;# Permissions-Policy (formerly Feature-Policy)&lt;/span&gt;
&lt;span class="c1"&gt;# Controls browser features&lt;/span&gt;
&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Permissions-Policy&lt;/span&gt; &lt;span class="s"&gt;"geolocation=(),&lt;/span&gt; &lt;span class="s"&gt;microphone=(),&lt;/span&gt; &lt;span class="s"&gt;camera=()"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;# Content-Security-Policy (most complex; see below)&lt;/span&gt;
&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Content-Security-Policy&lt;/span&gt; &lt;span class="s"&gt;"default-src&lt;/span&gt; &lt;span class="s"&gt;'self'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;script-src&lt;/span&gt; &lt;span class="s"&gt;'self'&lt;/span&gt; &lt;span class="s"&gt;'unsafe-inline'&lt;/span&gt; &lt;span class="s"&gt;https://www.googletagmanager.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;style-src&lt;/span&gt; &lt;span class="s"&gt;'self'&lt;/span&gt; &lt;span class="s"&gt;'unsafe-inline'&lt;/span&gt; &lt;span class="s"&gt;https://fonts.googleapis.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;font-src&lt;/span&gt; &lt;span class="s"&gt;'self'&lt;/span&gt; &lt;span class="s"&gt;https://fonts.gstatic.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;img-src&lt;/span&gt; &lt;span class="s"&gt;'self'&lt;/span&gt; &lt;span class="s"&gt;data:&lt;/span&gt; &lt;span class="s"&gt;https:&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;connect-src&lt;/span&gt; &lt;span class="s"&gt;'self'&lt;/span&gt; &lt;span class="s"&gt;https://www.google-analytics.com&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;frame-ancestors&lt;/span&gt; &lt;span class="s"&gt;'self'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;base-uri&lt;/span&gt; &lt;span class="s"&gt;'self'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;form-action&lt;/span&gt; &lt;span class="s"&gt;'self'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;# Cross-Origin policies&lt;/span&gt;
&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cross-Origin-Opener-Policy&lt;/span&gt; &lt;span class="s"&gt;"same-origin"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cross-Origin-Resource-Policy&lt;/span&gt; &lt;span class="s"&gt;"same-origin"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cross-Origin-Embedder-Policy&lt;/span&gt; &lt;span class="s"&gt;"require-corp"&lt;/span&gt; &lt;span class="s"&gt;always&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 Content Security Policy (CSP)
&lt;/h3&gt;

&lt;p&gt;CSP is the most complex but most powerful header. It defines what sources of scripts, styles, images, etc. are allowed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;csp_directives&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;default_src&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fallback&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;other&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;directives"&lt;/span&gt;
    &lt;span class="na"&gt;typical&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'self'"&lt;/span&gt;

  &lt;span class="na"&gt;script_src&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Allowed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;JavaScript&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sources"&lt;/span&gt;
    &lt;span class="na"&gt;common_additions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'self'"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.googletagmanager.com"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.google-analytics.com"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'unsafe-inline'"&lt;/span&gt; &lt;span class="c1"&gt;# Often required; reduces protection&lt;/span&gt;
    &lt;span class="na"&gt;avoid&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'unsafe-eval'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;unless&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;absolutely&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;required"&lt;/span&gt;

  &lt;span class="na"&gt;style_src&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Allowed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CSS&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sources"&lt;/span&gt;
    &lt;span class="na"&gt;common&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'self'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'unsafe-inline'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://fonts.googleapis.com"&lt;/span&gt;

  &lt;span class="na"&gt;img_src&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Allowed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sources"&lt;/span&gt;
    &lt;span class="na"&gt;common&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'self'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;data:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;https:"&lt;/span&gt;

  &lt;span class="na"&gt;font_src&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Allowed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;font&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sources"&lt;/span&gt;
    &lt;span class="na"&gt;common&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'self'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://fonts.gstatic.com"&lt;/span&gt;

  &lt;span class="na"&gt;connect_src&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Allowed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fetch/XHR&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;destinations"&lt;/span&gt;
    &lt;span class="na"&gt;common&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'self'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;https://www.google-analytics.com"&lt;/span&gt;

  &lt;span class="na"&gt;frame_ancestors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Who&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;can&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;iframe&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;this&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;page"&lt;/span&gt;
    &lt;span class="na"&gt;typical&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'self'"&lt;/span&gt;
    &lt;span class="na"&gt;note&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Replaces&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;X-Frame-Options"&lt;/span&gt;

  &lt;span class="na"&gt;base_uri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Restrict&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;lt;base&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;element"&lt;/span&gt;
    &lt;span class="na"&gt;typical&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'self'"&lt;/span&gt;

  &lt;span class="na"&gt;form_action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Where&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;forms&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;can&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;submit"&lt;/span&gt;
    &lt;span class="na"&gt;typical&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;'self'"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.3 CSP Implementation Approach
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;csp_implementation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;step_1_audit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Inventory all script sources&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Inventory all style sources&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Inventory all image, font, fetch sources&lt;/span&gt;

  &lt;span class="na"&gt;step_2_report_only&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Security-Policy-Report-Only"&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Test&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;policy&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;without&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;enforcement"&lt;/span&gt;
    &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Run&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1-2&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;weeks;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;collect&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;violations"&lt;/span&gt;

  &lt;span class="na"&gt;step_3_iterate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Review violation reports&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Adjust policy to allow legitimate sources&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Block malicious or unnecessary&lt;/span&gt;

  &lt;span class="na"&gt;step_4_enforce&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Security-Policy"&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Switch&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;report-only&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;enforcement"&lt;/span&gt;

  &lt;span class="na"&gt;step_5_monitor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Continued violation reporting via report-uri or report-to&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Adjust as legitimate needs change&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. WordPress-Specific Security
&lt;/h2&gt;

&lt;p&gt;For Joseph's significant WordPress portfolio:&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 WordPress Hardening Baseline
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;wordpress_hardening&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;core_updates&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;requirement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;WordPress&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;core&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;auto-updates&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;enabled"&lt;/span&gt;
    &lt;span class="na"&gt;cadence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Weekly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;verification&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;across&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;portfolio"&lt;/span&gt;
    &lt;span class="na"&gt;automation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Automatic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;security&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;patches;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;managed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;major&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;versions"&lt;/span&gt;

  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;rule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Only&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;install&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reputable&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;plugins&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;wordpress.org&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;trusted&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sources"&lt;/span&gt;
    &lt;span class="na"&gt;audit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Quarterly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;plugin&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;audit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;per&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;site"&lt;/span&gt;
    &lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Inactive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;plugins&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(security&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;surface)"&lt;/span&gt;
    &lt;span class="na"&gt;update&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Auto-updates&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;enabled&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;security;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;managed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;major&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;versions"&lt;/span&gt;

  &lt;span class="na"&gt;themes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;rule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reputable&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;themes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;only"&lt;/span&gt;
    &lt;span class="na"&gt;audit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Inactive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;themes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;removed"&lt;/span&gt;
    &lt;span class="na"&gt;custom_themes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Maintained&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;updated"&lt;/span&gt;

  &lt;span class="na"&gt;user_accounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;admin_username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Never&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'admin'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(default)"&lt;/span&gt;
    &lt;span class="na"&gt;default_role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Subscriber&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;new&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;users"&lt;/span&gt;
    &lt;span class="na"&gt;role_review&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Quarterly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;review&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;administrators"&lt;/span&gt;
    &lt;span class="na"&gt;inactive_users&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Removed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;periodically"&lt;/span&gt;

  &lt;span class="na"&gt;password_security&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;requirement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Strong&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;passwords&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;enforced"&lt;/span&gt;
    &lt;span class="na"&gt;plugin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Force&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Strong&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Passwords&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;similar"&lt;/span&gt;
    &lt;span class="na"&gt;two_factor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Enabled&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;administrators"&lt;/span&gt;

  &lt;span class="na"&gt;file_permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;644"&lt;/span&gt;
    &lt;span class="na"&gt;directories&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;755"&lt;/span&gt;
    &lt;span class="na"&gt;wp_config&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;600"&lt;/span&gt;

  &lt;span class="na"&gt;wp_config_hardening&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;keys&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Salts/keys&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;regenerated;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;never&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;default"&lt;/span&gt;
    &lt;span class="na"&gt;db_prefix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Non-default&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;('wp_'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;default;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;change&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;random)"&lt;/span&gt;
    &lt;span class="na"&gt;debug&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;False&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;production"&lt;/span&gt;

  &lt;span class="na"&gt;xml_rpc&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;typical&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Disable&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;unless&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;required&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(mobile&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;app,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Jetpack)"&lt;/span&gt;
    &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.htaccess&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;block&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;plugin"&lt;/span&gt;

  &lt;span class="na"&gt;rest_api&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;public_endpoints&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Restrict&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;where&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;appropriate"&lt;/span&gt;
    &lt;span class="na"&gt;plugin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Disable&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;WP&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;REST&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;API&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;similar&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;restriction"&lt;/span&gt;

  &lt;span class="na"&gt;login_protection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;rate_limiting&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Limit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Login&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Attempts&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;plugin"&lt;/span&gt;
    &lt;span class="na"&gt;captcha&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;On&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;login&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;form"&lt;/span&gt;
    &lt;span class="na"&gt;two_factor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Wordfence&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2FA,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Google&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Authenticator,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;etc."&lt;/span&gt;
    &lt;span class="na"&gt;custom_login_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;WPS&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Hide&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Login&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;similar"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 WordPress Security Plugins
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;wordpress_security_plugin_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;wordfence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Comprehensive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;security&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;suite"&lt;/span&gt;
    &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Firewall"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Malware&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;scan"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Login&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;protection"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2FA"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;cost&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Free&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;+&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Premium"&lt;/span&gt;
    &lt;span class="na"&gt;recommended_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Most&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;WordPress&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sites"&lt;/span&gt;

  &lt;span class="na"&gt;sucuri&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Comprehensive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;security&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;suite"&lt;/span&gt;
    &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Firewall"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Malware&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;scan"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cleanup&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;service"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;cost&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Free&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;plugin&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;+&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;paid&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;services"&lt;/span&gt;
    &lt;span class="na"&gt;recommended_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sites&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;needing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;managed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cleanup"&lt;/span&gt;

  &lt;span class="na"&gt;patchstack&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Vulnerability&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;patching"&lt;/span&gt;
    &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Virtual&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;patching"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Vulnerability&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;database"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;cost&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Paid"&lt;/span&gt;
    &lt;span class="na"&gt;recommended_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sites&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;many&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;plugins"&lt;/span&gt;

  &lt;span class="na"&gt;ithemes_security&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Comprehensive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;security&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;suite"&lt;/span&gt;
    &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Various&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hardening"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2FA"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Log&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;monitoring"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;cost&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Free&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;+&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Pro"&lt;/span&gt;
    &lt;span class="na"&gt;recommended_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Alternative&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Wordfence"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Joseph's hosting situation managing 130+ sites: standardizing on one security solution simplifies management. Wordfence Premium across portfolio with central monitoring is common pattern.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3 WordPress Backup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;wordpress_backup_strategy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;frequency&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;files&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Daily&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;high-change&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sites;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;weekly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;static-content"&lt;/span&gt;
    &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Daily&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minimum"&lt;/span&gt;

  &lt;span class="na"&gt;retention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;daily&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Keep&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;7-30&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;days"&lt;/span&gt;
    &lt;span class="na"&gt;weekly&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Keep&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;4-12&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;weeks"&lt;/span&gt;
    &lt;span class="na"&gt;monthly&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Keep&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;6-12&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;months"&lt;/span&gt;

  &lt;span class="na"&gt;storage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;requirement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Off-server&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;location"&lt;/span&gt;
    &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;S3 / Backblaze B2 / Wasabi&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Other cloud storage&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Different physical server&lt;/span&gt;
    &lt;span class="na"&gt;avoid&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Backups&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;only&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;same&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;server&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(lost&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;compromise)"&lt;/span&gt;

  &lt;span class="na"&gt;testing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;quarterly&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Test&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;restore&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;procedure"&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Verify&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;backups&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;are&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;actually&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;viable"&lt;/span&gt;

  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;UpdraftPlus (most popular)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;BackWPup&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Duplicator Pro&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;WP Time Capsule&lt;/span&gt;
    &lt;span class="na"&gt;server_side&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;rsync to off-server location&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Scripted backup to S3 or similar&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. Server-Level Security
&lt;/h2&gt;

&lt;p&gt;For Joseph's self-managed Linux infrastructure:&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 SSH Hardening
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# /etc/ssh/sshd_config&lt;/span&gt;

&lt;span class="c"&gt;# Disable root login&lt;/span&gt;
PermitRootLogin no

&lt;span class="c"&gt;# Use SSH keys only, no passwords&lt;/span&gt;
PasswordAuthentication no
ChallengeResponseAuthentication no

&lt;span class="c"&gt;# Limit users who can SSH&lt;/span&gt;
AllowUsers joseph backupuser

&lt;span class="c"&gt;# Change default port (security through obscurity, but reduces noise)&lt;/span&gt;
Port 22042  &lt;span class="c"&gt;# Or any non-standard port&lt;/span&gt;

&lt;span class="c"&gt;# Limit authentication attempts&lt;/span&gt;
MaxAuthTries 3
LoginGraceTime 30

&lt;span class="c"&gt;# Modern protocol only&lt;/span&gt;
Protocol 2

&lt;span class="c"&gt;# Strong key exchange&lt;/span&gt;
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

&lt;span class="c"&gt;# Modern ciphers only&lt;/span&gt;
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After changes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;sshd &lt;span class="nt"&gt;-t&lt;/span&gt;  &lt;span class="c"&gt;# Test config&lt;/span&gt;
systemctl restart sshd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.2 Firewall (UFW or iptables)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Basic UFW configuration&lt;/span&gt;
ufw default deny incoming
ufw default allow outgoing

&lt;span class="c"&gt;# Allow SSH (on custom port if changed)&lt;/span&gt;
ufw allow 22042/tcp

&lt;span class="c"&gt;# Allow web traffic&lt;/span&gt;
ufw allow 80/tcp
ufw allow 443/tcp

&lt;span class="c"&gt;# Enable firewall&lt;/span&gt;
ufw &lt;span class="nb"&gt;enable&lt;/span&gt;

&lt;span class="c"&gt;# Status&lt;/span&gt;
ufw status verbose
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.3 Fail2ban
&lt;/h3&gt;

&lt;p&gt;Prevents brute force attacks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;fail2ban

&lt;span class="c"&gt;# /etc/fail2ban/jail.local&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;DEFAULT]
bantime &lt;span class="o"&gt;=&lt;/span&gt; 3600
findtime &lt;span class="o"&gt;=&lt;/span&gt; 600
maxretry &lt;span class="o"&gt;=&lt;/span&gt; 3

&lt;span class="o"&gt;[&lt;/span&gt;sshd]
enabled &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true
&lt;/span&gt;port &lt;span class="o"&gt;=&lt;/span&gt; 22042

&lt;span class="o"&gt;[&lt;/span&gt;nginx-http-auth]
enabled &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;

&lt;span class="o"&gt;[&lt;/span&gt;wordpress]
enabled &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true
&lt;/span&gt;filter &lt;span class="o"&gt;=&lt;/span&gt; wordpress
logpath &lt;span class="o"&gt;=&lt;/span&gt; /var/log/nginx/access.log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.4 Automatic Security Updates
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Debian/Ubuntu unattended-upgrades&lt;/span&gt;
apt &lt;span class="nb"&gt;install &lt;/span&gt;unattended-upgrades
dpkg-reconfigure &lt;span class="nt"&gt;-plow&lt;/span&gt; unattended-upgrades

&lt;span class="c"&gt;# Configure /etc/apt/apt.conf.d/50unattended-upgrades&lt;/span&gt;
&lt;span class="c"&gt;# Enable security updates&lt;/span&gt;
&lt;span class="c"&gt;# Configure email notifications&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.5 Log Monitoring
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;log_monitoring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;what_to_monitor&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Failed login attempts (auth.log)&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Web server errors (nginx error log)&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Suspicious request patterns (nginx access log)&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Application errors (varies)&lt;/span&gt;

  &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;logwatch (daily summary email)&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;GoAccess (real-time web log analysis)&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Centralized logging (ELK stack, Graylog, etc.) for larger setups&lt;/span&gt;

  &lt;span class="na"&gt;alerts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Unusual login patterns&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;High error rates&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Suspicious traffic patterns&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Disk space warnings&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Cloudflare WAF
&lt;/h2&gt;

&lt;p&gt;For sites where Joseph manages or recommends:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;cloudflare_security_layer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;free_tier_features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Free SSL/TLS&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Basic DDoS protection&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Bot fight mode&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Browser integrity check&lt;/span&gt;

  &lt;span class="na"&gt;pro_tier_additions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;WAF rules (managed rulesets)&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Image optimization&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Mobile redirect&lt;/span&gt;

  &lt;span class="na"&gt;business_tier_additions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Custom WAF rules&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Rate limiting&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Page rules with more options&lt;/span&gt;

  &lt;span class="na"&gt;setup_steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Add domain to Cloudflare&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Update nameservers&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Verify proxying enabled (orange cloud)&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Configure SSL mode (Full Strict recommended)&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Enable security features&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Test thoroughly&lt;/span&gt;

  &lt;span class="na"&gt;custom_rules_examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;block_xmlrpc&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Block&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;/xmlrpc.php&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(WordPress)"&lt;/span&gt;
    &lt;span class="na"&gt;rate_limit_login&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Rate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;limit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;/wp-login.php"&lt;/span&gt;
    &lt;span class="na"&gt;block_known_bad_ips&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Block&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;IPs&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;threat&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;intelligence"&lt;/span&gt;
    &lt;span class="na"&gt;challenge_high_risk_countries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Where&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;business&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;doesn't&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;operate"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7. Application Security
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7.1 Common Vulnerabilities (OWASP Top 10)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;owasp_top_10_2021&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;A01_broken_access_control&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Path&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;traversal,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;IDOR,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;missing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;authorization"&lt;/span&gt;
    &lt;span class="na"&gt;prevention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Server-side&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;authorization&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;checks;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;least&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;privilege"&lt;/span&gt;

  &lt;span class="na"&gt;A02_cryptographic_failures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Weak&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;encryption,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;plaintext&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;passwords"&lt;/span&gt;
    &lt;span class="na"&gt;prevention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Modern&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;crypto;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;password&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hashing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(bcrypt,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;argon2)"&lt;/span&gt;

  &lt;span class="na"&gt;A03_injection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SQL&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;injection,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;XSS,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;command&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;injection"&lt;/span&gt;
    &lt;span class="na"&gt;prevention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Parameterized&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;queries;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;input&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sanitization;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;output&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;encoding"&lt;/span&gt;

  &lt;span class="na"&gt;A04_insecure_design&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Missing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;security&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;design"&lt;/span&gt;
    &lt;span class="na"&gt;prevention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Threat&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;modeling;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;secure&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;design&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;patterns"&lt;/span&gt;

  &lt;span class="na"&gt;A05_security_misconfiguration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Default&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;credentials,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;verbose&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;errors,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;missing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;headers"&lt;/span&gt;
    &lt;span class="na"&gt;prevention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Security&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;baselines;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;configuration&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;audits"&lt;/span&gt;

  &lt;span class="na"&gt;A06_vulnerable_components&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Outdated&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;libraries,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dependencies"&lt;/span&gt;
    &lt;span class="na"&gt;prevention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Dependency&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;scanning;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;regular&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;updates"&lt;/span&gt;

  &lt;span class="na"&gt;A07_authentication_failures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Weak&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;passwords,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;session&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;management&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;issues"&lt;/span&gt;
    &lt;span class="na"&gt;prevention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Strong&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;auth,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;MFA,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;session&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;security"&lt;/span&gt;

  &lt;span class="na"&gt;A08_software_data_integrity_failures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unsigned&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;updates,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;deserialization&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;vulns"&lt;/span&gt;
    &lt;span class="na"&gt;prevention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Signed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;updates;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;safe&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;deserialization"&lt;/span&gt;

  &lt;span class="na"&gt;A09_logging_monitoring_failures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;logging,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;monitoring"&lt;/span&gt;
    &lt;span class="na"&gt;prevention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Comprehensive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;logging;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;alerting"&lt;/span&gt;

  &lt;span class="na"&gt;A10_ssrf&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Server-side&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;request&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;forgery"&lt;/span&gt;
    &lt;span class="na"&gt;prevention&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;URL&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;validation;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;allow&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;lists"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.2 Input Validation &amp;amp; Output Encoding
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="c1"&gt;// PHP example — parameterized query (prevents SQL injection)&lt;/span&gt;
&lt;span class="nv"&gt;$stmt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$pdo&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;prepare&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"SELECT * FROM users WHERE email = ?"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;$stmt&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;// JavaScript — output encoding (prevents XSS)&lt;/span&gt;
&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Safe&lt;/span&gt;
&lt;span class="n"&gt;element&lt;/span&gt;&lt;span class="mf"&gt;.&lt;/span&gt;&lt;span class="n"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// DANGEROUS&lt;/span&gt;

&lt;span class="c1"&gt;// React — automatic encoding&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;// Safe&lt;/span&gt;
&lt;span class="n"&gt;dangerouslySetInnerHTML&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="n"&gt;__html&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;  &lt;span class="c1"&gt;// DANGEROUS&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  8. Incident Response
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8.1 Incident Response Plan
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;incident_response_phases&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;preparation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Documented response plan&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Contact list (hosting, registrar, security firm)&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Backup access verified&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Logging in place to support investigation&lt;/span&gt;

  &lt;span class="na"&gt;detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Monitoring alerts&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;User reports&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Security tools detection&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Search engine warnings&lt;/span&gt;

  &lt;span class="na"&gt;containment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;immediate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Take site offline if active attack&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Change all credentials&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Block attacker IP if identified&lt;/span&gt;
    &lt;span class="na"&gt;short_term&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Isolate affected systems&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Preserve evidence&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Engage security team or service if needed&lt;/span&gt;

  &lt;span class="na"&gt;eradication&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Identify root cause&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Remove malicious content&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Patch vulnerability&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Verify thorough cleanup&lt;/span&gt;

  &lt;span class="na"&gt;recovery&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Restore from clean backup if needed&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Bring systems back online&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Verify normal operation&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Monitor closely for return&lt;/span&gt;

  &lt;span class="na"&gt;post_incident&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Root cause analysis&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Documentation&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Process improvements&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Affected user notification (if applicable)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8.2 Common Incidents
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;common_incident_types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;malware_injection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Malware&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;scan,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;GSC&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;security&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;warning"&lt;/span&gt;
    &lt;span class="na"&gt;response&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Identify&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;entry&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;point;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;clean&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;files;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;patch&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;vulnerability"&lt;/span&gt;

  &lt;span class="na"&gt;defacement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Visual&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;inspection;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reports"&lt;/span&gt;
    &lt;span class="na"&gt;response&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Restore&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;backup;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;identify&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;entry&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;point"&lt;/span&gt;

  &lt;span class="na"&gt;data_breach&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Database&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;access&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;patterns;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reports"&lt;/span&gt;
    &lt;span class="na"&gt;response&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Major&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;incident;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;legal&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;counsel;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;notification"&lt;/span&gt;

  &lt;span class="na"&gt;ddos&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Traffic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;spike;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;service&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;degradation"&lt;/span&gt;
    &lt;span class="na"&gt;response&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cloudflare&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;similar;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;limiting"&lt;/span&gt;

  &lt;span class="na"&gt;account_compromise&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unusual&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;admin&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;activity;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reports"&lt;/span&gt;
    &lt;span class="na"&gt;response&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lock&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;account;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;force&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;password&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reset;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;audit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;logs"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8.3 Manual Action from Hacked Content
&lt;/h3&gt;

&lt;p&gt;If GSC reports manual action for hacked content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Address issue per Section 8.1&lt;/li&gt;
&lt;li&gt;Verify thorough cleanup&lt;/li&gt;
&lt;li&gt;Submit reconsideration request via GSC&lt;/li&gt;
&lt;li&gt;Document remediation work&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Privacy and Compliance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  9.1 Privacy Considerations
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;privacy_baseline&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;privacy_policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;requirement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Comprehensive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;policy&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;every&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;site"&lt;/span&gt;
    &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Data collected&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;How used&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Third parties&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;User rights&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Contact information&lt;/span&gt;

  &lt;span class="na"&gt;cookie_consent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;requirement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EEA&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;traffic;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;good&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;practice&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;elsewhere"&lt;/span&gt;
    &lt;span class="na"&gt;implementation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CMP&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;per&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;framework-ga4.md"&lt;/span&gt;

  &lt;span class="na"&gt;user_data_handling&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;minimum_collection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Only&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;collect&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;what's&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;needed"&lt;/span&gt;
    &lt;span class="na"&gt;secure_storage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Encrypt&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;at&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rest"&lt;/span&gt;
    &lt;span class="na"&gt;secure_transmission&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Always&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;HTTPS"&lt;/span&gt;
    &lt;span class="na"&gt;retention_limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Don't&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;keep&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;indefinitely"&lt;/span&gt;
    &lt;span class="na"&gt;deletion_rights&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Process&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;deletion&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;requests"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  9.2 Regulatory Compliance
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;relevant_regulations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;gdpr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;EU&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;UK;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;comprehensive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;privacy&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;law"&lt;/span&gt;
  &lt;span class="na"&gt;ccpa_cpra&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;California;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;consumer&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;privacy"&lt;/span&gt;
  &lt;span class="na"&gt;hipaa&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Healthcare&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;US"&lt;/span&gt;
  &lt;span class="na"&gt;pci_dss&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Payment&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;card&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;data"&lt;/span&gt;
  &lt;span class="na"&gt;ferpa&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Educational&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;records"&lt;/span&gt;
  &lt;span class="na"&gt;coppa&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Children&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;13"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For client sites, compliance is the client's legal responsibility but Joseph's implementation should support compliance (HTTPS, consent, secure handling, etc.).&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Audit Mode
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SEC1&lt;/td&gt;
&lt;td&gt;HTTPS enforced sitewide&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC2&lt;/td&gt;
&lt;td&gt;SSL Labs grade A or A+&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC3&lt;/td&gt;
&lt;td&gt;All security headers configured&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC4&lt;/td&gt;
&lt;td&gt;CSP implemented (at least basic)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC5&lt;/td&gt;
&lt;td&gt;WordPress hardening baseline applied (if WP)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC6&lt;/td&gt;
&lt;td&gt;Security plugin active (if WP)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC7&lt;/td&gt;
&lt;td&gt;Backup strategy implemented and tested&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC8&lt;/td&gt;
&lt;td&gt;SSH hardened (key auth, no root)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC9&lt;/td&gt;
&lt;td&gt;Firewall configured&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC10&lt;/td&gt;
&lt;td&gt;Fail2ban or equivalent active&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC11&lt;/td&gt;
&lt;td&gt;Automatic security updates enabled&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC12&lt;/td&gt;
&lt;td&gt;Cloudflare or equivalent WAF (where appropriate)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC13&lt;/td&gt;
&lt;td&gt;Log monitoring established&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC14&lt;/td&gt;
&lt;td&gt;Vulnerability scanning periodic&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC15&lt;/td&gt;
&lt;td&gt;Incident response plan documented&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEC16&lt;/td&gt;
&lt;td&gt;Privacy policy current&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 16. World-class security baseline: 14+/16.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Common Mistakes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;HTTP still allowed&lt;/strong&gt; — must redirect or fail&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Missing security headers&lt;/strong&gt; — easy wins skipped&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default WordPress credentials&lt;/strong&gt; — &lt;code&gt;admin&lt;/code&gt; username, weak password&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Outdated plugins/themes&lt;/strong&gt; — primary WordPress attack vector&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No backup off-server&lt;/strong&gt; — backup destroyed in compromise&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No vulnerability scanning&lt;/strong&gt; — issues unknown until exploited&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No 2FA&lt;/strong&gt; — account compromise risk&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Verbose error messages&lt;/strong&gt; — leak information to attackers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Default ports and configurations&lt;/strong&gt; — easier to attack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No incident response plan&lt;/strong&gt; — paralysis when incident occurs&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  End of Framework Document
&lt;/h2&gt;

&lt;p&gt;Companion documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;framework-https.md&lt;/code&gt; — HTTPS implementation specifics (overlap)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-hosting.md&lt;/code&gt; — Hosting environment security&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-spampolicies.md&lt;/code&gt; — Manual actions from hacked content&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-wordpress.md&lt;/code&gt; — WordPress-specific implementation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-serverconfig.md&lt;/code&gt; — Server configuration&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  About this framework library
&lt;/h2&gt;

&lt;p&gt;Dev.to republish of a framework from ThatDevPro's SEO + AI engineering library. &lt;strong&gt;Canonical source: &lt;a href="https://www.thatdevpro.com/insights/framework-security/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-security/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio. Need this framework implemented? &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;See the Engine Optimization service&lt;/a&gt; or hire via &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;contact&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>headers</category>
      <category>https</category>
    </item>
    <item>
      <title>Web performance beyond Core Web Vitals</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 01:21:37 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/web-performance-beyond-core-web-vitals-3jd9</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/web-performance-beyond-core-web-vitals-3jd9</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-performance/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. &lt;a href="https://www.thatdevpro.com" rel="noopener noreferrer"&gt;ThatDevPro&lt;/a&gt; is an SDVOSB-certified veteran-owned web + AI engineering studio. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Core Web Vitals Deep Dive, Resource Optimization, Server Performance, CDN Strategy, Caching Layers, and the Comprehensive Discipline of Web Performance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive reference for web performance optimization across the full stack. Performance affects rankings (Core Web Vitals are explicit ranking factors), conversion (slow sites lose visitors), and AI engine accessibility (slow sites get crawled less). Performance is both technical foundation and competitive differentiation.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Document Purpose
&lt;/h2&gt;

&lt;p&gt;Performance work spans many disciplines: server configuration, CDN selection, asset optimization, database tuning, frontend code, third-party scripts, image handling, font delivery, and more. Each layer offers optimization opportunities; cumulative impact determines real-world performance.&lt;/p&gt;

&lt;p&gt;This framework specifies the comprehensive performance optimization approach, complementing &lt;code&gt;framework-pageexperience.md&lt;/code&gt; (Core Web Vitals focus) with broader performance considerations.&lt;/p&gt;

&lt;p&gt;For Joseph's portfolio managing 130+ sites on self-managed Linux infrastructure, performance discipline at scale matters significantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 Required Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PageSpeed Insights&lt;/strong&gt; — &lt;code&gt;pagespeed.web.dev&lt;/code&gt; — Core Web Vitals + Lighthouse&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lighthouse&lt;/strong&gt; — Chrome DevTools comprehensive audit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebPageTest&lt;/strong&gt; — &lt;code&gt;webpagetest.org&lt;/code&gt; — detailed waterfall analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GTmetrix&lt;/strong&gt; — performance dashboards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real User Monitoring&lt;/strong&gt; — actual user performance data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome DevTools&lt;/strong&gt; — Performance and Network tabs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server monitoring&lt;/strong&gt; — Linux tools (top, iostat, etc.)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Performance Measurement
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Lab vs Field Data
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;performance_measurement_types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;lab_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Synthetic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;testing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;controlled&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;environment"&lt;/span&gt;
    &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lighthouse"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;WebPageTest"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;GTmetrix"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;benefits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Reproducible&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Controlled variables&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Detailed waterfall analysis&lt;/span&gt;
    &lt;span class="na"&gt;limitations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Doesn't reflect real user variety&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;May test under ideal conditions&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Can be gamed for higher scores&lt;/span&gt;

  &lt;span class="na"&gt;field_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Real&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;monitoring&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(RUM)&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;actual&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;visits"&lt;/span&gt;
    &lt;span class="na"&gt;sources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Chrome&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;User&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Experience&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Report&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(CrUX)"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Self-deployed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;RUM"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;benefits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Reflects real-world performance&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Across user device/network variety&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;What Google uses for ranking&lt;/span&gt;
    &lt;span class="na"&gt;limitations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Less granular debugging&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Slower feedback loop&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Privacy considerations&lt;/span&gt;

  &lt;span class="na"&gt;use_both&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;rationale&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lab&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;debugging;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;field&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reality"&lt;/span&gt;
    &lt;span class="na"&gt;monitoring_pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lab&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;during&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;development;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;field&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;production"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.2 Core Web Vitals (2026)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;core_web_vitals_2026&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;lcp_largest_contentful_paint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;measures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Loading&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;performance"&lt;/span&gt;
    &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2.5&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;seconds"&lt;/span&gt;
    &lt;span class="na"&gt;measurement_window&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;75th&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;percentile&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;users"&lt;/span&gt;

  &lt;span class="na"&gt;inp_interaction_to_next_paint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;measures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Responsiveness"&lt;/span&gt;
    &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;200ms"&lt;/span&gt;
    &lt;span class="na"&gt;measurement_window&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;75th&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;percentile"&lt;/span&gt;
    &lt;span class="na"&gt;note&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Replaced&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;FID&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;March&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2024"&lt;/span&gt;

  &lt;span class="na"&gt;cls_cumulative_layout_shift&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;measures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Visual&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;stability"&lt;/span&gt;
    &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0.1"&lt;/span&gt;
    &lt;span class="na"&gt;measurement_window&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;75th&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;percentile"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2.3 Additional Performance Metrics
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;additional_metrics&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;ttfb_time_to_first_byte&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;measures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Server&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;response&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;time"&lt;/span&gt;
    &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;800ms"&lt;/span&gt;
    &lt;span class="na"&gt;significance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Foundation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;subsequent&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;metrics"&lt;/span&gt;

  &lt;span class="na"&gt;fcp_first_contentful_paint&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;measures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;First&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;visible"&lt;/span&gt;
    &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1.8&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;seconds"&lt;/span&gt;

  &lt;span class="na"&gt;speed_index&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;measures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;quickly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;visible&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;during&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;load"&lt;/span&gt;
    &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;3.4&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;seconds&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(mobile)"&lt;/span&gt;

  &lt;span class="na"&gt;total_blocking_time&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;measures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Main&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;thread&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;blocking"&lt;/span&gt;
    &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;200ms"&lt;/span&gt;

  &lt;span class="na"&gt;time_to_interactive&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;measures&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;When&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;page&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fully&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;interactive"&lt;/span&gt;
    &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;3.8&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;seconds&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(mobile)"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Server Performance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 Hosting Foundation
&lt;/h3&gt;

&lt;p&gt;Performance starts with hosting. Cheap shared hosting makes optimization difficult.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;hosting_performance_factors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Adequate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cores;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;throttled"&lt;/span&gt;
    &lt;span class="na"&gt;ram&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sufficient&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;needs"&lt;/span&gt;
    &lt;span class="na"&gt;disk_io&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SSD&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;essential;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;NVMe&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;preferred"&lt;/span&gt;
    &lt;span class="na"&gt;network&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Gigabit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;connectivity"&lt;/span&gt;

  &lt;span class="na"&gt;configuration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;php_version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Modern&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;PHP&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;8.x"&lt;/span&gt;
    &lt;span class="na"&gt;web_server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Nginx&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Apache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2.4+&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;optimized"&lt;/span&gt;
    &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MySQL&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;8&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;MariaDB&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;10.6+"&lt;/span&gt;

  &lt;span class="na"&gt;scaling&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;vertical&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;More&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;resources&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;same&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;server"&lt;/span&gt;
    &lt;span class="na"&gt;horizontal&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Multiple&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;servers;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;load&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;balancing"&lt;/span&gt;
    &lt;span class="na"&gt;auto_scaling&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cloud&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;providers;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;scales&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;traffic"&lt;/span&gt;

  &lt;span class="na"&gt;joseph_setup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;server&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bubbles&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(self-managed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Debian)"&lt;/span&gt;
    &lt;span class="na"&gt;sites&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;130+&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;production&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sites"&lt;/span&gt;
    &lt;span class="na"&gt;optimization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Resource&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;allocation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;per&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;site;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;appropriate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;caching"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.2 Nginx Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Optimized Nginx configuration patterns&lt;/span&gt;

&lt;span class="c1"&gt;# Worker processes&lt;/span&gt;
&lt;span class="k"&gt;worker_processes&lt;/span&gt; &lt;span class="s"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;worker_rlimit_nofile&lt;/span&gt; &lt;span class="mi"&gt;65535&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;events&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;worker_connections&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;multi_accept&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;use&lt;/span&gt; &lt;span class="s"&gt;epoll&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;http&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;# Sendfile for static files&lt;/span&gt;
    &lt;span class="kn"&gt;sendfile&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;tcp_nopush&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;tcp_nodelay&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# Keep alive&lt;/span&gt;
    &lt;span class="kn"&gt;keepalive_timeout&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;keepalive_requests&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# Buffers&lt;/span&gt;
    &lt;span class="kn"&gt;client_body_buffer_size&lt;/span&gt; &lt;span class="mi"&gt;16k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;client_max_body_size&lt;/span&gt; &lt;span class="mi"&gt;100m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;client_header_buffer_size&lt;/span&gt; &lt;span class="mi"&gt;1k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;large_client_header_buffers&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="mi"&gt;8k&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# Compression&lt;/span&gt;
    &lt;span class="kn"&gt;gzip&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_vary&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_proxied&lt;/span&gt; &lt;span class="s"&gt;any&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_comp_level&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;gzip_types&lt;/span&gt;
        &lt;span class="nc"&gt;text/plain&lt;/span&gt;
        &lt;span class="nc"&gt;text/css&lt;/span&gt;
        &lt;span class="nc"&gt;text/xml&lt;/span&gt;
        &lt;span class="nc"&gt;text/javascript&lt;/span&gt;
        &lt;span class="nc"&gt;application/json&lt;/span&gt;
        &lt;span class="nc"&gt;application/javascript&lt;/span&gt;
        &lt;span class="nc"&gt;application/xml&lt;/span&gt;&lt;span class="s"&gt;+rss&lt;/span&gt;
        &lt;span class="nc"&gt;application/xml&lt;/span&gt;
        &lt;span class="nc"&gt;image/svg&lt;/span&gt;&lt;span class="s"&gt;+xml&lt;/span&gt;
        &lt;span class="nc"&gt;font/woff&lt;/span&gt;
        &lt;span class="nc"&gt;font/woff&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# Brotli (if module installed)&lt;/span&gt;
    &lt;span class="kn"&gt;brotli&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;brotli_comp_level&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;brotli_types&lt;/span&gt;
        &lt;span class="nc"&gt;text/plain&lt;/span&gt;
        &lt;span class="nc"&gt;text/css&lt;/span&gt;
        &lt;span class="nc"&gt;text/xml&lt;/span&gt;
        &lt;span class="nc"&gt;text/javascript&lt;/span&gt;
        &lt;span class="nc"&gt;application/json&lt;/span&gt;
        &lt;span class="nc"&gt;application/javascript&lt;/span&gt;
        &lt;span class="nc"&gt;application/xml&lt;/span&gt;&lt;span class="s"&gt;+rss&lt;/span&gt;
        &lt;span class="nc"&gt;application/xml&lt;/span&gt;
        &lt;span class="nc"&gt;image/svg&lt;/span&gt;&lt;span class="s"&gt;+xml&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# FastCGI cache for PHP&lt;/span&gt;
    &lt;span class="kn"&gt;fastcgi_cache_path&lt;/span&gt; &lt;span class="n"&gt;/var/cache/nginx&lt;/span&gt; &lt;span class="s"&gt;levels=1:2&lt;/span&gt; &lt;span class="s"&gt;keys_zone=fcgi:100m&lt;/span&gt; &lt;span class="s"&gt;max_size=1g&lt;/span&gt; &lt;span class="s"&gt;inactive=60m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;fastcgi_cache_use_stale&lt;/span&gt; &lt;span class="s"&gt;error&lt;/span&gt; &lt;span class="s"&gt;timeout&lt;/span&gt; &lt;span class="s"&gt;invalid_header&lt;/span&gt; &lt;span class="s"&gt;http_500&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;fastcgi_cache_lock&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="c1"&gt;# HTTP/2 push (HTTP/2)&lt;/span&gt;
    &lt;span class="kn"&gt;http2_push_preload&lt;/span&gt; &lt;span class="no"&gt;on&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.3 PHP-FPM Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;# /etc/php/8.2/fpm/pool.d/www.conf
&lt;/span&gt;
&lt;span class="c"&gt;; Process management
&lt;/span&gt;&lt;span class="py"&gt;pm&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;dynamic&lt;/span&gt;
&lt;span class="py"&gt;pm.max_children&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;50&lt;/span&gt;
&lt;span class="py"&gt;pm.start_servers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;5&lt;/span&gt;
&lt;span class="py"&gt;pm.min_spare_servers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;5&lt;/span&gt;
&lt;span class="py"&gt;pm.max_spare_servers&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;35&lt;/span&gt;
&lt;span class="py"&gt;pm.max_requests&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;500&lt;/span&gt;

&lt;span class="c"&gt;; Slow log
&lt;/span&gt;&lt;span class="py"&gt;slowlog&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;/var/log/php-fpm-slow.log&lt;/span&gt;
&lt;span class="py"&gt;request_slowlog_timeout&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;5s&lt;/span&gt;

&lt;span class="c"&gt;; OPcache
&lt;/span&gt;&lt;span class="py"&gt;opcache.enable&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;1&lt;/span&gt;
&lt;span class="py"&gt;opcache.memory_consumption&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;256&lt;/span&gt;
&lt;span class="py"&gt;opcache.interned_strings_buffer&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;16&lt;/span&gt;
&lt;span class="py"&gt;opcache.max_accelerated_files&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;20000&lt;/span&gt;
&lt;span class="py"&gt;opcache.validate_timestamps&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0  ; Production; restart on deploy&lt;/span&gt;
&lt;span class="py"&gt;opcache.save_comments&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3.4 Database Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mysql_optimization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;configuration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;innodb_buffer_pool_size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;70-80%&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;RAM&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dedicated&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;DB&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;server"&lt;/span&gt;
    &lt;span class="na"&gt;innodb_log_file_size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;256MB+"&lt;/span&gt;
    &lt;span class="na"&gt;innodb_flush_method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;O_DIRECT"&lt;/span&gt;
    &lt;span class="na"&gt;query_cache_size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Removed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;MySQL&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;8;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;use&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;other&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;caching"&lt;/span&gt;

  &lt;span class="na"&gt;indexing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Index foreign keys&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Index columns used in WHERE clauses frequently&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Composite indexes for multi-column queries&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Avoid over-indexing (indexes slow writes)&lt;/span&gt;

  &lt;span class="na"&gt;query_optimization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;EXPLAIN to analyze queries&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Avoid SELECT *&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Limit result sets where possible&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Optimize joins&lt;/span&gt;

  &lt;span class="na"&gt;ongoing_maintenance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Regular OPTIMIZE TABLE&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Slow query log monitoring&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Long-running query alerts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  4. Caching Strategy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Caching Layers
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;caching_layers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;browser_cache&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User's&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;browser"&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Repeat&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;visitors&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;don't&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;re-download"&lt;/span&gt;
    &lt;span class="na"&gt;configuration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache-Control&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;headers"&lt;/span&gt;

  &lt;span class="na"&gt;cdn_cache&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CDN&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;edge&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;servers&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;globally"&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Geographic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;proximity"&lt;/span&gt;
    &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cloudflare"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fastly"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BunnyCDN"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;KeyCDN"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

  &lt;span class="na"&gt;reverse_proxy_cache&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Front&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;of&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;server"&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Varnish"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Nginx&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;FastCGI&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cache"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Avoid&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hitting&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cached&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;responses"&lt;/span&gt;

  &lt;span class="na"&gt;application_cache&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Application&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;memory"&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;WordPress&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cache"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Rails&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cache"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;expensive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;computations"&lt;/span&gt;

  &lt;span class="na"&gt;database_query_cache&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Object&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;backed&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;by&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Redis/Memcached"&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;database&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;query&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;results"&lt;/span&gt;

  &lt;span class="na"&gt;cdn_origin_shield&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Between&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CDN&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;origin"&lt;/span&gt;
    &lt;span class="na"&gt;purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reduce&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;origin&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;load"&lt;/span&gt;
    &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cloudflare&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Argo"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Fastly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Origin&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Shield"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 Cache Headers
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Static assets — cache aggressively&lt;/span&gt;
&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="sr"&gt;*&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s"&gt;.(jpg|jpeg|png|gif|ico|svg|webp|woff|woff2|ttf|css|js)&lt;/span&gt;$ &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;expires&lt;/span&gt; &lt;span class="s"&gt;1y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cache-Control&lt;/span&gt; &lt;span class="s"&gt;"public,&lt;/span&gt; &lt;span class="s"&gt;immutable"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;access_log&lt;/span&gt; &lt;span class="no"&gt;off&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# HTML — cache briefly, allow revalidation&lt;/span&gt;
&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="sr"&gt;*&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s"&gt;.html&lt;/span&gt;$ &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;expires&lt;/span&gt; &lt;span class="s"&gt;1h&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cache-Control&lt;/span&gt; &lt;span class="s"&gt;"public,&lt;/span&gt; &lt;span class="s"&gt;must-revalidate"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# API responses — typically don't cache&lt;/span&gt;
&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/api/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;Cache-Control&lt;/span&gt; &lt;span class="s"&gt;"no-store,&lt;/span&gt; &lt;span class="s"&gt;no-cache,&lt;/span&gt; &lt;span class="s"&gt;must-revalidate"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.3 Object Cache (Redis)
&lt;/h3&gt;

&lt;p&gt;For WordPress and other database-heavy applications:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;redis_object_cache&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;setup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;install&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apt&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;install&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;redis-server"&lt;/span&gt;
    &lt;span class="na"&gt;php_extension&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;apt&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;install&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;php8.2-redis"&lt;/span&gt;
    &lt;span class="na"&gt;plugin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Redis&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Object&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;plugin&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(WordPress)"&lt;/span&gt;

  &lt;span class="na"&gt;benefits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Significant database load reduction&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Faster page generation&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Better scalability&lt;/span&gt;

  &lt;span class="na"&gt;configuration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;maxmemory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Set&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;based&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;available&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;RAM"&lt;/span&gt;
    &lt;span class="na"&gt;maxmemory_policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;allkeys-lru"&lt;/span&gt;
    &lt;span class="na"&gt;persistence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Disable&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;use&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(improves&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;performance)"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.4 Page Cache
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;page_cache_strategies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;full_page_cache&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;complete&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;HTML&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;responses"&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Skip&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;PHP/DB&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;entirely&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cached&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;pages"&lt;/span&gt;
    &lt;span class="na"&gt;invalidation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Clear&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;updates"&lt;/span&gt;

  &lt;span class="na"&gt;partial_caching&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;specific&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;page&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sections"&lt;/span&gt;
    &lt;span class="na"&gt;use_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mostly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;static&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;some&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dynamic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;parts"&lt;/span&gt;

  &lt;span class="na"&gt;dynamic_caching&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;short&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;periods&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(1-60&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;seconds)"&lt;/span&gt;
    &lt;span class="na"&gt;use_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;High-traffic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dynamic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sites"&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Significant&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;load&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;reduction&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;even&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dynamic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;content"&lt;/span&gt;

  &lt;span class="na"&gt;edge_side_includes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;shell;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;insert&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dynamic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;blocks"&lt;/span&gt;
    &lt;span class="na"&gt;technology&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Varnish&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ESI;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cloudflare&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Workers"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. CDN Strategy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 CDN Selection
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;cdn_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;cloudflare&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pricing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Free&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tier&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;generous;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Pro&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;$20/month;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;higher&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tiers"&lt;/span&gt;
    &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Global edge network&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DDoS protection&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;WAF&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Argo intelligent routing (paid)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Workers (edge compute)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Image optimization (paid)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;R2 object storage&lt;/span&gt;
    &lt;span class="na"&gt;best_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Most&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sites;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;comprehensive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;features"&lt;/span&gt;
    &lt;span class="na"&gt;used_widely&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Industry&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;standard&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;many"&lt;/span&gt;

  &lt;span class="na"&gt;fastly&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pricing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Pay&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;per&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;usage;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minimum&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;spend"&lt;/span&gt;
    &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Edge compute (VCL, Compute@Edge)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Real-time logging&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Highly programmable&lt;/span&gt;
    &lt;span class="na"&gt;best_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;High-traffic&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sites&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;custom&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;needs"&lt;/span&gt;

  &lt;span class="na"&gt;bunnycdn&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pricing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Very&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;competitive&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;($1/month&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minimum)"&lt;/span&gt;
    &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Bunny Optimizer (image optimization)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Edge storage&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Stream (video)&lt;/span&gt;
    &lt;span class="na"&gt;best_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cost-conscious&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sites"&lt;/span&gt;

  &lt;span class="na"&gt;keycdn&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pricing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Competitive;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;pay-per-usage"&lt;/span&gt;
    &lt;span class="na"&gt;features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Strong edge network&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Image processing&lt;/span&gt;
    &lt;span class="na"&gt;best_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cost-conscious&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;alternative"&lt;/span&gt;

  &lt;span class="na"&gt;vercel_netlify_built_in&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;note&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Included&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;these&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hosting&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;platforms"&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Integrated&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;workflow"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.2 CDN Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;cdn_optimization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;cache_rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;static_assets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;aggressively&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;year)"&lt;/span&gt;
    &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;briefly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(5&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;minutes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;hour)"&lt;/span&gt;
    &lt;span class="na"&gt;api&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Typically&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cache"&lt;/span&gt;
    &lt;span class="na"&gt;custom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Per-path&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rules"&lt;/span&gt;

  &lt;span class="na"&gt;ssl&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;requirement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HTTPS&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;via&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CDN"&lt;/span&gt;
    &lt;span class="na"&gt;options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;flexible&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CDN&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;origin&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;via&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;HTTP&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(less&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;secure)"&lt;/span&gt;
      &lt;span class="na"&gt;full&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;End-to-end&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;HTTPS"&lt;/span&gt;
      &lt;span class="na"&gt;strict&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;End-to-end&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;HTTPS&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;origin&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;certificate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;validation&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(best)"&lt;/span&gt;

  &lt;span class="na"&gt;page_rules_cloudflare&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;examples&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;everything&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;/static/*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;year)"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Bypass&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cache&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;/admin/*"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Always&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;use&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;HTTPS"&lt;/span&gt;

  &lt;span class="na"&gt;performance_features&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;auto_minify&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Minify&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;HTML,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CSS,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;JS"&lt;/span&gt;
    &lt;span class="na"&gt;rocket_loader&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Async&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;JavaScript&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;loading"&lt;/span&gt;
    &lt;span class="na"&gt;early_hints&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;HTTP&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;103&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;resource&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;preload"&lt;/span&gt;
    &lt;span class="na"&gt;http2_prioritization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Smart&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;resource&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;prioritization"&lt;/span&gt;
    &lt;span class="na"&gt;http3&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Latest&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;HTTP&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;version"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Asset Optimization
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Image Optimization
&lt;/h3&gt;

&lt;p&gt;See &lt;code&gt;framework-imageseo.md&lt;/code&gt; Section 4. Key performance points:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;image_performance&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;formats&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;modern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AVIF&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(best&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;compression);&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;WebP&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(broadly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;supported)"&lt;/span&gt;
    &lt;span class="na"&gt;fallback&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;JPEG&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;photos;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;PNG&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;graphics"&lt;/span&gt;
    &lt;span class="na"&gt;technique&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;picture&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;multiple&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sources"&lt;/span&gt;

  &lt;span class="na"&gt;responsive_images&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;srcset&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;appropriate&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sizes"&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Load&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;size&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;matching&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;viewport"&lt;/span&gt;

  &lt;span class="na"&gt;compression&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;photos&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;JPEG&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;quality&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;75-85&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;typically"&lt;/span&gt;
    &lt;span class="na"&gt;graphics&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PNG-8&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;where&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;colors&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;limited"&lt;/span&gt;
    &lt;span class="na"&gt;automation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ImageMagick,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sharp,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;build-time&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tools"&lt;/span&gt;

  &lt;span class="na"&gt;lazy_loading&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;standard&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;loading="lazy"&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;attribute'&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Below-fold&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;images&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;load&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;demand"&lt;/span&gt;
    &lt;span class="na"&gt;first_paint_image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;loading="eager"&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;attribute'&lt;/span&gt;

  &lt;span class="na"&gt;cdn_image_optimization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Cloudflare&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Polish,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Bunny&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Optimizer,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Cloudinary,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Imgix"&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;On-the-fly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;optimization&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;at&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CDN"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.2 JavaScript Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;javascript_optimization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;minimize_total&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;rule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Less&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;JavaScript&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;better"&lt;/span&gt;
    &lt;span class="na"&gt;audit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Coverage&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tab&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Chrome&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;DevTools"&lt;/span&gt;
    &lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unused&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;libraries&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;code"&lt;/span&gt;

  &lt;span class="na"&gt;code_splitting&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Per-route&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;per-feature&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;bundles"&lt;/span&gt;
    &lt;span class="na"&gt;framework_support&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Webpack,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Rollup,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;esbuild&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;built-in"&lt;/span&gt;

  &lt;span class="na"&gt;defer_and_async&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Wait&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;until&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;DOM&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ready"&lt;/span&gt;
    &lt;span class="na"&gt;async&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Load&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;asynchronously;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;execute&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;when&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ready"&lt;/span&gt;
    &lt;span class="na"&gt;use_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Non-critical&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;scripts"&lt;/span&gt;

  &lt;span class="na"&gt;third_party_audit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;audit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Each&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;third-party&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;script:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;necessary?"&lt;/span&gt;
    &lt;span class="na"&gt;common_culprits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Heavy chat widgets&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Multiple analytics tools&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Tag manager bloat&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Social embeds&lt;/span&gt;
    &lt;span class="na"&gt;fixes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Remove unnecessary&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Defer non-critical&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Use lighter alternatives&lt;/span&gt;

  &lt;span class="na"&gt;modern_js&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Smaller&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;bundles&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;modern&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;browsers"&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ES&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;modules&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;module/nomodule"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.3 CSS Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;css_optimization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;critical_css&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Inline&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;above-fold&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CSS&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;head"&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Render&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;without&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;waiting&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;external&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CSS"&lt;/span&gt;
    &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Critical,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Penthouse,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;build&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tools"&lt;/span&gt;

  &lt;span class="na"&gt;non_critical_async&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Load&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;main&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CSS&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;asynchronously&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;after&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;render"&lt;/span&gt;
    &lt;span class="na"&gt;technique&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rel="preload"&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;+&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;onload&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;swap'&lt;/span&gt;

  &lt;span class="na"&gt;remove_unused&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;audit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Coverage&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;tab&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;shows&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;unused&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CSS"&lt;/span&gt;
    &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PurgeCSS,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;UnCSS,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;build-time"&lt;/span&gt;

  &lt;span class="na"&gt;minimize_imports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;rule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Don't&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;import&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;full&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;frameworks&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;partial&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;use"&lt;/span&gt;
    &lt;span class="na"&gt;example&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tailwind&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;purges&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;unused&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;classes&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;by&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;default"&lt;/span&gt;

  &lt;span class="na"&gt;modern_css&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;grid_and_flex&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Replace&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;JavaScript&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;layouts"&lt;/span&gt;
    &lt;span class="na"&gt;css_variables&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reduce&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;duplicated&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;values"&lt;/span&gt;
    &lt;span class="na"&gt;container_queries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Component-level&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;responsive"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.4 Font Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;font_optimization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;font_display_swap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;css&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;font-display:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;swap;"&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Show&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fallback&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;font&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;during&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;font&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;load;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;swap&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;when&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ready"&lt;/span&gt;
    &lt;span class="na"&gt;avoid_invisible_text&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Critical&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;performance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;metrics"&lt;/span&gt;

  &lt;span class="na"&gt;preload_critical&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;link&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;rel="preload"&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;as="font"&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;type="font/woff2"&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;crossorigin&amp;gt;'&lt;/span&gt;
    &lt;span class="na"&gt;use_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Above-fold&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fonts"&lt;/span&gt;

  &lt;span class="na"&gt;subset_fonts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Smaller&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;file&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sizes"&lt;/span&gt;
    &lt;span class="na"&gt;use_for&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Latin-only&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sites&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;can&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;drop&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;other&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;character&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sets"&lt;/span&gt;

  &lt;span class="na"&gt;variable_fonts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Multiple&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;weights/styles&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;single&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;file"&lt;/span&gt;
    &lt;span class="na"&gt;consideration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;May&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;be&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;larger&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;than&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;single&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;weight"&lt;/span&gt;

  &lt;span class="na"&gt;self_host_vs_google_fonts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;self_host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Better&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;performance;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;eliminates&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;third-party"&lt;/span&gt;
    &lt;span class="na"&gt;google_fonts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Simple;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;broad&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;support"&lt;/span&gt;
    &lt;span class="na"&gt;recommendation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Self-host&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;production"&lt;/span&gt;

  &lt;span class="na"&gt;limit_weights&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;rule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Use&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;only&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;weights&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;actually&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;needed"&lt;/span&gt;
    &lt;span class="na"&gt;typical&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Regular&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;+&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;bold&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sufficient&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;for&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;most&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sites"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7. Core Web Vitals Optimization
&lt;/h2&gt;

&lt;p&gt;See &lt;code&gt;framework-pageexperience.md&lt;/code&gt; for comprehensive treatment. Key points:&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 LCP Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;lcp_optimization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;identify_lcp_element&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;tool&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Chrome&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;DevTools&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Performance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;LCP&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;marker"&lt;/span&gt;
    &lt;span class="na"&gt;typical&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hero&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;large&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;heading&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;text"&lt;/span&gt;

  &lt;span class="na"&gt;optimization_strategies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image_lcp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Preload the LCP image&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Optimize image (size, format)&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Use eager loading&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;CDN delivery&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Render server-side&lt;/span&gt;

    &lt;span class="na"&gt;text_lcp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Optimize font loading&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Preload critical CSS&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Minimize render-blocking&lt;/span&gt;

    &lt;span class="na"&gt;server_response&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Reduce TTFB&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Optimize server processing&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Effective caching&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.2 INP Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;inp_optimization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;reduce_main_thread_work&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Code split JavaScript&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Defer non-critical scripts&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Web workers for heavy computation&lt;/span&gt;

  &lt;span class="na"&gt;optimize_event_handlers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Debounce/throttle expensive handlers&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Use requestIdleCallback for non-urgent work&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Avoid large synchronous tasks&lt;/span&gt;

  &lt;span class="na"&gt;third_party_audit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Heavy third-party scripts often cause INP issues&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Defer or remove problematic scripts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.3 CLS Optimization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;cls_optimization&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;size_attributes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;images&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Always&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;include&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;width&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;height&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;attributes"&lt;/span&gt;
    &lt;span class="na"&gt;embeds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reserve&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;space&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;aspect&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ratio"&lt;/span&gt;

  &lt;span class="na"&gt;font_loading&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;issue&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Font&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;swap&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;can&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;cause&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;layout&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;shift"&lt;/span&gt;
    &lt;span class="na"&gt;fix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Match&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fallback&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;font&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;metrics;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;use&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;size-adjust"&lt;/span&gt;

  &lt;span class="na"&gt;ads_and_embeds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;issue&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Late-loading&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;shifts&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;page"&lt;/span&gt;
    &lt;span class="na"&gt;fix&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reserve&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;space&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;proactively"&lt;/span&gt;

  &lt;span class="na"&gt;dynamic_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;rule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Don't&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;insert&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;above&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;existing&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;unless&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;triggered&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;by&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;user"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  8. Real User Monitoring
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8.1 RUM Implementation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;rum_options&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;free_tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Chrome User Experience Report (CrUX)&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Google Search Console Core Web Vitals&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Cloudflare Web Analytics (free)&lt;/span&gt;

  &lt;span class="na"&gt;paid_tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;SpeedCurve&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Calibre&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Datadog RUM&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;New Relic Browser&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Sentry Performance Monitoring&lt;/span&gt;

  &lt;span class="na"&gt;custom_implementation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;library&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;web-vitals.js"&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Send&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;metrics&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;to&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;your&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;analytics"&lt;/span&gt;
    &lt;span class="na"&gt;benefit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Custom&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;dashboards"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8.2 Custom Web Vitals Tracking
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;onCLS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onINP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onLCP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onFCP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onTTFB&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;web-vitals&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sendToAnalytics&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;gtag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;event&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CLS&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;metric_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;metric_value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;metric_delta&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;non_interaction&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;onCLS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sendToAnalytics&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;onINP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sendToAnalytics&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;onLCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sendToAnalytics&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;onFCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sendToAnalytics&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;onTTFB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sendToAnalytics&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This sends real user data to GA4 for monitoring.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Performance Budget
&lt;/h2&gt;

&lt;h3&gt;
  
  
  9.1 Establishing Budget
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;performance_budget&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;page_weight_targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;total&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1MB&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ideal;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1-2MB&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;acceptable;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2MB+&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;concerning"&lt;/span&gt;
    &lt;span class="na"&gt;html&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;100KB"&lt;/span&gt;
    &lt;span class="na"&gt;css&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;100KB"&lt;/span&gt;
    &lt;span class="na"&gt;javascript&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;300KB"&lt;/span&gt;
    &lt;span class="na"&gt;images&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Variable;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;lazy-load&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;below&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;fold"&lt;/span&gt;
    &lt;span class="na"&gt;fonts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;100KB&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;total"&lt;/span&gt;

  &lt;span class="na"&gt;request_count_targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;total&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;50&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ideal;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;50-100&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;acceptable"&lt;/span&gt;
    &lt;span class="na"&gt;third_party&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;10&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ideal"&lt;/span&gt;

  &lt;span class="na"&gt;metric_targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;lcp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2.0s&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ideal;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2.5s&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;acceptable"&lt;/span&gt;
    &lt;span class="na"&gt;inp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;100ms&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ideal;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;200ms&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;acceptable"&lt;/span&gt;
    &lt;span class="na"&gt;cls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0.05&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ideal;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0.1&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;acceptable"&lt;/span&gt;
    &lt;span class="na"&gt;ttfb&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;600ms&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;ideal;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;under&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;800ms&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;acceptable"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  9.2 Enforcing Budget
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;budget_enforcement&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

  &lt;span class="na"&gt;ci_cd_integration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;tools&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Lighthouse&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;CI,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;SpeedCurve,&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Calibre"&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Performance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;test&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;on&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;every&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;deployment"&lt;/span&gt;
    &lt;span class="na"&gt;fail_build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;If&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;thresholds&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;exceeded"&lt;/span&gt;

  &lt;span class="na"&gt;monitoring_alerts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;pattern&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Alert&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;when&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;metrics&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;regress"&lt;/span&gt;
    &lt;span class="na"&gt;sensitivity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Threshold&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;beyond&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;normal&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;variance"&lt;/span&gt;

  &lt;span class="na"&gt;documentation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;rule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Document&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;the&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;budget;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;share&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;with&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;team"&lt;/span&gt;
    &lt;span class="na"&gt;review&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Quarterly&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;budget&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;review&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;and&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;adjustment"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  10. Audit Mode
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PF1&lt;/td&gt;
&lt;td&gt;Core Web Vitals targets met (75th percentile)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF2&lt;/td&gt;
&lt;td&gt;TTFB under 800ms&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF3&lt;/td&gt;
&lt;td&gt;Hosting appropriate for traffic&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF4&lt;/td&gt;
&lt;td&gt;CDN configured and active&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF5&lt;/td&gt;
&lt;td&gt;Object cache (Redis) running&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF6&lt;/td&gt;
&lt;td&gt;Page cache configured&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF7&lt;/td&gt;
&lt;td&gt;Browser cache headers correct&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF8&lt;/td&gt;
&lt;td&gt;Images optimized (modern formats, compression, lazy)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF9&lt;/td&gt;
&lt;td&gt;JavaScript minimized and deferred&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF10&lt;/td&gt;
&lt;td&gt;CSS optimized (critical inline; rest async)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF11&lt;/td&gt;
&lt;td&gt;Fonts optimized (display swap; preload critical)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF12&lt;/td&gt;
&lt;td&gt;Third-party scripts audited and minimized&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF13&lt;/td&gt;
&lt;td&gt;Database optimized&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF14&lt;/td&gt;
&lt;td&gt;RUM data collected and monitored&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF15&lt;/td&gt;
&lt;td&gt;Performance budget defined&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PF16&lt;/td&gt;
&lt;td&gt;Regression testing in CI/CD&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 16. World-class performance: 14+/16.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Common Mistakes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Cheap shared hosting&lt;/strong&gt; — bottleneck regardless of optimization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No CDN&lt;/strong&gt; — slow for distant users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No caching layers&lt;/strong&gt; — every request hits database&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image bloat&lt;/strong&gt; — unoptimized images dominate page weight&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party script overload&lt;/strong&gt; — heavy widgets, multiple analytics&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No font optimization&lt;/strong&gt; — invisible text or layout shifts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render-blocking resources&lt;/strong&gt; — synchronous CSS/JS in head&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No lazy loading&lt;/strong&gt; — loading everything upfront&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No RUM&lt;/strong&gt; — flying blind on real user experience&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No performance regression testing&lt;/strong&gt; — performance drifts over time&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  End of Framework Document
&lt;/h2&gt;

&lt;p&gt;Companion documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;framework-pageexperience.md&lt;/code&gt; — Core Web Vitals deep dive&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-imageseo.md&lt;/code&gt; — Image-specific optimization&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-cdn.md&lt;/code&gt; — CDN strategy detail&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-hosting.md&lt;/code&gt; — Hosting selection&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-serverconfig.md&lt;/code&gt; — Server configuration&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  About this framework library
&lt;/h2&gt;

&lt;p&gt;Dev.to republish of a framework from ThatDevPro's SEO + AI engineering library. &lt;strong&gt;Canonical source: &lt;a href="https://www.thatdevpro.com/insights/framework-performance/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-performance/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio. Need this framework implemented? &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;See the Engine Optimization service&lt;/a&gt; or hire via &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;contact&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>performance</category>
      <category>javascript</category>
      <category>caching</category>
    </item>
    <item>
      <title>Core Web Vitals (LCP, INP, CLS): the page experience playbook</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 01:12:50 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/core-web-vitals-lcp-inp-cls-the-page-experience-playbook-3a24</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/core-web-vitals-lcp-inp-cls-the-page-experience-playbook-3a24</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-pageexperience/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. &lt;a href="https://www.thatdevpro.com" rel="noopener noreferrer"&gt;ThatDevPro&lt;/a&gt; is an SDVOSB-certified veteran-owned web + AI engineering studio. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Core Web Vitals (LCP, INP, CLS), Mobile Optimization, HTTPS, Intrusive Interstitials, and the User-Side Quality Floor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive installation and audit reference for page experience — the user-facing performance and usability layer Google uses as a ranking factor and, more importantly, the layer that actually determines whether visitors stay on a page or bounce. Dual-purpose: installation manual and audit document.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cross-stack implementation note&lt;/strong&gt;: the code samples in this framework are written in plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents of every pattern below, see &lt;a href="//framework-cross-stack-implementation.md"&gt;&lt;code&gt;framework-cross-stack-implementation.md&lt;/code&gt;&lt;/a&gt;. For pure client-rendered SPAs (no SSR/SSG) see &lt;a href="//framework-react.md"&gt;&lt;code&gt;framework-react.md&lt;/code&gt;&lt;/a&gt;. For Tailwind-specific concerns (purge, dynamic classes, dark-mode CLS, focus accessibility) see &lt;a href="//framework-tailwind.md"&gt;&lt;code&gt;framework-tailwind.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Document Purpose
&lt;/h2&gt;

&lt;p&gt;This is the canonical reference for page experience. Where &lt;code&gt;framework-technicalseo.md&lt;/code&gt; covers the bot-facing foundation, this document covers the human-facing one. The two intersect: a slow page is bad for users and bad for crawl budget; an unstable layout is bad for users and bad for INP. Page experience is the discipline of measuring and fixing the metrics Google uses to model what users actually feel.&lt;/p&gt;

&lt;p&gt;In 2026, page experience differs from page experience in 2020 in three ways. First, INP (Interaction to Next Paint) replaced FID (First Input Delay) as the responsiveness metric in March 2024 — INP is harder to pass because it measures every interaction, not just the first. Second, mobile-first indexing means mobile vitals are the only vitals that matter for ranking. Third, the threshold for "good" has tightened: Google now expects 75% of page loads to meet all three CWV thresholds at the 75th percentile of real-user data.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 Required Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PageSpeed Insights&lt;/strong&gt; — &lt;code&gt;pagespeed.web.dev&lt;/code&gt; — both lab and field data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome User Experience Report (CrUX)&lt;/strong&gt; — field data source for CWV&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lighthouse (via Chrome DevTools)&lt;/strong&gt; — lab measurement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebPageTest&lt;/strong&gt; — &lt;code&gt;webpagetest.org&lt;/code&gt; — deeper waterfall analysis with location/device/connection control&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console — Core Web Vitals report&lt;/strong&gt; — sitewide field data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome DevTools Performance panel&lt;/strong&gt; — interaction profiling for INP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome DevTools Coverage tab&lt;/strong&gt; — unused CSS/JS detection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome DevTools Network panel&lt;/strong&gt; — resource waterfall&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real User Monitoring (RUM)&lt;/strong&gt; — Vercel Speed Insights, Cloudflare Web Analytics, SpeedCurve, Calibre&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Vitals JS library&lt;/strong&gt; — &lt;code&gt;web-vitals&lt;/code&gt; npm package for custom RUM&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GTmetrix&lt;/strong&gt; — alternative lab + waterfall&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1.2 Document Scope
&lt;/h3&gt;

&lt;p&gt;Covers: the three Core Web Vitals (LCP, INP, CLS), mobile usability, HTTPS posture, intrusive interstitials, image optimization for performance, font loading, JavaScript performance, third-party tag management, and validation methodology. Touches but does not exhaust: deeper performance optimization (&lt;code&gt;framework-performance.md&lt;/code&gt;), accessibility (&lt;code&gt;framework-accessibility.md&lt;/code&gt;), security (&lt;code&gt;framework-security.md&lt;/code&gt;), platform-specific tuning (&lt;code&gt;framework-nextjs.md&lt;/code&gt;, &lt;code&gt;framework-wordpress.md&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Client Variables Intake
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;domain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;hosting&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                            &lt;span class="c1"&gt;# Vercel | Netlify | Cloudflare | shared | VPS | dedicated&lt;/span&gt;
&lt;span class="na"&gt;cdn&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                                &lt;span class="c1"&gt;# Cloudflare | Fastly | KeyCDN | Bunny | none&lt;/span&gt;
&lt;span class="na"&gt;cms_or_framework&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                   &lt;span class="c1"&gt;# WordPress | Next.js | Astro | Hugo | Shopify | Webflow | static&lt;/span&gt;
&lt;span class="na"&gt;current_lcp_p75&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;                     &lt;span class="c1"&gt;# in milliseconds, from CrUX or RUM&lt;/span&gt;
&lt;span class="na"&gt;current_inp_p75&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;current_cls_p75&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;mobile_score_baseline&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;               &lt;span class="c1"&gt;# PageSpeed Insights mobile&lt;/span&gt;
&lt;span class="na"&gt;desktop_score_baseline&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;known_performance_issues&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;third_party_scripts_inventory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;      &lt;span class="c1"&gt;# GA4, GTM, ad tags, chat widgets, etc.&lt;/span&gt;
&lt;span class="na"&gt;hsts_deployed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;mobile_friendly_test_passes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Core Web Vitals — The Three Metrics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 LCP — Largest Contentful Paint
&lt;/h3&gt;

&lt;p&gt;The time until the largest visible content element finishes rendering. Measured in seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thresholds (75th percentile of users):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Good: ≤ 2.5 seconds&lt;/li&gt;
&lt;li&gt;Needs improvement: 2.5 – 4.0 seconds&lt;/li&gt;
&lt;li&gt;Poor: &amp;gt; 4.0 seconds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What counts as the LCP element?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Usually the hero image or the largest text block. Watch the LCP candidate in DevTools Performance panel — the element flagged with the LCP marker is the one to optimize.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common LCP causes:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hero image too large / unoptimized&lt;/td&gt;
&lt;td&gt;Compress, modern format (WebP/AVIF), &lt;code&gt;loading="eager"&lt;/code&gt; for hero, &lt;code&gt;fetchpriority="high"&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hero image lazy-loaded&lt;/td&gt;
&lt;td&gt;Hero image must NOT be lazy-loaded. Lazy-load below-fold only.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server response slow&lt;/td&gt;
&lt;td&gt;Reduce TTFB. Cache, CDN, faster hosting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Render-blocking CSS/JS&lt;/td&gt;
&lt;td&gt;Inline critical CSS, defer non-critical, async third-party&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Font swap delays&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;font-display: swap&lt;/code&gt;, preload critical fonts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Client-side rendering of hero&lt;/td&gt;
&lt;td&gt;Server-render hero content, hydrate after&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Layout depends on JS to display&lt;/td&gt;
&lt;td&gt;Don't gate hero behind JS execution&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Measurement approach:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lab measurement (Lighthouse, WebPageTest) catches gross issues.&lt;/li&gt;
&lt;li&gt;Field measurement (CrUX, RUM) is what Google uses for ranking.&lt;/li&gt;
&lt;li&gt;A site can have great lab scores and bad field scores (or vice versa). Both must pass.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.2 INP — Interaction to Next Paint
&lt;/h3&gt;

&lt;p&gt;The 75th-percentile latency between a user interaction (click, tap, key press) and the next paint reflecting the result. Replaced FID in March 2024.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thresholds (75th percentile of interactions):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Good: ≤ 200 ms&lt;/li&gt;
&lt;li&gt;Needs improvement: 200 – 500 ms&lt;/li&gt;
&lt;li&gt;Poor: &amp;gt; 500 ms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why INP is harder than FID:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;FID measured only the first interaction. INP measures every interaction across the page lifecycle and reports the worst (or near-worst) one. A page that responds fast to the first click but stalls on the third scrolls a poor INP.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common INP causes:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Long-running JavaScript on click handler&lt;/td&gt;
&lt;td&gt;Break work into smaller tasks; use &lt;code&gt;requestIdleCallback&lt;/code&gt;; defer non-essential work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Heavy event listener (single handler on document)&lt;/td&gt;
&lt;td&gt;Use specific listeners; debounce; avoid synchronous heavy work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Re-render of large component on state change&lt;/td&gt;
&lt;td&gt;Virtualize lists; memoize; reduce render scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Third-party scripts blocking main thread&lt;/td&gt;
&lt;td&gt;Audit and defer/remove&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Layout thrashing in interaction handler&lt;/td&gt;
&lt;td&gt;Batch reads/writes; avoid forcing layout in tight loops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Animations on the main thread&lt;/td&gt;
&lt;td&gt;Move to CSS transforms or compositor thread&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;INP attribution:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use Chrome DevTools Performance panel. Record an interaction. The "Interaction" track shows input delay + processing time + presentation delay. Identify which is dominant and fix accordingly.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 CLS — Cumulative Layout Shift
&lt;/h3&gt;

&lt;p&gt;A measure of visual stability — how much the page jumps around as it loads. Unitless score; lower is better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thresholds (75th percentile of users):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Good: ≤ 0.1&lt;/li&gt;
&lt;li&gt;Needs improvement: 0.1 – 0.25&lt;/li&gt;
&lt;li&gt;Poor: &amp;gt; 0.25&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Common CLS causes:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Images without explicit dimensions&lt;/td&gt;
&lt;td&gt;Always set &lt;code&gt;width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt; attributes (or CSS aspect-ratio)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Embeds (videos, iframes) without dimensions&lt;/td&gt;
&lt;td&gt;Same — reserve space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web fonts causing reflow when they load&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;font-display: optional&lt;/code&gt; or &lt;code&gt;swap&lt;/code&gt; with size-adjusted fallback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ads injecting late and pushing content&lt;/td&gt;
&lt;td&gt;Reserve ad slot dimensions; lazy-render only below fold&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dynamic content injected above existing content&lt;/td&gt;
&lt;td&gt;Inject below or in reserved space&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CSS loaded late changing styles&lt;/td&gt;
&lt;td&gt;Inline critical CSS for above-fold&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;The cookie banner exception:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cookie consent banners that appear after a delay are a major CLS source. Either render the banner with reserved space from page load, or apply it as a fixed-position overlay that doesn't shift content.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Mobile Usability
&lt;/h2&gt;

&lt;p&gt;Since 2023 Google indexes the mobile version of every site. Mobile vitals are the only vitals that matter for ranking.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 The Viewport Tag
&lt;/h3&gt;

&lt;p&gt;Every page must include:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without this, mobile browsers render the page at desktop width and zoom out, failing nearly every mobile usability check.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Tap Target Size
&lt;/h3&gt;

&lt;p&gt;Tap targets (buttons, links) must be at least 48 × 48 CSS pixels. Targets smaller than 48px or with less than 8px spacing between them fail mobile usability.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.btn&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;.link-as-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;48px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;48px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;nav&lt;/span&gt; &lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c"&gt;/* generous click area */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.3 Text Size
&lt;/h3&gt;

&lt;p&gt;Body text on mobile should be at least 16px. Smaller text triggers automatic zoom on iOS form fields and fails mobile usability.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.4 Content Width
&lt;/h3&gt;

&lt;p&gt;Content must fit the viewport. Horizontal scrolling on mobile fails the test.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;img&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;video&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;iframe&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vw&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;overflow-x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.5 The Mobile-Friendly Test
&lt;/h3&gt;

&lt;p&gt;Run every important page through &lt;code&gt;search.google.com/test/mobile-friendly&lt;/code&gt; (deprecated; replaced by URL Inspection in GSC). The Lighthouse mobile audit covers most of the same checks.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. HTTPS
&lt;/h2&gt;

&lt;p&gt;Page experience requires HTTPS. The full implementation is in &lt;code&gt;framework-technicalseo.md&lt;/code&gt; Section 11; the page-experience-relevant pieces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Valid certificate (no browser warning)&lt;/li&gt;
&lt;li&gt;HSTS deployed&lt;/li&gt;
&lt;li&gt;No mixed content (HTTPS page loading HTTP resources)&lt;/li&gt;
&lt;li&gt;HTTP/2 or HTTP/3 enabled (performance benefit, not strict requirement)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Intrusive Interstitials
&lt;/h2&gt;

&lt;p&gt;Pop-ups, overlays, and interstitials that block content access on mobile are a ranking penalty. The penalty applies to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pop-ups covering the main content immediately on page load&lt;/li&gt;
&lt;li&gt;Standalone interstitials the user must dismiss before reaching the page&lt;/li&gt;
&lt;li&gt;Above-the-fold layouts where the visible portion is dominated by an ad or pop-up&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Exempted:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login dialogs on pages that legitimately require login&lt;/li&gt;
&lt;li&gt;Age verification on pages that legitimately require it&lt;/li&gt;
&lt;li&gt;Cookie consent banners (provided they don't dominate the viewport)&lt;/li&gt;
&lt;li&gt;Small banner ads that don't dominate the visible area&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Common offenders:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email signup overlays triggered immediately on landing&lt;/li&gt;
&lt;li&gt;"Subscribe to our newsletter" full-screen modals&lt;/li&gt;
&lt;li&gt;Discount-offer pop-ups before user has read anything&lt;/li&gt;
&lt;li&gt;Chat widgets that auto-expand to fill the screen&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fix is timing and proportion. Show the overlay after engagement (15+ seconds, 50%+ scroll, exit intent) and keep it under ~30% of the viewport.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Image Optimization for Performance
&lt;/h2&gt;

&lt;p&gt;Images are usually the LCP element and often the biggest CLS contributor. Optimize aggressively.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 Format Selection
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Use case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AVIF&lt;/td&gt;
&lt;td&gt;Best compression. Photographic content. ~95% browser support in 2026.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebP&lt;/td&gt;
&lt;td&gt;Excellent compression. Universal fallback for AVIF.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;JPEG&lt;/td&gt;
&lt;td&gt;Legacy fallback. Photographic content where AVIF/WebP unavailable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PNG&lt;/td&gt;
&lt;td&gt;Only when alpha transparency required. Use PNG-8 where possible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SVG&lt;/td&gt;
&lt;td&gt;Logos, icons, illustrations. Inline when small (&amp;lt;2KB).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GIF&lt;/td&gt;
&lt;td&gt;Never. Use MP4 or WebM.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code&gt;&amp;lt;picture&amp;gt;&lt;/code&gt; pattern serves the right format per browser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;picture&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"hero.avif"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"image/avif"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;source&lt;/span&gt; &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"hero.webp"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"image/webp"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"hero.jpg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"1200"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"800"&lt;/span&gt; &lt;span class="na"&gt;loading=&lt;/span&gt;&lt;span class="s"&gt;"eager"&lt;/span&gt; &lt;span class="na"&gt;fetchpriority=&lt;/span&gt;&lt;span class="s"&gt;"high"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/picture&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.2 Responsive Images
&lt;/h3&gt;

&lt;p&gt;Serve different sizes per viewport:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"hero-800.jpg"&lt;/span&gt;
     &lt;span class="na"&gt;srcset=&lt;/span&gt;&lt;span class="s"&gt;"hero-400.jpg 400w, hero-800.jpg 800w, hero-1200.jpg 1200w, hero-1600.jpg 1600w"&lt;/span&gt;
     &lt;span class="na"&gt;sizes=&lt;/span&gt;&lt;span class="s"&gt;"(max-width: 768px) 100vw, 50vw"&lt;/span&gt;
     &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"1200"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"800"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  7.3 Lazy Loading
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="na"&gt;loading=&lt;/span&gt;&lt;span class="s"&gt;"lazy"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"..."&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Critical:&lt;/strong&gt; the LCP image must NOT be lazy-loaded. Lazy-load below-the-fold images only. Use &lt;code&gt;loading="eager"&lt;/code&gt; (or omit; &lt;code&gt;eager&lt;/code&gt; is default) for the hero image and add &lt;code&gt;fetchpriority="high"&lt;/code&gt; to signal priority.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 Dimensions Always
&lt;/h3&gt;

&lt;p&gt;Every &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;video&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; requires &lt;code&gt;width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt; attributes (or CSS &lt;code&gt;aspect-ratio&lt;/code&gt;). This reserves layout space and prevents CLS.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.5 Image CDN
&lt;/h3&gt;

&lt;p&gt;For sites with many images, an image CDN (Cloudinary, imgix, Cloudflare Images, Vercel Image Optimization, Next.js &lt;code&gt;next/image&lt;/code&gt;) provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On-the-fly format conversion&lt;/li&gt;
&lt;li&gt;On-the-fly resizing&lt;/li&gt;
&lt;li&gt;Automatic AVIF/WebP serving&lt;/li&gt;
&lt;li&gt;Caching at the edge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-imageseo.md&lt;/code&gt; for SEO-side image considerations.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Font Loading
&lt;/h2&gt;

&lt;p&gt;Fonts are a frequent LCP and CLS culprit.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.1 font-display
&lt;/h3&gt;

&lt;p&gt;Always specify &lt;code&gt;font-display&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@font-face&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Inter'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url('/fonts/inter.woff2')&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;'woff2'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="py"&gt;font-display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;swap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c"&gt;/* show fallback immediately, swap when font loads */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;swap&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Show fallback immediately; swap when web font loads. CLS risk if fallback metrics differ.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;optional&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Use web font only if loaded within 100ms. Otherwise stick with fallback. Best for CLS.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;fallback&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;100ms blocking, 3s swap window, then fallback locked in. Compromise.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;block&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Up to 3s blocking. Avoid.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  8.2 Preload Critical Fonts
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"preload"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/fonts/inter.woff2"&lt;/span&gt; &lt;span class="na"&gt;as=&lt;/span&gt;&lt;span class="s"&gt;"font"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"font/woff2"&lt;/span&gt; &lt;span class="na"&gt;crossorigin&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only for fonts used above the fold. Preloading too many resources hurts LCP.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.3 Font Subsetting
&lt;/h3&gt;

&lt;p&gt;Modern Google Fonts are typically already subset. Self-hosted custom fonts: subset to the character set you actually use (Latin, Cyrillic, etc.). A 200KB unsubset font becomes 30KB after Latin subset.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.4 Variable Fonts
&lt;/h3&gt;

&lt;p&gt;Variable fonts (Inter, Fraunces, etc.) deliver multiple weights from one file. Net win at scale.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.5 size-adjust and Fallback Metrics
&lt;/h3&gt;

&lt;p&gt;Match fallback font metrics to web font to eliminate CLS on swap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@font-face&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'fallback-inter'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;'Arial'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="py"&gt;size-adjust&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;107%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;ascent-override&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;90%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;descent-override&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;22%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;line-gap-override&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'Inter'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;'fallback-inter'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;fontaine&lt;/code&gt; library automates this for popular fonts.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. JavaScript Performance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  9.1 Bundle Size Budget
&lt;/h3&gt;

&lt;p&gt;For mobile-first 2026:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Initial JS bundle (compressed)&lt;/td&gt;
&lt;td&gt;&amp;lt; 100 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Initial CSS (compressed)&lt;/td&gt;
&lt;td&gt;&amp;lt; 30 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Initial HTML&lt;/td&gt;
&lt;td&gt;&amp;lt; 50 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total page weight (initial load)&lt;/td&gt;
&lt;td&gt;&amp;lt; 500 KB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total page weight (with all resources)&lt;/td&gt;
&lt;td&gt;&amp;lt; 1.5 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are aggressive targets and not always achievable, but they're the bar.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.2 Code Splitting
&lt;/h3&gt;

&lt;p&gt;Load only what's needed for the initial route. Defer route-specific bundles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Next.js dynamic import&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;HeavyChart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./HeavyChart&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;ssr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  9.3 Tree Shaking
&lt;/h3&gt;

&lt;p&gt;Modern bundlers (esbuild, Vite, Rollup, Turbopack) tree-shake automatically. Verify by checking final bundle for unused imports — Coverage tab in Chrome DevTools shows unused JS.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.4 Defer and Async
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Async: download in parallel, execute as soon as ready --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"analytics.js"&lt;/span&gt; &lt;span class="na"&gt;async&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;&amp;lt;!-- Defer: download in parallel, execute in order after HTML parsing --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"enhancement.js"&lt;/span&gt; &lt;span class="na"&gt;defer&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Most third-party scripts should be &lt;code&gt;async&lt;/code&gt; or &lt;code&gt;defer&lt;/code&gt;. Inline blocking &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tags are the worst case for LCP.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.5 Long Tasks
&lt;/h3&gt;

&lt;p&gt;A "long task" is any JS execution over 50ms. Long tasks block input and hurt INP. Find them in Chrome DevTools Performance panel — they appear as red-flagged blocks. Common sources:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heavy initial render (React/Vue hydration)&lt;/li&gt;
&lt;li&gt;Large state updates&lt;/li&gt;
&lt;li&gt;Synchronous loops over big arrays&lt;/li&gt;
&lt;li&gt;Third-party SDK initialization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Break into smaller tasks with &lt;code&gt;setTimeout(0)&lt;/code&gt;, &lt;code&gt;requestIdleCallback&lt;/code&gt;, or scheduler.yield.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Third-Party Tag Management
&lt;/h2&gt;

&lt;p&gt;Most page-experience problems on real client sites trace to third-party scripts: analytics, ads, chat widgets, A/B testing tools, marketing automation pixels.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.1 The Audit
&lt;/h3&gt;

&lt;p&gt;For every site, inventory every third-party script and ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What does it do?&lt;/li&gt;
&lt;li&gt;Does the client actually use the data it produces?&lt;/li&gt;
&lt;li&gt;What's its INP impact?&lt;/li&gt;
&lt;li&gt;Can it be loaded later (defer, async, post-interaction)?&lt;/li&gt;
&lt;li&gt;Is there a lighter alternative?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Common removals after audit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Old A/B testing platforms no longer in use&lt;/li&gt;
&lt;li&gt;Multiple competing analytics (GA4 + Adobe + Heap + Hotjar + Mixpanel)&lt;/li&gt;
&lt;li&gt;Chat widgets the client doesn't monitor&lt;/li&gt;
&lt;li&gt;Pixel tags from agencies long since departed&lt;/li&gt;
&lt;li&gt;"Just in case" tags whose purpose nobody remembers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.2 Tag Manager Hygiene
&lt;/h3&gt;

&lt;p&gt;If using GTM:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Audit triggers — many fire on every page load even when only relevant on specific pages&lt;/li&gt;
&lt;li&gt;Audit tags — disable or remove unused tags&lt;/li&gt;
&lt;li&gt;Use built-in tag templates rather than custom HTML where possible&lt;/li&gt;
&lt;li&gt;Set "Wait for tags" thresholds that don't block CWV&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.3 The Self-Hosted Pattern
&lt;/h3&gt;

&lt;p&gt;For high-impact third-party scripts (especially analytics), self-hosting can reduce DNS, TCP, and TLS overhead. Plausible, Fathom, Cloudflare Web Analytics all support self-hosting.&lt;/p&gt;

&lt;p&gt;For Google Analytics, &lt;code&gt;gtag.js&lt;/code&gt; itself can't be self-hosted easily, but the &lt;code&gt;analytics.js&lt;/code&gt; payload can be proxied via Cloudflare Worker / nginx to reduce third-party origin connections.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.4 Privacy and Performance
&lt;/h3&gt;

&lt;p&gt;EU privacy law (GDPR) and US state laws (CCPA) increasingly require consent before tags fire. The consent gate has a side benefit: tags don't load until interaction, which is great for CWV. Consent Mode v2 in GTM is the conventional implementation.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Server-Side Performance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  11.1 Time to First Byte (TTFB)
&lt;/h3&gt;

&lt;p&gt;While not a CWV metric directly, TTFB feeds into LCP. Good TTFB is under 600ms; great is under 200ms.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Slow database queries&lt;/td&gt;
&lt;td&gt;Add indexes, cache, denormalize&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow templating / rendering&lt;/td&gt;
&lt;td&gt;Cache rendered output (HTML cache, full-page cache)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slow PHP / Python / Node app&lt;/td&gt;
&lt;td&gt;Profile, optimize hot paths&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Distant origin server&lt;/td&gt;
&lt;td&gt;Add CDN, choose hosting near user base&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cold-start serverless&lt;/td&gt;
&lt;td&gt;Use provisioned concurrency or always-warm tier&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  11.2 Caching Layers
&lt;/h3&gt;

&lt;p&gt;In order of preference (cheapest to most expensive lookup):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;CDN edge cache&lt;/strong&gt; — Cloudflare, Fastly, etc. — milliseconds, free at scale&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application-level page cache&lt;/strong&gt; — WP Super Cache, Vercel ISR, Astro static — single-digit ms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Object cache&lt;/strong&gt; — Redis, Memcached — for query results, session data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database query cache&lt;/strong&gt; — built into MySQL/PostgreSQL — invalidate carefully&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database itself&lt;/strong&gt; — last resort&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  11.3 HTTP/2, HTTP/3, Brotli
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTTP/2&lt;/strong&gt; — supported everywhere, multiplexes connections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP/3&lt;/strong&gt; — emerging; supported by Cloudflare, Fastly. Minor performance gain on lossy mobile networks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brotli compression&lt;/strong&gt; — better than gzip for text resources. Enable at server or CDN level.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  12. Real User Monitoring (RUM)
&lt;/h2&gt;

&lt;p&gt;Lab tests catch some problems. Field data catches the rest. Set up RUM on every client site.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.1 Free Options
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console — Core Web Vitals report&lt;/strong&gt; — sitewide CrUX data, no setup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Web Analytics&lt;/strong&gt; — free, privacy-respecting, includes CWV&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel Speed Insights&lt;/strong&gt; — free for Vercel-hosted sites&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12.2 Paid Options
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SpeedCurve&lt;/strong&gt; — comprehensive RUM with synthetic monitoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Calibre&lt;/strong&gt; — performance budgets, alerting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pingdom RUM&lt;/strong&gt; — basic monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12.3 DIY with web-vitals
&lt;/h3&gt;

&lt;p&gt;For full control, use the &lt;code&gt;web-vitals&lt;/code&gt; library:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;onLCP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onINP&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onCLS&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;web-vitals&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;sendToAnalytics&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nb"&gt;navigator&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendBeacon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/rum&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;onLCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sendToAnalytics&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;onINP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sendToAnalytics&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nf"&gt;onCLS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sendToAnalytics&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ship to your own endpoint and analyze with whatever tooling suits.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. The Validation Workflow
&lt;/h2&gt;

&lt;p&gt;For every client engagement:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Baseline (week 0)&lt;/strong&gt; — record LCP, INP, CLS at 75th percentile from PageSpeed Insights field data, GSC CWV report, and any RUM available. Document mobile and desktop separately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diagnose&lt;/strong&gt; — Lighthouse audit on representative pages. WebPageTest for waterfall. Identify top 5 contributing issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix&lt;/strong&gt; — implement changes. Verify in lab tests first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Measure&lt;/strong&gt; — wait 28 days for CrUX field data to update (CrUX uses 28-day rolling window).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterate&lt;/strong&gt; — if not yet "good," continue diagnosing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor&lt;/strong&gt; — RUM and GSC CWV report ongoing.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  14. Audit Mode
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PE1&lt;/td&gt;
&lt;td&gt;Mobile LCP at 75th percentile under 2.5s&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE2&lt;/td&gt;
&lt;td&gt;Mobile INP at 75th percentile under 200ms&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE3&lt;/td&gt;
&lt;td&gt;Mobile CLS at 75th percentile under 0.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE4&lt;/td&gt;
&lt;td&gt;Desktop LCP under 2.5s, INP under 200ms, CLS under 0.1&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE5&lt;/td&gt;
&lt;td&gt;Lighthouse mobile performance score ≥ 90 on representative pages&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE6&lt;/td&gt;
&lt;td&gt;GSC Core Web Vitals report shows zero "poor" URLs&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE7&lt;/td&gt;
&lt;td&gt;Viewport meta tag present on every page&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE8&lt;/td&gt;
&lt;td&gt;All tap targets ≥ 48 × 48 CSS pixels&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE9&lt;/td&gt;
&lt;td&gt;Body text ≥ 16px on mobile&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE10&lt;/td&gt;
&lt;td&gt;No horizontal scrolling on mobile&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE11&lt;/td&gt;
&lt;td&gt;Mobile-Friendly Test (or URL Inspection) passes&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE12&lt;/td&gt;
&lt;td&gt;HTTPS enforced; HSTS deployed&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE13&lt;/td&gt;
&lt;td&gt;No mixed content on any page&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE14&lt;/td&gt;
&lt;td&gt;No intrusive interstitials on mobile&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE15&lt;/td&gt;
&lt;td&gt;Hero image NOT lazy-loaded; has &lt;code&gt;fetchpriority="high"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE16&lt;/td&gt;
&lt;td&gt;All images have &lt;code&gt;width&lt;/code&gt; and &lt;code&gt;height&lt;/code&gt; (or aspect-ratio)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE17&lt;/td&gt;
&lt;td&gt;Below-fold images use &lt;code&gt;loading="lazy"&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE18&lt;/td&gt;
&lt;td&gt;Modern image formats (AVIF / WebP) served via &lt;code&gt;&amp;lt;picture&amp;gt;&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE19&lt;/td&gt;
&lt;td&gt;Responsive images via &lt;code&gt;srcset&lt;/code&gt; and &lt;code&gt;sizes&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE20&lt;/td&gt;
&lt;td&gt;Fonts use &lt;code&gt;font-display: swap&lt;/code&gt; or &lt;code&gt;optional&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE21&lt;/td&gt;
&lt;td&gt;Critical fonts preloaded; non-critical not&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE22&lt;/td&gt;
&lt;td&gt;Initial JS bundle &amp;lt; 100KB compressed&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE23&lt;/td&gt;
&lt;td&gt;Third-party scripts deferred or async (no inline blocking)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE24&lt;/td&gt;
&lt;td&gt;Third-party tag inventory documented and audited&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE25&lt;/td&gt;
&lt;td&gt;TTFB at 75th percentile under 600ms&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE26&lt;/td&gt;
&lt;td&gt;Brotli or gzip compression on all text resources&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE27&lt;/td&gt;
&lt;td&gt;HTTP/2 or HTTP/3 enabled&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE28&lt;/td&gt;
&lt;td&gt;Edge / CDN caching layer present&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE29&lt;/td&gt;
&lt;td&gt;RUM tooling deployed (any of: GSC CrUX, Vercel Insights, Cloudflare Web Analytics, custom web-vitals)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PE30&lt;/td&gt;
&lt;td&gt;No long tasks &amp;gt; 100ms on initial interaction (DevTools Performance)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 30. World-class: 28+/30.&lt;/p&gt;




&lt;h2&gt;
  
  
  15. Common Mistakes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lazy-loading the hero image.&lt;/strong&gt; Slows LCP dramatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No image dimensions.&lt;/strong&gt; Largest CLS source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cookie banner injected late, pushing content.&lt;/strong&gt; Reserve space or use overlay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple analytics SDKs running concurrently.&lt;/strong&gt; Pick one, remove the rest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synchronous third-party scripts.&lt;/strong&gt; Use async / defer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimizing only desktop.&lt;/strong&gt; Mobile is what Google ranks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lab scores look great, field scores poor.&lt;/strong&gt; Field data is what counts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-running click handlers.&lt;/strong&gt; INP killer; break into chunks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;font-display: block&lt;/code&gt; (or unspecified, which defaults to block).&lt;/strong&gt; Hides text until font loads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript-heavy "interactive" landing pages with sub-second blocking work.&lt;/strong&gt; INP catastrophe on mid-tier mobile devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No CDN.&lt;/strong&gt; Origin server in one region serves users globally; LCP suffers everywhere except near the origin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Render-blocking CSS.&lt;/strong&gt; Inline critical above-fold CSS; defer the rest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web fonts loading from external CDN with no preconnect.&lt;/strong&gt; Add &lt;code&gt;&amp;lt;link rel="preconnect"&amp;gt;&lt;/code&gt; for font origin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Poll-based polling JavaScript.&lt;/strong&gt; Use server-sent events or WebSockets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unused JS frameworks loaded.&lt;/strong&gt; "We're using React for one widget" but shipping the whole bundle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; embeds without dimensions.&lt;/strong&gt; Major CLS source.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treating CWV as a checkbox once and never again.&lt;/strong&gt; CWV regress over time as features are added.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  16. Maintenance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Weekly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spot-check PageSpeed Insights for representative pages&lt;/li&gt;
&lt;li&gt;Review GSC Core Web Vitals report for new errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Monthly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sitewide GSC CWV review&lt;/li&gt;
&lt;li&gt;RUM dashboard review&lt;/li&gt;
&lt;li&gt;New third-party scripts audit&lt;/li&gt;
&lt;li&gt;Lighthouse audit on top 10 pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quarterly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive performance audit (WebPageTest + Lighthouse)&lt;/li&gt;
&lt;li&gt;Third-party tag inventory refresh&lt;/li&gt;
&lt;li&gt;Image/font/CSS/JS budget review&lt;/li&gt;
&lt;li&gt;CDN configuration review&lt;/li&gt;
&lt;li&gt;Cache hit ratio review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Annually:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full performance budget reassessment&lt;/li&gt;
&lt;li&gt;Hosting/CDN evaluation&lt;/li&gt;
&lt;li&gt;New CWV metric watch (Google revises CWV periodically)&lt;/li&gt;
&lt;li&gt;Major framework / CMS update planning&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  17. Companion Documents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;framework-technicalseo.md&lt;/code&gt; — Indexing, HTTPS, server-side foundation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-performance.md&lt;/code&gt; — Deeper performance optimization beyond CWV&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-imageseo.md&lt;/code&gt; — Image SEO including format and alt text&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-mobileseo.md&lt;/code&gt; — Mobile-specific deep dive&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-accessibility.md&lt;/code&gt; — A11y patterns (overlap with mobile usability)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-security.md&lt;/code&gt; — HTTPS, HSTS, security headers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-nextjs.md&lt;/code&gt; — Next.js performance patterns&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-wordpress.md&lt;/code&gt; — WordPress performance patterns&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-headless.md&lt;/code&gt; — Headless architecture performance&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-cro.md&lt;/code&gt; — Performance and conversion correlation&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Document version&lt;/strong&gt;: 1.0&lt;br&gt;
&lt;strong&gt;Last updated&lt;/strong&gt;: 2026-05-05&lt;br&gt;
&lt;strong&gt;Owner&lt;/strong&gt;: Joseph W. Anady — ThatDeveloperGuy — SDVOSB&lt;/p&gt;




&lt;h2&gt;
  
  
  About this framework library
&lt;/h2&gt;

&lt;p&gt;This article is the Dev.to republish of a framework reference document from ThatDevPro's SEO + AI engineering library. &lt;strong&gt;Canonical source: &lt;a href="https://www.thatdevpro.com/insights/framework-pageexperience/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-pageexperience/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio operating from Cassville, Missouri. The studio runs the full &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;14-tier Engine Optimization&lt;/a&gt; stack and ships open-source tooling for AI citation engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Companion 14-tier Engine Optimization stack&lt;/strong&gt; (each tier is its own article):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-1-foundation/" rel="noopener noreferrer"&gt;Tier 1 — Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-2-search-visibility/" rel="noopener noreferrer"&gt;Tier 2 — Search Visibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-3-ai-domination/" rel="noopener noreferrer"&gt;Tier 3 — AI Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-4-entity-and-authority/" rel="noopener noreferrer"&gt;Tier 4 — Entity and Authority&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-5-local-domination/" rel="noopener noreferrer"&gt;Tier 5 — Local Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-6-content-and-multimedia/" rel="noopener noreferrer"&gt;Tier 6 — Content and Multimedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-7-social-and-community/" rel="noopener noreferrer"&gt;Tier 7 — Social and Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-8-data-analytics-conversion/" rel="noopener noreferrer"&gt;Tier 8 — Data, Analytics, Conversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-9-monitoring-and-intelligence/" rel="noopener noreferrer"&gt;Tier 9 — Monitoring and Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-10-workflow-and-operations/" rel="noopener noreferrer"&gt;Tier 10 — Workflow and Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-11-marketplace-and-retail/" rel="noopener noreferrer"&gt;Tier 11 — Marketplace and Retail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-12-international/" rel="noopener noreferrer"&gt;Tier 12 — International&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-14-advanced-and-immersive/" rel="noopener noreferrer"&gt;Tier 14 — Advanced and Immersive&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Need this framework implemented on your site? &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;See the Engine Optimization service&lt;/a&gt; or hire through &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;ThatDevPro contact&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>performance</category>
      <category>seo</category>
      <category>corewebvitals</category>
    </item>
    <item>
      <title>Technical SEO: crawling, indexing, JS rendering</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 01:12:31 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/technical-seo-crawling-indexing-js-rendering-3e3h</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/technical-seo-crawling-indexing-js-rendering-3e3h</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-technicalseo/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. &lt;a href="https://www.thatdevpro.com" rel="noopener noreferrer"&gt;ThatDevPro&lt;/a&gt; is an SDVOSB-certified veteran-owned web + AI engineering studio. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Crawlability, Indexing, Canonicalization, Redirects, URL Structure, and the Bot-Facing Foundation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive installation and audit reference for technical SEO — the bedrock layer that determines whether search engines and AI crawlers can discover, render, and index a site at all. Every other framework in this library assumes the technical foundation works. This document specifies what "works" means and how to verify it. Dual-purpose: installation manual and audit document.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cross-stack implementation note&lt;/strong&gt;: the code samples in this framework are written in plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents of every pattern below, see &lt;a href="//framework-cross-stack-implementation.md"&gt;&lt;code&gt;framework-cross-stack-implementation.md&lt;/code&gt;&lt;/a&gt;. For pure client-rendered SPAs (no SSR/SSG) see &lt;a href="//framework-react.md"&gt;&lt;code&gt;framework-react.md&lt;/code&gt;&lt;/a&gt;. For Tailwind-specific concerns (purge, dynamic classes, dark-mode CLS, focus accessibility) see &lt;a href="//framework-tailwind.md"&gt;&lt;code&gt;framework-tailwind.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Document Purpose
&lt;/h2&gt;

&lt;p&gt;This is the canonical reference for technical SEO. Content quality, authority signals, schema markup, and AI optimization are all wasted if a crawler cannot reach a page, cannot render it, or cannot decide which version to index. Technical SEO is the prerequisite. It is not glamorous. It is not optional.&lt;/p&gt;

&lt;p&gt;In 2026, technical SEO has changed in three ways since 2020. First, JavaScript rendering is no longer the bleeding-edge concern — Google renders JS reliably and other major crawlers (Bingbot, GPTBot, ClaudeBot, PerplexityBot, Applebot) have caught up to varying degrees. Second, the bot landscape exploded: a 2026 site receives traffic from a dozen named AI crawlers in addition to the four major search engines, and &lt;code&gt;robots.txt&lt;/code&gt; policy is now an editorial decision, not a technical default. Third, indexing has become more selective — Google indexes a smaller percentage of crawled URLs than it did a decade ago, so wasting crawl budget on duplicate, parameterized, or thin URLs has direct cost.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 Required Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console&lt;/strong&gt; — &lt;code&gt;search.google.com/search-console&lt;/code&gt; — coverage, sitemaps, URL inspection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bing Webmaster Tools&lt;/strong&gt; — &lt;code&gt;www.bing.com/webmasters&lt;/code&gt; — Bing-specific coverage and IndexNow submission&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Screaming Frog SEO Spider&lt;/strong&gt; — desktop crawler, free up to 500 URLs, paid for unlimited&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sitebulb&lt;/strong&gt; — desktop crawler, alternative to Screaming Frog with stronger reporting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ahrefs Site Audit&lt;/strong&gt; / &lt;strong&gt;Semrush Site Audit&lt;/strong&gt; — cloud-based crawlers with historical tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Rich Results Test&lt;/strong&gt; — &lt;code&gt;search.google.com/test/rich-results&lt;/code&gt; — render + schema validation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Lighthouse&lt;/strong&gt; — Chrome DevTools performance/SEO audit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GTmetrix&lt;/strong&gt; / &lt;strong&gt;WebPageTest&lt;/strong&gt; — performance and waterfall analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;curl&lt;/code&gt; / &lt;code&gt;httpie&lt;/code&gt;&lt;/strong&gt; — manual header inspection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare / nginx access logs&lt;/strong&gt; — server-level crawl observation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IndexNow&lt;/strong&gt; — &lt;code&gt;www.indexnow.org&lt;/code&gt; — push-based indexing for Bing, Yandex, Naver&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1.2 Document Scope
&lt;/h3&gt;

&lt;p&gt;Covers: crawl access, robots.txt, XML sitemaps, canonicalization, redirects, URL structure, status codes, JS rendering, mobile-first indexing, HTTPS posture, hreflang, and crawler observability. Touches but does not exhaust: page experience (own framework: &lt;code&gt;framework-pageexperience.md&lt;/code&gt;), schema (&lt;code&gt;framework-schema.md&lt;/code&gt;), internal linking (&lt;code&gt;framework-internallinking.md&lt;/code&gt;), security (&lt;code&gt;framework-security.md&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Client Variables Intake
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;domain_apex&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;www_or_non_www_canonical&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;           &lt;span class="c1"&gt;# decide which is canonical&lt;/span&gt;
&lt;span class="na"&gt;http_or_https&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https"&lt;/span&gt;                 &lt;span class="c1"&gt;# always https in 2026&lt;/span&gt;
&lt;span class="na"&gt;trailing_slash_policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;              &lt;span class="c1"&gt;# with-slash | without-slash&lt;/span&gt;
&lt;span class="na"&gt;url_case_policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;lowercase"&lt;/span&gt;
&lt;span class="na"&gt;cms_or_framework&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                   &lt;span class="c1"&gt;# WordPress | Next.js | Astro | Hugo | Shopify | Webflow | static&lt;/span&gt;
&lt;span class="na"&gt;hosting_environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;cdn&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                                &lt;span class="c1"&gt;# Cloudflare | Fastly | none&lt;/span&gt;
&lt;span class="na"&gt;search_console_verified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;bing_webmaster_verified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;indexnow_key_deployed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;known_indexing_issues&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;recent_migrations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;international_targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;              &lt;span class="c1"&gt;# if any hreflang need&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Crawl Access Layer
&lt;/h2&gt;

&lt;h3&gt;
  
  
  3.1 robots.txt
&lt;/h3&gt;

&lt;p&gt;The robots.txt file at the domain root tells crawlers which paths they may request. It is advisory, not a security mechanism — anything genuinely sensitive belongs behind authentication, not behind a Disallow rule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimum viable robots.txt for a production site:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: *
&lt;span class="n"&gt;Allow&lt;/span&gt;: /
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;wp&lt;/span&gt;-&lt;span class="n"&gt;admin&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /&lt;span class="n"&gt;staging&lt;/span&gt;/
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /*?*&lt;span class="n"&gt;sessionid&lt;/span&gt;=
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /*?*&lt;span class="n"&gt;utm_&lt;/span&gt;*

&lt;span class="n"&gt;Sitemap&lt;/span&gt;: &lt;span class="n"&gt;https&lt;/span&gt;://&lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;/&lt;span class="n"&gt;sitemap&lt;/span&gt;.&lt;span class="n"&gt;xml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Required validations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The file is served at &lt;code&gt;/robots.txt&lt;/code&gt; with &lt;code&gt;Content-Type: text/plain&lt;/code&gt; and HTTP 200.&lt;/li&gt;
&lt;li&gt;It does NOT block CSS, JS, or image directories. Googlebot needs those to render.&lt;/li&gt;
&lt;li&gt;It does NOT block fonts (&lt;code&gt;/fonts/&lt;/code&gt;, &lt;code&gt;/assets/fonts/&lt;/code&gt;) or web manifest assets.&lt;/li&gt;
&lt;li&gt;The Sitemap directive uses an absolute URL.&lt;/li&gt;
&lt;li&gt;Wildcards (&lt;code&gt;*&lt;/code&gt;) are used sparingly and tested in GSC's robots tester before deploy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AI crawler policy (2026 baseline):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In 2026, the question is no longer "do we block AI crawlers" but "which AI crawlers do we want citing us, and which do we want to block." A typical client-facing posture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# AI search crawlers — usually allow (citation traffic)
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;GPTBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;ClaudeBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;PerplexityBot&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;Google&lt;/span&gt;-&lt;span class="n"&gt;Extended&lt;/span&gt;
&lt;span class="n"&gt;Allow&lt;/span&gt;: /

&lt;span class="c"&gt;# Aggressive scrapers — block by default unless client requests otherwise
&lt;/span&gt;&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;AhrefsBot&lt;/span&gt;
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;SemrushBot&lt;/span&gt;
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /

&lt;span class="n"&gt;User&lt;/span&gt;-&lt;span class="n"&gt;agent&lt;/span&gt;: &lt;span class="n"&gt;MJ12Bot&lt;/span&gt;
&lt;span class="n"&gt;Disallow&lt;/span&gt;: /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cross-reference: &lt;code&gt;framework-aicitations.md&lt;/code&gt; for the full AI-crawler matrix.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 X-Robots-Tag
&lt;/h3&gt;

&lt;p&gt;For non-HTML resources (PDFs, images, JSON files) that should not be indexed, &lt;code&gt;X-Robots-Tag&lt;/code&gt; is the only signal. Set via server config:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="c1"&gt;# nginx&lt;/span&gt;
&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="sr"&gt;*&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s"&gt;.(pdf|json)&lt;/span&gt;$ &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;add_header&lt;/span&gt; &lt;span class="s"&gt;X-Robots-Tag&lt;/span&gt; &lt;span class="s"&gt;"noindex,&lt;/span&gt; &lt;span class="s"&gt;nofollow"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For HTML pages, &lt;code&gt;&amp;lt;meta name="robots"&amp;gt;&lt;/code&gt; is preferred because it is more visible to humans editing pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 Crawl Budget
&lt;/h3&gt;

&lt;p&gt;Crawl budget is the number of URLs Googlebot crawls in a given period. For sites under ~50,000 URLs this rarely matters. Above that, crawl-budget waste shows as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Many URLs in GSC's "Crawled — currently not indexed"&lt;/li&gt;
&lt;li&gt;Many URLs in "Discovered — currently not indexed"&lt;/li&gt;
&lt;li&gt;Slow propagation of new content to the index&lt;/li&gt;
&lt;li&gt;Frequent crawls of low-value parameterized URLs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Crawl budget conservation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Block parameterized/sessioned URLs in robots.txt&lt;/li&gt;
&lt;li&gt;410 truly dead URLs (faster than 404 to be removed from crawl)&lt;/li&gt;
&lt;li&gt;Reduce internal links to low-value pages&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;noindex&lt;/code&gt; on pages that should not be indexed (404 templates, search result pages, tag archives with thin content)&lt;/li&gt;
&lt;li&gt;Use a clean XML sitemap so the crawler has a prioritized list&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Indexing Layer
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 The Two-Step Process
&lt;/h3&gt;

&lt;p&gt;Indexing is two steps, not one:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Discovery and crawl&lt;/strong&gt; — the bot finds the URL (sitemap, link, IndexNow ping) and requests it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indexing&lt;/strong&gt; — the bot parses the response, decides whether to add it to the index, and what to associate with it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A page can be crawled but not indexed. A page can be in the index but not ranked. These are distinct states with distinct fixes.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Index Status in Google Search Console
&lt;/h3&gt;

&lt;p&gt;Use Coverage (now Pages) report. The buckets:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Indexed&lt;/td&gt;
&lt;td&gt;In Google's index&lt;/td&gt;
&lt;td&gt;Monitor for unexpected changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Indexed, not submitted in sitemap&lt;/td&gt;
&lt;td&gt;Found via links, not in sitemap&lt;/td&gt;
&lt;td&gt;Add to sitemap if it should be indexed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crawled — currently not indexed&lt;/td&gt;
&lt;td&gt;Crawled but Google chose not to index&lt;/td&gt;
&lt;td&gt;Improve content quality, add internal links, check duplication&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Discovered — currently not indexed&lt;/td&gt;
&lt;td&gt;Found but not yet crawled&lt;/td&gt;
&lt;td&gt;Often crawl-budget signal; check site authority + reduce low-value URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Excluded by 'noindex' tag&lt;/td&gt;
&lt;td&gt;Intentionally excluded&lt;/td&gt;
&lt;td&gt;Verify intent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Page with redirect&lt;/td&gt;
&lt;td&gt;Redirected; not indexed itself&lt;/td&gt;
&lt;td&gt;Verify the redirect target is indexed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate, Google chose different canonical&lt;/td&gt;
&lt;td&gt;Google ignored your canonical&lt;/td&gt;
&lt;td&gt;Check internal linking + canonical signals consistency&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Soft 404&lt;/td&gt;
&lt;td&gt;Returns 200 but content looks like a 404 page&lt;/td&gt;
&lt;td&gt;Either return real 404 or fix the page&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Server error (5xx)&lt;/td&gt;
&lt;td&gt;Crawl failed&lt;/td&gt;
&lt;td&gt;Fix the server error&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  4.3 IndexNow
&lt;/h3&gt;

&lt;p&gt;IndexNow is a push-based indexing protocol supported by Bing, Yandex, Seznam, and Naver (not Google). When a URL changes, you POST it to IndexNow and supported engines crawl within minutes instead of days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementation:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate an API key (random 32-character string)&lt;/li&gt;
&lt;li&gt;Place the key as &lt;code&gt;/{key}.txt&lt;/code&gt; at the domain root with the key as its content&lt;/li&gt;
&lt;li&gt;POST URL changes to &lt;code&gt;https://api.indexnow.org/indexnow&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="nf"&gt;POST&lt;/span&gt; &lt;span class="nn"&gt;/indexnow&lt;/span&gt; &lt;span class="k"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="m"&gt;1.1&lt;/span&gt;
&lt;span class="na"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;api.indexnow.org&lt;/span&gt;
&lt;span class="na"&gt;Content-Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;application/json&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"host"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"abc123..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keyLocation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/abc123.txt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"urlList"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/new-page/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/updated-page/"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For WordPress, plugin support exists. For Next.js / static sites, integrate as a build-time hook.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.4 Mobile-First Indexing
&lt;/h3&gt;

&lt;p&gt;Since 2023, Google indexes the mobile version of every site. The desktop version is largely ignored for ranking. Verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All content visible on mobile (not hidden behind "click to expand" with mobile-only display:none)&lt;/li&gt;
&lt;li&gt;Structured data identical on mobile and desktop&lt;/li&gt;
&lt;li&gt;Meta tags identical on mobile and desktop&lt;/li&gt;
&lt;li&gt;Internal linking identical (no mobile-only menu omitting key links)&lt;/li&gt;
&lt;li&gt;Images load on mobile (no desktop-only assets)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Canonicalization
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Why Canonicalization Matters
&lt;/h3&gt;

&lt;p&gt;Modern sites generate many URLs that resolve to the same content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;https://example.com/page&lt;/code&gt; and &lt;code&gt;https://example.com/page/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://example.com/page&lt;/code&gt; and &lt;code&gt;https://www.example.com/page&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://example.com/page?utm_source=email&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://example.com/PAGE&lt;/code&gt; (some servers serve the same content for any case)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://example.com/page?session=abc123&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without explicit canonical signals, Google picks one and may not pick the one you want. Ranking signals split across variants. Indexing decisions become inconsistent.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Canonical Signal Stack
&lt;/h3&gt;

&lt;p&gt;Canonical signals reinforce each other. Use all of them:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;&amp;lt;link rel="canonical" href="..."&amp;gt;&lt;/code&gt;&lt;/strong&gt; — the explicit declaration. Self-referential on the canonical URL itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;301 redirects&lt;/strong&gt; — for true duplicates, redirect non-canonical to canonical (preferred over rel=canonical when content is genuinely identical).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal linking&lt;/strong&gt; — every internal link points to the canonical URL, never to a redirected variant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XML sitemap&lt;/strong&gt; — only canonical URLs appear in the sitemap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;hreflang annotations&lt;/strong&gt; — when present, must reference canonical URLs only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP &lt;code&gt;Link&lt;/code&gt; header&lt;/strong&gt; — equivalent to rel=canonical, used for non-HTML resources.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If these signals disagree, Google picks one and ignores the rest. Consistency is the rule.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 Common Canonicalization Mistakes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Canonical to a redirect target.&lt;/strong&gt; Always canonical to the URL that returns 200, never to one that 301s.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-domain canonical without authority.&lt;/strong&gt; You can canonical &lt;code&gt;mirror.example.com&lt;/code&gt; to &lt;code&gt;example.com&lt;/code&gt;, but canonicals across unrelated domains are usually ignored.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-canonical with parameters present.&lt;/strong&gt; A URL like &lt;code&gt;/page?utm_source=x&lt;/code&gt; should canonical to &lt;code&gt;/page&lt;/code&gt; (no parameters), not self-canonical.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conflicting canonicals between hreflang clusters.&lt;/strong&gt; Each hreflang cluster member must canonical to itself, not to an English default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP version canonicalizing to HTTPS but not redirecting.&lt;/strong&gt; Use a 301 plus self-canonical on HTTPS, not just rel=canonical.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5.4 Trailing Slash and Case
&lt;/h3&gt;

&lt;p&gt;Pick one and enforce it sitewide via 301 redirect. Do not rely on canonicals alone — redirects collapse the duplication, canonicals only signal it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="c1"&gt;# nginx — enforce trailing slash + lowercase&lt;/span&gt;
&lt;span class="k"&gt;rewrite&lt;/span&gt; &lt;span class="s"&gt;^/(.*[A-Z]+.*)&lt;/span&gt;$ &lt;span class="n"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="s"&gt;permanent&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;# would need lua/regex helper&lt;/span&gt;
&lt;span class="k"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;404&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For Next.js, set &lt;code&gt;trailingSlash: true&lt;/code&gt; (or &lt;code&gt;false&lt;/code&gt;) in &lt;code&gt;next.config.js&lt;/code&gt; and stick with it. Mixing breaks canonicalization.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Redirects
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Status Codes
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Use case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;301 Moved Permanently&lt;/td&gt;
&lt;td&gt;The URL has permanently moved. Passes ranking signals. Default for migrations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;302 Found&lt;/td&gt;
&lt;td&gt;Temporary redirect. Use only for actual temporary moves (A/B tests, seasonal pages). Misused 302s leak link equity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;307 Temporary Redirect&lt;/td&gt;
&lt;td&gt;Like 302 but preserves request method. Rare in SEO context.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;308 Permanent Redirect&lt;/td&gt;
&lt;td&gt;Like 301 but preserves request method. Functionally equivalent for SEO.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;410 Gone&lt;/td&gt;
&lt;td&gt;Page is permanently removed and not coming back. Faster removal from index than 404.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;451 Unavailable for Legal Reasons&lt;/td&gt;
&lt;td&gt;Use when content removed for legal reasons (DMCA, jurisdictional).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  6.2 Redirect Chains
&lt;/h3&gt;

&lt;p&gt;A chain is &lt;code&gt;A → B → C&lt;/code&gt;. Eliminate them. Every redirect should be a single hop to the final URL. Chains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Waste crawl budget&lt;/li&gt;
&lt;li&gt;Add latency for users&lt;/li&gt;
&lt;li&gt;Risk dropping signals at each hop&lt;/li&gt;
&lt;li&gt;Break when one link in the chain dies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Maintain a redirect map spreadsheet for any migration. After deploying redirects, crawl the site and verify zero chains.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.3 Redirect Implementation Layers
&lt;/h3&gt;

&lt;p&gt;In order of preference:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Server config&lt;/strong&gt; (nginx, Apache, Cloudflare Rules) — fastest, most reliable, executed before page load.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CMS-level redirect plugin&lt;/strong&gt; — fine for low-volume changes, performance penalty at scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript redirects&lt;/strong&gt; — last resort. Slow, fragile, sometimes ignored by crawlers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Meta refresh redirects&lt;/strong&gt; — never use. Treated as low-quality signal.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  6.4 The Migration Redirect Pattern
&lt;/h3&gt;

&lt;p&gt;When migrating URL structure:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate a 1:1 map of old URL → new URL for every indexed page.&lt;/li&gt;
&lt;li&gt;Implement 301s in server config before deploy.&lt;/li&gt;
&lt;li&gt;Update internal links to point to new URLs (do not rely on the redirect).&lt;/li&gt;
&lt;li&gt;Update XML sitemap to list only new URLs.&lt;/li&gt;
&lt;li&gt;Submit new sitemap in GSC.&lt;/li&gt;
&lt;li&gt;Monitor GSC's Coverage report for 30-90 days.&lt;/li&gt;
&lt;li&gt;Keep redirects in place permanently — old URLs have inbound links from sites you don't control.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-migration.md&lt;/code&gt; for full migration methodology.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. URL Structure
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7.1 The Eight URL Rules
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lowercase.&lt;/strong&gt; Always.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hyphens between words.&lt;/strong&gt; Not underscores. Not camelCase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Under 60 characters when possible.&lt;/strong&gt; Long URLs index fine but truncate in SERPs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No stop words unless meaningful.&lt;/strong&gt; &lt;code&gt;/the-best-web-hosting/&lt;/code&gt; reads better as &lt;code&gt;/best-web-hosting/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Descriptive, not numeric.&lt;/strong&gt; &lt;code&gt;/blog/post-1234/&lt;/code&gt; is opaque; &lt;code&gt;/blog/local-seo-checklist/&lt;/code&gt; is meaningful.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No file extensions where avoidable.&lt;/strong&gt; &lt;code&gt;/about/&lt;/code&gt; over &lt;code&gt;/about.html&lt;/code&gt; or &lt;code&gt;/about.php&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One canonical separator policy.&lt;/strong&gt; Don't mix &lt;code&gt;/category/post/&lt;/code&gt; and &lt;code&gt;/category-post/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stable.&lt;/strong&gt; Once published, do not change a URL without redirecting.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  7.2 URL Hierarchy and Crawl Depth
&lt;/h3&gt;

&lt;p&gt;A URL's path depth (&lt;code&gt;/a/b/c/d/page/&lt;/code&gt;) is independent of crawl depth (clicks from homepage). Crawl depth matters for SEO; path depth is only loosely related.&lt;/p&gt;

&lt;p&gt;Target: every important page reachable in 3 clicks or fewer from the homepage. Verify with Sitebulb's Crawl Depth report.&lt;/p&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-internallinking.md&lt;/code&gt; for hub-and-spoke architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.3 Parameter Handling
&lt;/h3&gt;

&lt;p&gt;URL parameters create duplication. Strategies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Block in robots.txt&lt;/strong&gt; — for tracking parameters that should never be indexed (&lt;code&gt;?utm_*&lt;/code&gt;, &lt;code&gt;?sessionid=&lt;/code&gt;, &lt;code&gt;?fbclid=&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canonical to parameterless version&lt;/strong&gt; — for sort/filter parameters where the parameterless version is canonical.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-canonical with noindex&lt;/strong&gt; — for parameter combinations that are unique pages but should not be indexed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GSC URL Parameter tool&lt;/strong&gt; — deprecated as of 2022. Use canonical signals instead.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. XML Sitemaps
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8.1 What Belongs in a Sitemap
&lt;/h3&gt;

&lt;p&gt;Only canonical, indexable, 200-status URLs that you want indexed. Everything else stays out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Excluded: &lt;code&gt;noindex&lt;/code&gt; pages, redirected URLs, 4xx URLs, duplicate URLs, parameterized variants&lt;/li&gt;
&lt;li&gt;Excluded: pagination URLs (page/2/, page/3/) unless you have a strategic reason&lt;/li&gt;
&lt;li&gt;Excluded: search result pages, login pages, account pages&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.2 Sitemap Structure
&lt;/h3&gt;

&lt;p&gt;For sites under 50,000 URLs, a single sitemap is fine. Above that, use a sitemap index:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;sitemapindex&lt;/span&gt; &lt;span class="na"&gt;xmlns=&lt;/span&gt;&lt;span class="s"&gt;"http://www.sitemaps.org/schemas/sitemap/0.9"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;sitemap&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;loc&amp;gt;&lt;/span&gt;https://example.com/sitemap-pages.xml&lt;span class="nt"&gt;&amp;lt;/loc&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;lastmod&amp;gt;&lt;/span&gt;2026-05-05&lt;span class="nt"&gt;&amp;lt;/lastmod&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/sitemap&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;sitemap&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;loc&amp;gt;&lt;/span&gt;https://example.com/sitemap-posts.xml&lt;span class="nt"&gt;&amp;lt;/loc&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;lastmod&amp;gt;&lt;/span&gt;2026-05-05&lt;span class="nt"&gt;&amp;lt;/lastmod&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/sitemap&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;sitemap&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;loc&amp;gt;&lt;/span&gt;https://example.com/sitemap-images.xml&lt;span class="nt"&gt;&amp;lt;/loc&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;lastmod&amp;gt;&lt;/span&gt;2026-05-05&lt;span class="nt"&gt;&amp;lt;/lastmod&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/sitemap&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/sitemapindex&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Per-sitemap entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;loc&amp;gt;&lt;/span&gt;https://example.com/page/&lt;span class="nt"&gt;&amp;lt;/loc&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;lastmod&amp;gt;&lt;/span&gt;2026-05-05&lt;span class="nt"&gt;&amp;lt;/lastmod&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/url&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;&amp;lt;changefreq&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;priority&amp;gt;&lt;/code&gt; are ignored by Google. &lt;code&gt;&amp;lt;lastmod&amp;gt;&lt;/code&gt; is honored when accurate; if you fake it (always = today), Google starts ignoring it.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.3 Specialized Sitemaps
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Image sitemap&lt;/strong&gt; — for image-heavy sites; accelerates Image Pack inclusion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Video sitemap&lt;/strong&gt; — required for native video content; alternative to VideoObject schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;News sitemap&lt;/strong&gt; — for sites approved for Google News; only includes articles from the last 48 hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;hreflang sitemap&lt;/strong&gt; — programmatic alternative to inline hreflang tags.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.4 Submission
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Submit sitemap URL in GSC and Bing Webmaster Tools.&lt;/li&gt;
&lt;li&gt;Reference sitemap URL in robots.txt (&lt;code&gt;Sitemap: https://...&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;For large sites, ping the sitemap when content changes (or use IndexNow).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Status Codes — The Operator's Reference
&lt;/h2&gt;

&lt;p&gt;Beyond redirects, status codes communicate site health to crawlers. The full inventory worth knowing:&lt;/p&gt;

&lt;h3&gt;
  
  
  9.1 2xx Success
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;200 OK&lt;/strong&gt; — page delivered. Default for healthy URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;201 Created&lt;/strong&gt; — resource created (POST endpoints).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;204 No Content&lt;/strong&gt; — success, no body returned.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;206 Partial Content&lt;/strong&gt; — range request (video, large download resume).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.2 3xx Redirection
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;301 / 308&lt;/strong&gt; — permanent. Default for migrations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;302 / 307&lt;/strong&gt; — temporary. Use sparingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;304 Not Modified&lt;/strong&gt; — conditional GET succeeded; client uses its cached copy. Healthy at scale.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.3 4xx Client Errors
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;400 Bad Request&lt;/strong&gt; — malformed request. Usually bot or attack traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;401 Unauthorized&lt;/strong&gt; — auth required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;403 Forbidden&lt;/strong&gt; — access denied. If on a public page, check nginx/htaccess rules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;404 Not Found&lt;/strong&gt; — URL does not exist. Track in GSC and either redirect or 410.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;405 Method Not Allowed&lt;/strong&gt; — right URL, wrong verb. Common form-handler misconfiguration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;410 Gone&lt;/strong&gt; — permanently removed. Faster removal from index than 404.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;429 Too Many Requests&lt;/strong&gt; — rate limited. Usually bot abuse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;451 Unavailable for Legal Reasons&lt;/strong&gt; — content removed for legal cause.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.4 5xx Server Errors
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;500 Internal Server Error&lt;/strong&gt; — application crash.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;502 Bad Gateway&lt;/strong&gt; — nginx couldn't reach upstream.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;503 Service Unavailable&lt;/strong&gt; — maintenance or overload. Use &lt;code&gt;Retry-After&lt;/code&gt; header.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;504 Gateway Timeout&lt;/strong&gt; — upstream too slow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5xx codes are urgent. Sustained 5xx during a Googlebot crawl drops pages from the index.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. JavaScript Rendering
&lt;/h2&gt;

&lt;h3&gt;
  
  
  10.1 The Two-Wave Indexing Model (Mostly Obsolete)
&lt;/h3&gt;

&lt;p&gt;For years, Google's two-wave model meant JS sites were indexed late: the first wave indexed HTML, the second wave indexed rendered content days later. As of 2025, Google renders the vast majority of pages within hours of the first crawl. The two-wave problem is no longer a structural blocker for most sites.&lt;/p&gt;

&lt;p&gt;It is still real for AI crawlers. GPTBot, ClaudeBot, and PerplexityBot do not all render JS reliably. For AI search visibility, server-side rendered content matters more than for traditional Google SEO.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.2 Rendering Strategy by Content Type
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Content type&lt;/th&gt;
&lt;th&gt;Recommended rendering&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Marketing pages, landing pages&lt;/td&gt;
&lt;td&gt;SSG or SSR (no client-side rendering for primary content)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Blog posts, articles&lt;/td&gt;
&lt;td&gt;SSG&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ecommerce product pages&lt;/td&gt;
&lt;td&gt;SSR with hydration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logged-in user pages&lt;/td&gt;
&lt;td&gt;CSR is fine (these aren't indexed anyway)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Real-time data displays&lt;/td&gt;
&lt;td&gt;SSR shell + client hydration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  10.3 Validation
&lt;/h3&gt;

&lt;p&gt;Use Google's Mobile-Friendly Test or URL Inspection tool's "Test Live URL" to see what Googlebot actually renders. If primary content is missing, the page is not effectively indexed even if it returns 200.&lt;/p&gt;

&lt;p&gt;For AI crawler visibility, &lt;code&gt;curl -A "GPTBot" https://example.com/page&lt;/code&gt; and inspect the HTML response body. If the content is in &lt;code&gt;&amp;lt;noscript&amp;gt;&lt;/code&gt; only or arrives via fetch/XHR, AI crawlers miss it.&lt;/p&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-headless.md&lt;/code&gt; and &lt;code&gt;framework-nextjs.md&lt;/code&gt; for framework-specific rendering patterns.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. HTTPS
&lt;/h2&gt;

&lt;p&gt;In 2026, HTTPS is non-negotiable. HTTP-only sites suffer ranking penalties, browser warnings, and lost trust signals.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.1 Required Configuration
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;TLS 1.2 minimum, TLS 1.3 preferred.&lt;/li&gt;
&lt;li&gt;Valid certificate from a recognized CA (Let's Encrypt, Cloudflare, paid).&lt;/li&gt;
&lt;li&gt;HSTS header: &lt;code&gt;Strict-Transport-Security: max-age=31536000; includeSubDomains; preload&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;HSTS preload list submission for high-value domains: &lt;code&gt;hstspreload.org&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;HTTP-to-HTTPS 301 redirect, single hop.&lt;/li&gt;
&lt;li&gt;Canonical and internal links use HTTPS exclusively.&lt;/li&gt;
&lt;li&gt;Mixed-content audit: no HTTP resources loaded on HTTPS pages.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  11.2 Certificate Maintenance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Auto-renewal via Let's Encrypt or hosting provider.&lt;/li&gt;
&lt;li&gt;Monitor expiration via UptimeRobot or similar.&lt;/li&gt;
&lt;li&gt;Verify certificate transparency log entries via &lt;code&gt;crt.sh&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-security.md&lt;/code&gt; for broader security posture.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. International / hreflang
&lt;/h2&gt;

&lt;p&gt;For sites targeting multiple languages or regions, hreflang annotations tell Google which version to show which user.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.1 hreflang Implementation
&lt;/h3&gt;

&lt;p&gt;Three valid placement methods, listed in order of preference:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;HTTP &lt;code&gt;Link&lt;/code&gt; header&lt;/strong&gt; — non-HTML resources, full programmatic control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;XML sitemap hreflang&lt;/strong&gt; — preferred for large sites; centralizes all annotations in one place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;&amp;lt;link rel="alternate"&amp;gt;&lt;/code&gt; tags in &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;&lt;/strong&gt; — most common; works but harder to maintain at scale.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"alternate"&lt;/span&gt; &lt;span class="na"&gt;hreflang=&lt;/span&gt;&lt;span class="s"&gt;"en-US"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/en-us/page/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"alternate"&lt;/span&gt; &lt;span class="na"&gt;hreflang=&lt;/span&gt;&lt;span class="s"&gt;"en-GB"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/en-gb/page/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"alternate"&lt;/span&gt; &lt;span class="na"&gt;hreflang=&lt;/span&gt;&lt;span class="s"&gt;"x-default"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://example.com/page/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  12.2 hreflang Rules
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Every page in a cluster must reference every other page in the cluster (return-link requirement).&lt;/li&gt;
&lt;li&gt;Every page must self-reference.&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;x-default&lt;/code&gt; for the fallback when no language matches.&lt;/li&gt;
&lt;li&gt;Use ISO 639-1 language + ISO 3166-1 region (&lt;code&gt;en-US&lt;/code&gt;, not &lt;code&gt;en_US&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-international.md&lt;/code&gt; for full hreflang depth.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Crawler Observability
&lt;/h2&gt;

&lt;p&gt;Knowing what crawlers actually do on a site, not what you think they do.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.1 Server Log Analysis
&lt;/h3&gt;

&lt;p&gt;The single best technical SEO data source. Server logs (nginx access logs, Apache access logs, Cloudflare logs) record every bot request with status, response time, and user agent.&lt;/p&gt;

&lt;p&gt;Tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Screaming Frog Log File Analyser&lt;/strong&gt; — desktop, parses nginx/Apache logs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GoAccess&lt;/strong&gt; — terminal log viewer with web reports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom log pipeline&lt;/strong&gt; — for clients with infrastructure depth, ship logs to BigQuery / DuckDB and query directly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What to look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crawl frequency per URL (which pages does Googlebot revisit most often?)&lt;/li&gt;
&lt;li&gt;Crawl-budget waste (low-value URLs with high crawl rate)&lt;/li&gt;
&lt;li&gt;4xx/5xx clusters (pages crawlers are repeatedly hitting that error)&lt;/li&gt;
&lt;li&gt;Slow URLs (high response time correlates with reduced crawl rate)&lt;/li&gt;
&lt;li&gt;Bot fingerprint verification (real Googlebot? or a UA-spoofing scraper?)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.2 Bot Verification
&lt;/h3&gt;

&lt;p&gt;Anyone can claim to be Googlebot. Verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reverse DNS lookup of the bot's IP must resolve to &lt;code&gt;googlebot.com&lt;/code&gt; or &lt;code&gt;google.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Forward DNS of that hostname must resolve back to the same IP&lt;/li&gt;
&lt;li&gt;Google publishes its IP ranges at &lt;code&gt;developers.google.com/search/apis/ipranges/googlebot.json&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For Bing: &lt;code&gt;bingbot.com&lt;/code&gt; reverse DNS. For Apple: &lt;code&gt;applebot.apple.com&lt;/code&gt;. AI crawlers vary; ClaudeBot publishes IP ranges, GPTBot publishes IP ranges, PerplexityBot publishes IP ranges.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.3 GSC URL Inspection
&lt;/h3&gt;

&lt;p&gt;For specific URLs, GSC's URL Inspection tool shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Last crawl date&lt;/li&gt;
&lt;li&gt;Last response code&lt;/li&gt;
&lt;li&gt;Indexed status&lt;/li&gt;
&lt;li&gt;Mobile usability&lt;/li&gt;
&lt;li&gt;Rendered HTML (live test)&lt;/li&gt;
&lt;li&gt;Discovered referring URLs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use this to debug specific indexing problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  14. Audit Mode
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TS1&lt;/td&gt;
&lt;td&gt;robots.txt returns 200 plain text, allows critical resources&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS2&lt;/td&gt;
&lt;td&gt;XML sitemap returns 200, validates, lists only canonical indexable URLs&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS3&lt;/td&gt;
&lt;td&gt;Sitemap submitted to Google Search Console and Bing Webmaster&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS4&lt;/td&gt;
&lt;td&gt;All canonical URLs return 200&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS5&lt;/td&gt;
&lt;td&gt;Self-referential rel=canonical on every indexable page&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS6&lt;/td&gt;
&lt;td&gt;HTTP-to-HTTPS 301 redirect, single hop&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS7&lt;/td&gt;
&lt;td&gt;www / non-www unified via 301, single hop&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS8&lt;/td&gt;
&lt;td&gt;Trailing slash policy enforced sitewide&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS9&lt;/td&gt;
&lt;td&gt;URLs lowercase, no mixed-case duplicates&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS10&lt;/td&gt;
&lt;td&gt;Zero redirect chains (every redirect single-hop)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS11&lt;/td&gt;
&lt;td&gt;No 4xx URLs in sitemap or internal links&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS12&lt;/td&gt;
&lt;td&gt;No 5xx URLs detected in last 30 days&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS13&lt;/td&gt;
&lt;td&gt;HSTS header present with min 1-year max-age&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS14&lt;/td&gt;
&lt;td&gt;TLS 1.2+ enforced, valid certificate, no mixed content&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS15&lt;/td&gt;
&lt;td&gt;Mobile rendering verified (Mobile-Friendly Test)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS16&lt;/td&gt;
&lt;td&gt;JS-rendered content visible to Googlebot via URL Inspection&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS17&lt;/td&gt;
&lt;td&gt;IndexNow key deployed (for Bing/Yandex/Naver indexing)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS18&lt;/td&gt;
&lt;td&gt;hreflang correctly implemented if multi-region&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS19&lt;/td&gt;
&lt;td&gt;Bot verification logic in place (no UA-spoofing scrapers treated as bots)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS20&lt;/td&gt;
&lt;td&gt;Server logs analyzed at least quarterly for crawl-budget waste&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS21&lt;/td&gt;
&lt;td&gt;Zero soft 404s in GSC&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS22&lt;/td&gt;
&lt;td&gt;Crawled — currently not indexed bucket under 10% of total&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS23&lt;/td&gt;
&lt;td&gt;Discovered — currently not indexed bucket under 5% of total&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS24&lt;/td&gt;
&lt;td&gt;URL parameter strategy documented (block / canonical / index per parameter)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS25&lt;/td&gt;
&lt;td&gt;Pagination strategy documented (rel=next/prev replaced or supplemented)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS26&lt;/td&gt;
&lt;td&gt;AI crawler policy in robots.txt explicit and documented&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS27&lt;/td&gt;
&lt;td&gt;Duplicate-content audit completed in last 90 days&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS28&lt;/td&gt;
&lt;td&gt;All 301 redirects retained from migrations (don't expire redirects)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS29&lt;/td&gt;
&lt;td&gt;Crawl depth report shows zero pages over depth 3 (small sites) or 5 (large)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS30&lt;/td&gt;
&lt;td&gt;URLs under 60 characters where possible&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS31&lt;/td&gt;
&lt;td&gt;Server response time under 600ms for HTML responses&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS32&lt;/td&gt;
&lt;td&gt;GSC Coverage report shows zero "server error" URLs&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS33&lt;/td&gt;
&lt;td&gt;GSC URL Inspection on 5 random pages confirms canonical, indexed status, no rendering issues&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS34&lt;/td&gt;
&lt;td&gt;Lighthouse SEO score 100 on representative sample of pages&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TS35&lt;/td&gt;
&lt;td&gt;No JavaScript-only navigation (every link reachable via crawl without rendering)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 35. World-class: 33+/35.&lt;/p&gt;




&lt;h2&gt;
  
  
  15. Common Mistakes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Blocking CSS/JS in robots.txt&lt;/strong&gt; — Google needs them to render. Frequently breaks indexing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canonical pointing to a redirect target&lt;/strong&gt; — invalidates the canonical signal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple canonical signals disagreeing&lt;/strong&gt; — internal links say A, sitemap says B, rel=canonical says C; Google picks one and ignores the others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trailing slash inconsistency&lt;/strong&gt; — half the site with &lt;code&gt;/&lt;/code&gt;, half without; treated as duplicate URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redirect chains&lt;/strong&gt; — A→B→C→D wastes crawl, leaks signals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;302s where 301 belongs&lt;/strong&gt; — temporary redirect on a permanent move; ranking signals leak.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Soft 404s&lt;/strong&gt; — page returns 200 but says "not found"; Google detects and demotes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indexable thin pages&lt;/strong&gt; — tag archives, paginated category pages, search result pages with no value indexed without filtering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JavaScript navigation only&lt;/strong&gt; — links rendered via JS; crawl depth report shows orphaned pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stale &lt;code&gt;&amp;lt;lastmod&amp;gt;&lt;/code&gt; in sitemap&lt;/strong&gt; — every URL claims today's date; Google starts ignoring lastmod entirely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTPS deployed but HTTP not redirected&lt;/strong&gt; — both versions serve, both indexed, duplicate-content penalty.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mixed content&lt;/strong&gt; — HTTPS page loads HTTP resources; browser blocks, layout breaks, ranking suffers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI crawler blocking by accident&lt;/strong&gt; — wildcard &lt;code&gt;Disallow: /&lt;/code&gt; block applied to legitimate AI crawlers losing citation traffic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No IndexNow&lt;/strong&gt; — Bing, Yandex, Naver indexing days late when push-based could do it in minutes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forgotten redirects after migration&lt;/strong&gt; — old redirects removed prematurely; old inbound links 404.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  16. Maintenance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Weekly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review GSC Coverage report for new errors&lt;/li&gt;
&lt;li&gt;Check Bing Webmaster for crawl issues&lt;/li&gt;
&lt;li&gt;Spot-check new URLs are indexable and in sitemap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Monthly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full GSC report review across all categories&lt;/li&gt;
&lt;li&gt;Sitemap regeneration verification&lt;/li&gt;
&lt;li&gt;Redirect map audit&lt;/li&gt;
&lt;li&gt;Server log spot-check for 4xx/5xx clusters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quarterly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive crawl audit (Screaming Frog or Sitebulb)&lt;/li&gt;
&lt;li&gt;Server log deep analysis&lt;/li&gt;
&lt;li&gt;Crawl-budget evaluation&lt;/li&gt;
&lt;li&gt;Canonical audit&lt;/li&gt;
&lt;li&gt;HTTPS / HSTS verification&lt;/li&gt;
&lt;li&gt;AI crawler policy review (new bots emerge frequently)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Annually:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full URL inventory and structural review&lt;/li&gt;
&lt;li&gt;Migration redirect retention verification&lt;/li&gt;
&lt;li&gt;Hreflang validation if international&lt;/li&gt;
&lt;li&gt;IndexNow key rotation if compromised&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  17. Companion Documents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;framework-pageexperience.md&lt;/code&gt; — Core Web Vitals, mobile, intrusive interstitials&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-schema.md&lt;/code&gt; — Structured data implementation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-internallinking.md&lt;/code&gt; — Hub-and-spoke architecture&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-migration.md&lt;/code&gt; — Site moves and URL restructures&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-security.md&lt;/code&gt; — Broader security posture&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-international.md&lt;/code&gt; — Full hreflang depth&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-aicitations.md&lt;/code&gt; — AI crawler policy and visibility&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-headless.md&lt;/code&gt; — Headless CMS rendering patterns&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Document version&lt;/strong&gt;: 1.0&lt;br&gt;
&lt;strong&gt;Last updated&lt;/strong&gt;: 2026-05-05&lt;br&gt;
&lt;strong&gt;Owner&lt;/strong&gt;: Joseph W. Anady — ThatDeveloperGuy — SDVOSB&lt;/p&gt;




&lt;h2&gt;
  
  
  About this framework library
&lt;/h2&gt;

&lt;p&gt;This article is the Dev.to republish of a framework reference document from ThatDevPro's SEO + AI engineering library. &lt;strong&gt;Canonical source: &lt;a href="https://www.thatdevpro.com/insights/framework-technicalseo/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-technicalseo/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio operating from Cassville, Missouri. The studio runs the full &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;14-tier Engine Optimization&lt;/a&gt; stack and ships open-source tooling for AI citation engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Companion 14-tier Engine Optimization stack&lt;/strong&gt; (each tier is its own article):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-1-foundation/" rel="noopener noreferrer"&gt;Tier 1 — Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-2-search-visibility/" rel="noopener noreferrer"&gt;Tier 2 — Search Visibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-3-ai-domination/" rel="noopener noreferrer"&gt;Tier 3 — AI Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-4-entity-and-authority/" rel="noopener noreferrer"&gt;Tier 4 — Entity and Authority&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-5-local-domination/" rel="noopener noreferrer"&gt;Tier 5 — Local Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-6-content-and-multimedia/" rel="noopener noreferrer"&gt;Tier 6 — Content and Multimedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-7-social-and-community/" rel="noopener noreferrer"&gt;Tier 7 — Social and Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-8-data-analytics-conversion/" rel="noopener noreferrer"&gt;Tier 8 — Data, Analytics, Conversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-9-monitoring-and-intelligence/" rel="noopener noreferrer"&gt;Tier 9 — Monitoring and Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-10-workflow-and-operations/" rel="noopener noreferrer"&gt;Tier 10 — Workflow and Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-11-marketplace-and-retail/" rel="noopener noreferrer"&gt;Tier 11 — Marketplace and Retail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-12-international/" rel="noopener noreferrer"&gt;Tier 12 — International&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-14-advanced-and-immersive/" rel="noopener noreferrer"&gt;Tier 14 — Advanced and Immersive&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Need this framework implemented on your site? &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;See the Engine Optimization service&lt;/a&gt; or hire through &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;ThatDevPro contact&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>googleseo</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Surviving Google's core algorithm updates</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 01:04:10 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/surviving-googles-core-algorithm-updates-db8</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/surviving-googles-core-algorithm-updates-db8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-coreupdates/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. &lt;a href="https://www.thatdevpro.com" rel="noopener noreferrer"&gt;ThatDevPro&lt;/a&gt; is an SDVOSB-certified veteran-owned web + AI engineering studio. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Google's Core Algorithm Updates — Detection, Response, Recovery, and Prevention&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive installation and audit reference for monitoring Google's core algorithm updates, classifying their impact on a website, executing the response protocol, tracking recovery, and building structural resilience to future updates. This document is dual-purpose: installation manual and audit document.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Document Purpose &amp;amp; How to Use This Document
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 What This Document Is
&lt;/h3&gt;

&lt;p&gt;This is the canonical reference for handling Google core algorithm updates — the periodic broad-spectrum changes Google makes to its ranking systems that can dramatically reshape search results across millions of sites simultaneously. Core updates are different from spam updates, helpful content updates (now part of core), product reviews updates, and minor tweaks. Core updates are the largest, most consequential, and most disruptive changes Google deploys.&lt;/p&gt;

&lt;p&gt;This document specifies how to detect when a core update is happening, how to assess its impact on a specific site, how to respond constructively (rather than panic-react), how to track recovery over the typical 60-90 day post-update period, and how to build a site that's structurally resilient to future updates.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Three Operating Modes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mode A — Install Mode&lt;/strong&gt;: Building monitoring and response infrastructure into ongoing site operations. Follow Sections 2 → 14.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode B — Audit Mode&lt;/strong&gt;: Evaluating an existing site's preparedness for or response to core updates. Skip to Section 11.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode C — Hybrid Mode&lt;/strong&gt;: Audit current state then install missing infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3 How Claude Code CLI Should Consume This Document
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read Section 2&lt;/strong&gt; — collect client variables and historical update impact data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read Section 3&lt;/strong&gt; — understand what core updates are and aren't&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install monitoring infrastructure&lt;/strong&gt; — Section 5&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Define response protocols&lt;/strong&gt; — Section 6&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build resilience patterns&lt;/strong&gt; — Section 7&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate&lt;/strong&gt; — Section 11&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate report&lt;/strong&gt; — Section 14&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1.4 Conflict Resolution Rules
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Conflict&lt;/th&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Existing post-update remediation in progress&lt;/td&gt;
&lt;td&gt;Don't reset. Document current state and continue tracking.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing recovery efforts that contradict this framework&lt;/td&gt;
&lt;td&gt;Follow the framework here, but document deviation reasons for client/team.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knee-jerk responses already deployed (mass content edits)&lt;/td&gt;
&lt;td&gt;Audit changes for unintended consequences. Document.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Disagreement on what an update targeted&lt;/td&gt;
&lt;td&gt;Document multiple hypotheses; track which holds up over recovery period.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1.5 Required Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console&lt;/strong&gt; — primary source for traffic and ranking data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Analytics 4&lt;/strong&gt; — for engagement data and traffic patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semrush Sensor / Mozcast / Advanced Web Ranking&lt;/strong&gt; — for SERP volatility tracking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ahrefs / Semrush&lt;/strong&gt; — for ranking history and competitor comparison&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wayback Machine&lt;/strong&gt; — for historical site state research&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Status Dashboard&lt;/strong&gt; — &lt;code&gt;status.search.google.com/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Algoroo / SEMrush Sensor / RankRanger&lt;/strong&gt; — for daily SERP volatility tracking&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Client Variables Intake
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================&lt;/span&gt;
&lt;span class="c1"&gt;# CORE UPDATES FRAMEWORK CLIENT VARIABLES&lt;/span&gt;
&lt;span class="c1"&gt;# ============================================&lt;/span&gt;

&lt;span class="c1"&gt;# --- Business Identity (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;business_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;primary_domain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_industry&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;ymyl_classification&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;              &lt;span class="c1"&gt;# "full", "partial", "lite", "non" (affects update sensitivity)&lt;/span&gt;

&lt;span class="c1"&gt;# --- Site History (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;domain_age_years&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;historical_traffic_baseline&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;       &lt;span class="c1"&gt;# Pre-most-recent-update average daily organic traffic&lt;/span&gt;
&lt;span class="na"&gt;historical_keyword_count&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;          &lt;span class="c1"&gt;# Number of keywords ranking in top 10&lt;/span&gt;
&lt;span class="na"&gt;last_known_volatility_event&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;      &lt;span class="c1"&gt;# Date of last identified algorithm impact&lt;/span&gt;

&lt;span class="c1"&gt;# --- Past Core Update Impacts (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;past_update_impacts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;update_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                  &lt;span class="c1"&gt;# e.g., "March 2026 Core Update"&lt;/span&gt;
    &lt;span class="na"&gt;update_date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                  &lt;span class="c1"&gt;# YYYY-MM-DD&lt;/span&gt;
    &lt;span class="na"&gt;direction&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                    &lt;span class="c1"&gt;# "loss", "gain", "neutral", "mixed"&lt;/span&gt;
    &lt;span class="na"&gt;magnitude_percent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;             &lt;span class="c1"&gt;# Percent change in organic traffic&lt;/span&gt;
    &lt;span class="na"&gt;pages_most_affected&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;          &lt;span class="c1"&gt;# URLs with biggest changes&lt;/span&gt;
    &lt;span class="na"&gt;hypothesis_about_target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;      &lt;span class="c1"&gt;# What this site/team believes the update targeted&lt;/span&gt;
    &lt;span class="na"&gt;remediation_actions_taken&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
    &lt;span class="na"&gt;recovery_status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;              &lt;span class="c1"&gt;# "full", "partial", "none", "still_in_progress"&lt;/span&gt;
    &lt;span class="na"&gt;recovery_completion_date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# --- Monitoring Infrastructure Status (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_gsc_property_verified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_ga4_configured&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_serp_volatility_monitoring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_ranking_tracker&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;           &lt;span class="c1"&gt;# Ahrefs, Semrush, AWR, etc.&lt;/span&gt;
&lt;span class="na"&gt;has_brand_alert_monitoring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;    &lt;span class="c1"&gt;# Google Alerts, Mention, Brand24&lt;/span&gt;
&lt;span class="na"&gt;has_competitor_tracking&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Response Capability (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_documented_response_protocol&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;response_team_identified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;response_team_members&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;emergency_communication_channel&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# How team alerts each other to volatility&lt;/span&gt;

&lt;span class="c1"&gt;# --- Site Resilience Posture (RECOMMENDED) ---&lt;/span&gt;
&lt;span class="na"&gt;eeat_score&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;                        &lt;span class="c1"&gt;# From framework-eeat.md audit&lt;/span&gt;
&lt;span class="na"&gt;hcs_score&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;                         &lt;span class="c1"&gt;# From framework-hcs.md audit&lt;/span&gt;
&lt;span class="na"&gt;ymyl_score&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;                        &lt;span class="c1"&gt;# From framework-ymyl.md audit if applicable&lt;/span&gt;
&lt;span class="na"&gt;sqrg_estimated_rating&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;            &lt;span class="c1"&gt;# From framework-sqrg.md&lt;/span&gt;
&lt;span class="na"&gt;content_quality_distribution&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;        &lt;span class="c1"&gt;# From HCS audit&lt;/span&gt;
  &lt;span class="na"&gt;highest_or_high&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;                 &lt;span class="c1"&gt;# Percentage&lt;/span&gt;
  &lt;span class="na"&gt;medium&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;                          &lt;span class="c1"&gt;# Percentage&lt;/span&gt;
  &lt;span class="na"&gt;low_or_lowest&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;                   &lt;span class="c1"&gt;# Percentage&lt;/span&gt;

&lt;span class="c1"&gt;# --- Documentation (RECOMMENDED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_algorithm_update_log&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;      &lt;span class="c1"&gt;# Internal log tracking all updates and impacts&lt;/span&gt;
&lt;span class="na"&gt;has_post_update_review_process&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_quarterly_resilience_audit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Recent Update Status (FILLED DURING ACTIVE UPDATE) ---&lt;/span&gt;
&lt;span class="na"&gt;current_update_active&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;current_update_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;current_update_started&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;           &lt;span class="c1"&gt;# Detection date&lt;/span&gt;
&lt;span class="na"&gt;current_update_status&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;            &lt;span class="c1"&gt;# "rumored", "rolling_out", "completed", "in_recovery"&lt;/span&gt;
&lt;span class="na"&gt;current_update_traffic_change&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;     &lt;span class="c1"&gt;# Percentage&lt;/span&gt;
&lt;span class="na"&gt;current_update_response_phase&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;    &lt;span class="c1"&gt;# "detect", "assess", "diagnose", "remediate", "recover", "review"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. What Core Updates Are
&lt;/h2&gt;

&lt;p&gt;Google deploys algorithm changes constantly — hundreds of small updates per year. Most are imperceptible to individual sites. Three categories of updates have outsized impact and are publicly named by Google:&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 Core Updates
&lt;/h3&gt;

&lt;p&gt;Core updates are broad changes to how Google's core ranking algorithms evaluate content. They typically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Roll out over 1-3 weeks (some longer)&lt;/li&gt;
&lt;li&gt;Affect rankings across all niches simultaneously&lt;/li&gt;
&lt;li&gt;Are publicly announced by Google before, during, and after&lt;/li&gt;
&lt;li&gt;Get named after the month and year (e.g., "March 2026 Core Update")&lt;/li&gt;
&lt;li&gt;Cause significant SERP volatility during rollout&lt;/li&gt;
&lt;li&gt;Reshape rankings substantially — some sites gain, some lose, most see some change&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Google deploys 3-6 named core updates per year. Recent core updates and their characteristic focus:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;March 2024 Core Update&lt;/strong&gt; — Integrated the Helpful Content System into core ranking; expanded site reputation abuse guidance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;August 2024 Core Update&lt;/strong&gt; — Refined HCS signal weighting; addressed feedback about small site recovery from prior core updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;November 2024 Core Update&lt;/strong&gt; — Significant rollout addressing site quality holistically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;December 2024 Core Update&lt;/strong&gt; — Targeted AI mass-production patterns specifically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;March 2025 Core Update&lt;/strong&gt; — Significant E-E-A-T re-weighting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;June 2025 Core Update&lt;/strong&gt; — Refinements to AI Overview source selection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;November 2025 Core Update&lt;/strong&gt; — Reputation and content originality emphasis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;March 2026 Core Update&lt;/strong&gt; — Most recent major update at time of this framework's creation; focused on entity-based ranking and AI citation worthiness&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.2 What Core Updates Are Not
&lt;/h3&gt;

&lt;p&gt;Core updates are not:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spam updates&lt;/strong&gt; — These target manipulative practices specifically (link schemes, doorway pages, scraped content). Spam updates are separate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reviews updates&lt;/strong&gt; — Targeted at product/service review content quality. Now folded into core updates as of late 2023.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Helpful Content updates&lt;/strong&gt; — Now part of core ranking system as of March 2024.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual actions&lt;/strong&gt; — Penalties applied by human reviewers, communicated via Search Console. Different mechanism entirely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indexing changes&lt;/strong&gt; — When pages drop out of the index entirely, that's typically a different issue (technical, manual action, or sitewide spam).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SERP feature changes&lt;/strong&gt; — When the SERP itself changes layout (more AI Overviews, more videos, etc.), that's separate from core updates though often coincident.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.3 What Core Updates Reward and Punish
&lt;/h3&gt;

&lt;p&gt;Google's official guidance: "There's nothing wrong with pages that drop after a core update. They haven't violated our spam policies nor are subject to a manual or algorithmic action, as can happen to pages that do violate those policies. In fact, there are no specific actions to take to recover from a core update. Negative rankings are not a signal that you have done anything wrong."&lt;/p&gt;

&lt;p&gt;In practice, core updates appear to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reward&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong E-E-A-T signals (see &lt;code&gt;framework-eeat.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Helpful Content System compliance (see &lt;code&gt;framework-hcs.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Entity-based authority (see &lt;code&gt;framework-knowledgegraph.md&lt;/code&gt; and &lt;code&gt;framework-entitysalience.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Genuine first-hand experience and original content&lt;/li&gt;
&lt;li&gt;Demonstrated topical authority through depth&lt;/li&gt;
&lt;li&gt;Sites with strong reputation research signals (see &lt;code&gt;framework-sqrg.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Sites with high information gain (see &lt;code&gt;framework-infogain.md&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;For YMYL: credentialed authorship and rigorous editorial process&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Punish&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Thin or low-value content&lt;/li&gt;
&lt;li&gt;Aggregated content that doesn't add original insight&lt;/li&gt;
&lt;li&gt;Mass-produced AI content without expert review&lt;/li&gt;
&lt;li&gt;Sites with reputation issues&lt;/li&gt;
&lt;li&gt;YMYL content from non-credentialed sources&lt;/li&gt;
&lt;li&gt;Sites violating spam policies (though spam violations typically trigger spam updates)&lt;/li&gt;
&lt;li&gt;Sites with significant Helpful Content System failures&lt;/li&gt;
&lt;li&gt;Sites that game freshness signals without substantive updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3.4 The Recovery Truth
&lt;/h3&gt;

&lt;p&gt;Recovery from a core update is possible but not guaranteed. Google's guidance: "Improvements in your content might result in better rankings — though changes might not be reflected until the next core update."&lt;/p&gt;

&lt;p&gt;Core updates are evaluative re-baselines. Once Google's evaluation of a site changes negatively, recovery typically requires:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The site genuinely improving (content quality, E-E-A-T, etc.)&lt;/li&gt;
&lt;li&gt;Time for Google to recognize the improvement&lt;/li&gt;
&lt;li&gt;The next core update incorporating the new evaluation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sites typically don't "recover" between core updates. They might see modest fluctuation but the major re-baseline happens at the next core update. This means recovery cycles are typically 90+ days minimum, often 6-12 months.&lt;/p&gt;

&lt;p&gt;Some sites never recover. If the core update detected fundamental issues with the site's purpose, content strategy, or trust posture, those issues need fundamental remediation. Cosmetic changes don't trigger recovery.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Update Detection Protocol
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Signals That an Update Is Happening
&lt;/h3&gt;

&lt;p&gt;Detect updates through multiple signal sources:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.1.1 Official Google announcements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google typically announces core updates via:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;@SearchLiaison&lt;/code&gt; on X — primary public communication channel&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;developers.google.com/search/blog&lt;/code&gt; — official blog posts&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;status.search.google.com&lt;/code&gt; — Search Status Dashboard&lt;/li&gt;
&lt;li&gt;Reddit &lt;code&gt;r/google_seo&lt;/code&gt; and &lt;code&gt;r/seo&lt;/code&gt; — community confirmation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Set up alerts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Monitor SearchLiaison via RSS or alternative&lt;/span&gt;
&lt;span class="c"&gt;# Monitor Google Search Blog RSS:&lt;/span&gt;
&lt;span class="c"&gt;# https://developers.google.com/search/blog/feed.xml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4.1.2 SERP volatility tools&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Daily volatility tracking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Semrush Sensor&lt;/strong&gt; — &lt;code&gt;semrush.com/sensor/&lt;/code&gt; — daily volatility per category&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mozcast&lt;/strong&gt; — &lt;code&gt;moz.com/mozcast/&lt;/code&gt; — Moz's tracker&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Web Ranking SERP Volatility&lt;/strong&gt; — daily&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Algoroo&lt;/strong&gt; — &lt;code&gt;algoroo.com&lt;/code&gt; — ranking volatility tracker&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CognitiveSEO Signals&lt;/strong&gt; — independent volatility tracker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When volatility spikes 7+ across multiple trackers, an update is likely active.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.1.3 Site-specific signals&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For each monitored site, set up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GSC daily traffic alerts&lt;/strong&gt; — flag any day with &amp;gt;15% traffic deviation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ranking tracker alerts&lt;/strong&gt; — flag tracked keywords with &amp;gt;5 position drops&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server log monitoring&lt;/strong&gt; — sudden Googlebot crawl pattern changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brand mention alerts&lt;/strong&gt; — sudden coverage in SEO publications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4.1.4 Industry signal aggregation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Monitor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Search Engine Land&lt;/strong&gt; — official update coverage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search Engine Roundtable&lt;/strong&gt; — Barry Schwartz's daily volatility coverage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search Engine Journal&lt;/strong&gt; — algorithm coverage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;r/SEO&lt;/strong&gt; — community-level confirmation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.2 Detection Workflow
&lt;/h3&gt;

&lt;p&gt;When potential update is detected:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Confirm via multiple sources&lt;/strong&gt; — Don't react to single-source rumors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document detection time&lt;/strong&gt; — Note the moment volatility appeared&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Note Google's communication status&lt;/strong&gt; — Has Google confirmed officially?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open algorithm update incident log entry&lt;/strong&gt; — Begin tracking impact&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Algorithm update incident log template at &lt;code&gt;/admin/algorithm-incidents/{{date}}-{{update-name}}.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Update Incident: {{UPDATE_NAME}}&lt;/span&gt;

&lt;span class="gu"&gt;## Detection&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Detected: {{DATETIME}}
&lt;span class="p"&gt;-&lt;/span&gt; Detection sources: {{LIST}}
&lt;span class="p"&gt;-&lt;/span&gt; Google confirmation: {{YES/NO/PENDING}}
&lt;span class="p"&gt;-&lt;/span&gt; Confirmation date: {{DATE_IF_CONFIRMED}}

&lt;span class="gu"&gt;## Volatility Indicators&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Semrush Sensor: {{SCORE}}/10
&lt;span class="p"&gt;-&lt;/span&gt; Mozcast: {{SCORE}}
&lt;span class="p"&gt;-&lt;/span&gt; Other trackers: {{SCORES}}
&lt;span class="p"&gt;-&lt;/span&gt; Industry sources reporting: {{LIST}}

&lt;span class="gu"&gt;## Initial Impact Assessment (24 hours post-detection)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Traffic delta vs 7-day average: {{PERCENTAGE}}
&lt;span class="p"&gt;-&lt;/span&gt; Top affected pages: {{LIST}}
&lt;span class="p"&gt;-&lt;/span&gt; Top affected keywords: {{LIST}}

&lt;span class="gu"&gt;## Working Hypothesis&lt;/span&gt;
{{WHAT_WE_THINK_THIS_UPDATE_TARGETS}}

&lt;span class="gu"&gt;## Status&lt;/span&gt;
{{DETECTING / ASSESSING / DIAGNOSING / REMEDIATING / RECOVERING / REVIEWED}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.3 The 72-Hour Hold
&lt;/h3&gt;

&lt;p&gt;Critical rule: &lt;strong&gt;do not take significant remediation action within 72 hours of detection&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Reasons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The update is probably still rolling out — early data is incomplete&lt;/li&gt;
&lt;li&gt;SERP volatility within an update is normal and self-corrects&lt;/li&gt;
&lt;li&gt;Knee-jerk responses cause damage that's hard to reverse&lt;/li&gt;
&lt;li&gt;The update may not target what you think it targets&lt;/li&gt;
&lt;li&gt;Three days of data lets you distinguish signal from noise&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;During the 72-hour hold:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Document what's happening&lt;/li&gt;
&lt;li&gt;Monitor (don't react)&lt;/li&gt;
&lt;li&gt;Read Google's official communications&lt;/li&gt;
&lt;li&gt;Read industry analysis&lt;/li&gt;
&lt;li&gt;Survey community discussions&lt;/li&gt;
&lt;li&gt;Resist client/stakeholder pressure to "do something now"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After 72 hours, you have enough data to begin assessment.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Update Impact Assessment
&lt;/h2&gt;

&lt;h3&gt;
  
  
  5.1 Quantitative Impact Analysis
&lt;/h3&gt;

&lt;p&gt;After 72 hours, gather data:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.1.1 Site-wide traffic delta&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Compare: 7-day average post-detection vs 7-day average pre-detection
Compare: Same period year-over-year (control for seasonality)
Compare: Specific weekday-to-weekday (Monday vs Monday)

Calculate:
- Total organic traffic change (%)
- Total organic clicks change (GSC)
- Total impressions change (GSC) — distinguishes ranking from CTR issues
- Average position change (GSC)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5.1.2 Per-page impact&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In GSC Performance report:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Filter date range: 7 days post-update vs 7 days pre-update&lt;/li&gt;
&lt;li&gt;Sort by traffic change descending and ascending&lt;/li&gt;
&lt;li&gt;Identify pages with &amp;gt;25% traffic change in either direction&lt;/li&gt;
&lt;li&gt;Document URL, change percentage, page type, primary topic&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Build a per-page impact spreadsheet:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;url,page_type,primary_topic,traffic_pre,traffic_post,traffic_delta_pct,impressions_pre,impressions_post,impressions_delta_pct,position_pre,position_post,position_delta,ymyl_status,word_count,content_age_days,last_refresh_days_ago,has_credentialed_author,notes
/articles/medication-guide,article,health/medication,1247,621,-50.2,4500,3200,-28.9,3.2,4.8,-1.6,full_ymyl,2400,367,367,no,major_loss_no_credentialed_review
/articles/site-speed-guide,article,seo/technical,892,1108,+24.2,3200,3850,+20.3,4.1,3.6,+0.5,non,1850,121,32,yes,small_gain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5.1.3 Per-query impact&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In GSC Performance:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pivot by query&lt;/li&gt;
&lt;li&gt;Identify queries with significant change&lt;/li&gt;
&lt;li&gt;Determine if changes cluster around specific topics or page types&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;5.1.4 Per-content-type impact&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Group affected pages by type:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Blog articles&lt;/li&gt;
&lt;li&gt;Service pages&lt;/li&gt;
&lt;li&gt;Product pages&lt;/li&gt;
&lt;li&gt;Local landing pages&lt;/li&gt;
&lt;li&gt;Author/author pages&lt;/li&gt;
&lt;li&gt;Resource/tool pages&lt;/li&gt;
&lt;li&gt;Category/hub pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Compare change distribution across types. If one type is dramatically worse hit, the update likely targeted something specific to that type.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Pattern Recognition
&lt;/h3&gt;

&lt;p&gt;Look for patterns among losing pages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common topic clusters?&lt;/li&gt;
&lt;li&gt;Common content type?&lt;/li&gt;
&lt;li&gt;Common publication age?&lt;/li&gt;
&lt;li&gt;Common author?&lt;/li&gt;
&lt;li&gt;AI vs human-written?&lt;/li&gt;
&lt;li&gt;Original vs aggregated content?&lt;/li&gt;
&lt;li&gt;Length patterns?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quality patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common E-E-A-T weaknesses?&lt;/li&gt;
&lt;li&gt;Common HCS failures?&lt;/li&gt;
&lt;li&gt;Common YMYL gaps?&lt;/li&gt;
&lt;li&gt;Thin content patterns?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technical patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Common URL structures?&lt;/li&gt;
&lt;li&gt;Common templates?&lt;/li&gt;
&lt;li&gt;Common rendering issues?&lt;/li&gt;
&lt;li&gt;Common Core Web Vitals issues?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Reputation patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Topics where the site has weak authority?&lt;/li&gt;
&lt;li&gt;Topics where competitors have stronger E-E-A-T?&lt;/li&gt;
&lt;li&gt;Niches where the site doesn't fit the established expert pattern?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Document patterns in the incident log.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 Hypothesis Formation
&lt;/h3&gt;

&lt;p&gt;After pattern analysis, form 2-3 hypotheses about what the update targeted:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example hypotheses&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;H1&lt;/strong&gt;: "Update targeted AI-generated YMYL content without expert review. Pages lost: 80% are AI-assisted YMYL articles. Pages held: 90% have credentialed reviewers."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;H2&lt;/strong&gt;: "Update reweighted entity-based authority. Pages lost: those on topics where the site lacks topical authority. Pages held: those in our 3 primary topical pillars."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;H3&lt;/strong&gt;: "Update penalized aggregator pages. Pages lost: 'best of' lists with no original testing. Pages held: original testing/research pages."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Test each hypothesis against the data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the pattern hold across the affected page set?&lt;/li&gt;
&lt;li&gt;Are there counter-examples?&lt;/li&gt;
&lt;li&gt;Does the hypothesis explain the magnitude of loss?&lt;/li&gt;
&lt;li&gt;Is the hypothesis consistent with Google's official communications?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hypothesis that explains the most data is most likely correct. If multiple hypotheses fit, multiple changes may have happened.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 External Hypothesis Validation
&lt;/h3&gt;

&lt;p&gt;Compare to industry analysis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What's the consensus from Search Engine Land, Search Engine Journal, Barry Schwartz's coverage?&lt;/li&gt;
&lt;li&gt;What patterns are other practitioners reporting?&lt;/li&gt;
&lt;li&gt;Has Google given any specific guidance about this update?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If external analysis matches your internal pattern, confidence is high. If it doesn't match, either your situation is unusual (worth investigating why) or your hypothesis is wrong.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Response Protocol
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Response Phase Decision Matrix
&lt;/h3&gt;

&lt;p&gt;Based on impact assessment, choose response track:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Minimal impact (&amp;lt;10% traffic change)&lt;/strong&gt;: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Document the update&lt;/li&gt;
&lt;li&gt;Monitor for 30 days&lt;/li&gt;
&lt;li&gt;No remediation action&lt;/li&gt;
&lt;li&gt;Review at quarterly resilience audit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Moderate loss (10-30% traffic change)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Document patterns identified&lt;/li&gt;
&lt;li&gt;Initiate targeted remediation on identified weaknesses&lt;/li&gt;
&lt;li&gt;60-90 day recovery monitoring&lt;/li&gt;
&lt;li&gt;Full audit using applicable frameworks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Significant loss (30-50%)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive audit using all foundational frameworks&lt;/li&gt;
&lt;li&gt;Aggressive remediation&lt;/li&gt;
&lt;li&gt;6-12 month recovery expectation&lt;/li&gt;
&lt;li&gt;Strategic review of content portfolio&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Catastrophic loss (&amp;gt;50%)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full strategic reset&lt;/li&gt;
&lt;li&gt;Remove or significantly remediate large content sections&lt;/li&gt;
&lt;li&gt;Likely 12+ month recovery if at all&lt;/li&gt;
&lt;li&gt;Consider whether site model is viable&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.2 What Not to Do (Immediate)
&lt;/h3&gt;

&lt;p&gt;Within first 30 days post-update, avoid:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mass deletion of content&lt;/strong&gt; — without rigorous analysis, you may delete the wrong content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mass canonicalization changes&lt;/strong&gt; — can compound the problem&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mass redirect operations&lt;/strong&gt; — if rankings recover, redirects work against you&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Major site architecture changes&lt;/strong&gt; — distracts from the actual issue&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Removing internal links&lt;/strong&gt; — if you misdiagnose, you've lost link equity unnecessarily&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Changing CMS or stack&lt;/strong&gt; — adds variables that obscure what's working&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buying/exchanging links&lt;/strong&gt; — never appropriate, especially during an update&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mass content rewriting&lt;/strong&gt; — rewriting hundreds of articles in panic mode produces lower-quality content&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.3 Constructive Response Actions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;6.3.1 If E-E-A-T issues identified&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apply &lt;code&gt;framework-eeat.md&lt;/code&gt; remediation per pillar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strengthen author credentials and bio pages&lt;/li&gt;
&lt;li&gt;Add reviewer credit to YMYL content&lt;/li&gt;
&lt;li&gt;Improve schema graph for entity recognition&lt;/li&gt;
&lt;li&gt;Build reputation infrastructure&lt;/li&gt;
&lt;li&gt;Add citation lists to factual content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6.3.2 If HCS issues identified&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apply &lt;code&gt;framework-hcs.md&lt;/code&gt; remediation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify and remove/consolidate thin content&lt;/li&gt;
&lt;li&gt;Refocus on topical pillars&lt;/li&gt;
&lt;li&gt;Improve About page substantively&lt;/li&gt;
&lt;li&gt;Add original value markers per article&lt;/li&gt;
&lt;li&gt;Disclose AI use properly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6.3.3 If YMYL issues identified&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apply &lt;code&gt;framework-ymyl.md&lt;/code&gt; remediation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add credentialed reviewers&lt;/li&gt;
&lt;li&gt;Add primary literature citations&lt;/li&gt;
&lt;li&gt;Build out editorial and corrections policies&lt;/li&gt;
&lt;li&gt;Add topic-specific disclaimers per article&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6.3.4 If entity issues identified&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apply &lt;code&gt;framework-entitysalience.md&lt;/code&gt; and &lt;code&gt;framework-knowledgegraph.md&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reinforce primary entity per page&lt;/li&gt;
&lt;li&gt;Build entity sameAs graph&lt;/li&gt;
&lt;li&gt;Pursue Wikidata entry&lt;/li&gt;
&lt;li&gt;Strengthen topical hub pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6.3.5 If technical issues identified&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apply Tier 1 of the 14-tier framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fix Core Web Vitals issues&lt;/li&gt;
&lt;li&gt;Resolve crawl errors&lt;/li&gt;
&lt;li&gt;Improve mobile experience&lt;/li&gt;
&lt;li&gt;Address indexing problems&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.4 Remediation Documentation
&lt;/h3&gt;

&lt;p&gt;Track every remediation action in the incident log:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Remediation Actions Taken&lt;/span&gt;

&lt;span class="gu"&gt;### Week 1 ({{DATE_RANGE}})&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; {{DATE}}: {{ACTION}} — {{PAGES_AFFECTED}} — {{REASONING}}
&lt;span class="p"&gt;-&lt;/span&gt; {{DATE}}: {{ACTION}} — {{PAGES_AFFECTED}} — {{REASONING}}

&lt;span class="gu"&gt;### Week 2 ({{DATE_RANGE}})&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; {{DATE}}: {{ACTION}} — {{PAGES_AFFECTED}} — {{REASONING}}

&lt;span class="gu"&gt;### Week 3+ ({{DATE_RANGE}})&lt;/span&gt;
{{...}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This documentation is essential for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understanding what helped (correlation with recovery)&lt;/li&gt;
&lt;li&gt;Avoiding repeated mistakes&lt;/li&gt;
&lt;li&gt;Learning across multiple updates over time&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.5 Communication With Stakeholders
&lt;/h3&gt;

&lt;p&gt;During an update, communicate clearly with clients/management:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Initial communication (within 48 hours of detection)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Google deployed a core update. Industry-wide volatility is significant."&lt;/li&gt;
&lt;li&gt;"Our site is showing {{IMPACT_DESCRIPTION}}."&lt;/li&gt;
&lt;li&gt;"We're in the data-gathering phase. Substantive remediation begins in 72-96 hours."&lt;/li&gt;
&lt;li&gt;"Recovery expectation: {{TIMEFRAME_BASED_ON_IMPACT_LEVEL}}."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Weekly during active update&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Status of impact (improving/stable/worsening)&lt;/li&gt;
&lt;li&gt;Hypothesis about update targets&lt;/li&gt;
&lt;li&gt;Remediation actions in progress&lt;/li&gt;
&lt;li&gt;What we're not doing and why&lt;/li&gt;
&lt;li&gt;Expected next milestone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Post-stabilization (4-6 weeks post-update)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Final impact assessment&lt;/li&gt;
&lt;li&gt;Comprehensive remediation plan&lt;/li&gt;
&lt;li&gt;Recovery monitoring schedule&lt;/li&gt;
&lt;li&gt;Strategic recommendations&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Recovery Tracking
&lt;/h2&gt;

&lt;h3&gt;
  
  
  7.1 Recovery Indicators
&lt;/h3&gt;

&lt;p&gt;Monitor weekly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovery signal indicators&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Traffic trending upward week-over-week&lt;/li&gt;
&lt;li&gt;Lost keywords regaining position&lt;/li&gt;
&lt;li&gt;Affected pages crawled more frequently&lt;/li&gt;
&lt;li&gt;New impressions in GSC for previously suppressed queries&lt;/li&gt;
&lt;li&gt;Indexed page count returning to baseline&lt;/li&gt;
&lt;li&gt;Engagement metrics improving on remediated content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Continued suppression indicators&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Traffic remains flat at reduced level&lt;/li&gt;
&lt;li&gt;Keywords don't recover position&lt;/li&gt;
&lt;li&gt;Crawl frequency doesn't return to baseline&lt;/li&gt;
&lt;li&gt;New content also struggles to rank&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7.2 Recovery Timeline Expectations
&lt;/h3&gt;

&lt;p&gt;Based on impact severity:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Impact Level&lt;/th&gt;
&lt;th&gt;Initial Recovery Signals&lt;/th&gt;
&lt;th&gt;Substantial Recovery&lt;/th&gt;
&lt;th&gt;Full Recovery&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Minor loss&lt;/td&gt;
&lt;td&gt;2-4 weeks&lt;/td&gt;
&lt;td&gt;1-2 months&lt;/td&gt;
&lt;td&gt;Often by next core update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Moderate loss&lt;/td&gt;
&lt;td&gt;4-8 weeks&lt;/td&gt;
&lt;td&gt;3-6 months&lt;/td&gt;
&lt;td&gt;6-12 months, often at next core update&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Significant loss&lt;/td&gt;
&lt;td&gt;2-3 months&lt;/td&gt;
&lt;td&gt;6-12 months&lt;/td&gt;
&lt;td&gt;12-24 months, may require multiple core updates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Catastrophic loss&lt;/td&gt;
&lt;td&gt;3-6 months for any signal&lt;/td&gt;
&lt;td&gt;12+ months&lt;/td&gt;
&lt;td&gt;May not fully recover; strategic reset may be needed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Recovery is not linear. Expect ups and downs week-to-week. The trend over 30-60 day windows is what matters.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.3 Cross-Update Recovery Patterns
&lt;/h3&gt;

&lt;p&gt;Review historical update impact data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did this site recover from previous updates? On what timeline?&lt;/li&gt;
&lt;li&gt;Were recovery efforts effective?&lt;/li&gt;
&lt;li&gt;What patterns of remediation correlate with recovery?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Build institutional memory of what works for this specific site.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.4 When Recovery Doesn't Happen
&lt;/h3&gt;

&lt;p&gt;If 6-12 months post-update show no recovery signals:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reassess hypothesis&lt;/strong&gt; — was the diagnosis correct?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit remediation execution&lt;/strong&gt; — did we actually do what we documented?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare to recovered competitors&lt;/strong&gt; — what did they do differently?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consider strategic reset&lt;/strong&gt; — is the site model fundamentally compromised?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Strategic resets may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Migrating to a new domain&lt;/li&gt;
&lt;li&gt;Spinning off categories into separate sites&lt;/li&gt;
&lt;li&gt;Drastically reducing content footprint&lt;/li&gt;
&lt;li&gt;Rebuilding from a different angle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are major decisions made over months of consideration, not immediate post-update reactions.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Building Resilience to Future Updates
&lt;/h2&gt;

&lt;p&gt;The best response to a core update is having built a site that wasn't going to be hit by it in the first place. Resilient sites share characteristics.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.1 Foundational Resilience
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;E-E-A-T strong by default&lt;/strong&gt; — Sites that score 110+/130 on E-E-A-T audit before an update are resilient by default. Apply &lt;code&gt;framework-eeat.md&lt;/code&gt; continuously, not reactively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HCS-aligned content strategy&lt;/strong&gt; — Sites that publish for users, not for search, weather updates better. Apply &lt;code&gt;framework-hcs.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;YMYL standards maintained&lt;/strong&gt; — YMYL content meeting elevated standards rarely loses in updates. Apply &lt;code&gt;framework-ymyl.md&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entity authority&lt;/strong&gt; — Sites with strong entity recognition through Wikidata, Wikipedia, schema graph, and topical authority weather updates better. Apply &lt;code&gt;framework-knowledgegraph.md&lt;/code&gt; and &lt;code&gt;framework-entitysalience.md&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.2 Content Portfolio Resilience
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Topical focus&lt;/strong&gt; — Sites covering 3-7 topics deeply outperform sites covering 30 topics shallowly. Don't dilute.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality over quantity&lt;/strong&gt; — Better to have 100 high-quality articles than 1000 mediocre ones. The mediocre ones drag the whole site down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Genuine first-hand expertise&lt;/strong&gt; — Content built on actual experience holds value through algorithm changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Original research and insight&lt;/strong&gt; — Information Gain (see &lt;code&gt;framework-infogain.md&lt;/code&gt;) is durable across updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Refresh discipline&lt;/strong&gt; — Time-sensitive content kept current; outdated content retired.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.3 Trust Infrastructure Resilience
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Reputation infrastructure&lt;/strong&gt; — Strong reviews, earned media, industry recognition compound over time and protect against reputation-targeting updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Author identity stability&lt;/strong&gt; — Real, credentialed, persistent authors. Not turnover-heavy author rosters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical foundations solid&lt;/strong&gt; — Fast, secure, accessible, well-structured sites are easier for Google to evaluate accurately.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.4 Operational Resilience
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Algorithm update log maintained&lt;/strong&gt; — Every update tracked. Learning compounds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quarterly resilience audits&lt;/strong&gt; — Catch drift before it costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Foundational framework compliance&lt;/strong&gt; — These frameworks are not one-time installs. Maintain compliance continuously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't over-optimize&lt;/strong&gt; — Aggressive optimization creates fragility. Sites that try to game algorithms get hit by algorithm changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.5 Resilience Audit
&lt;/h3&gt;

&lt;p&gt;Quarterly, score the site against:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;R1&lt;/td&gt;
&lt;td&gt;E-E-A-T audit current and 100+/130&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R2&lt;/td&gt;
&lt;td&gt;HCS audit current and 45+/54&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R3&lt;/td&gt;
&lt;td&gt;YMYL audit (if applicable) current and 40+/48&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R4&lt;/td&gt;
&lt;td&gt;SQRG self-rating "High" or "Highest" on top pages&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R5&lt;/td&gt;
&lt;td&gt;Knowledge Graph entity established&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R6&lt;/td&gt;
&lt;td&gt;Entity Salience strong on primary topics&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R7&lt;/td&gt;
&lt;td&gt;Information Gain demonstrable per article&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R8&lt;/td&gt;
&lt;td&gt;AI Citation indicators positive (see framework-aicitations.md)&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R9&lt;/td&gt;
&lt;td&gt;Topical focus maintained (3-7 pillars)&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R10&lt;/td&gt;
&lt;td&gt;Content portfolio: 80%+ pages would rate Medium or higher&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R11&lt;/td&gt;
&lt;td&gt;Reputation research returns positive results&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R12&lt;/td&gt;
&lt;td&gt;Trust infrastructure complete (policies, security, schema)&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R13&lt;/td&gt;
&lt;td&gt;Refresh discipline in place&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R14&lt;/td&gt;
&lt;td&gt;Algorithm update log maintained&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R15&lt;/td&gt;
&lt;td&gt;Quarterly audits documented&lt;/td&gt;
&lt;td&gt;__/2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 30 max. Resilient site: 25+/30. Sites scoring below 20 are at substantial risk in core updates.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Learning From Updates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  9.1 Post-Update Review Cadence
&lt;/h3&gt;

&lt;p&gt;After each core update completes (typically 4-6 weeks post-rollout):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Conduct full impact analysis&lt;/li&gt;
&lt;li&gt;Validate or revise hypothesis&lt;/li&gt;
&lt;li&gt;Document what remediation worked or didn't&lt;/li&gt;
&lt;li&gt;Update institutional knowledge&lt;/li&gt;
&lt;li&gt;Update this framework if patterns suggest framework gaps&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  9.2 Cross-Update Pattern Analysis
&lt;/h3&gt;

&lt;p&gt;Annually, review all algorithm update incidents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What patterns repeat across updates?&lt;/li&gt;
&lt;li&gt;What characteristics of this site keep getting hit?&lt;/li&gt;
&lt;li&gt;What characteristics keep being rewarded?&lt;/li&gt;
&lt;li&gt;What strategic changes should the site consider?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.3 Industry Learning Integration
&lt;/h3&gt;

&lt;p&gt;Continuously consume:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search Engine Land's algorithm coverage&lt;/li&gt;
&lt;li&gt;Google Search Central blog&lt;/li&gt;
&lt;li&gt;Search Engine Roundtable's daily reports&lt;/li&gt;
&lt;li&gt;WhitePress, Search Engine Journal analysis&lt;/li&gt;
&lt;li&gt;@SearchLiaison communications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But filter heavily — much SEO commentary is speculation. Trust patterns from your own data more than generic guidance.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Spam Updates and Manual Actions (Adjacent Issues)
&lt;/h2&gt;

&lt;p&gt;While this document is about core updates specifically, related events require similar protocols.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.1 Spam Updates
&lt;/h3&gt;

&lt;p&gt;Spam updates target manipulative practices. If a site is hit by a spam update:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review Google's spam policies (&lt;code&gt;developers.google.com/search/docs/essentials/spam-policies&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Identify and remediate violating practices&lt;/li&gt;
&lt;li&gt;Recovery from spam updates can be faster than core updates if violations are clearly remediated&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.2 Manual Actions
&lt;/h3&gt;

&lt;p&gt;Manual actions are penalties applied by human reviewers and communicated via Search Console.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;code&gt;Search Console &amp;gt; Security &amp;amp; Manual Actions &amp;gt; Manual actions&lt;/code&gt; regularly&lt;/li&gt;
&lt;li&gt;If a manual action is issued, follow Google's reconsideration request process&lt;/li&gt;
&lt;li&gt;Document everything; reconsideration requires showing remediation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.3 Algorithmic Action Without Public Update
&lt;/h3&gt;

&lt;p&gt;Sometimes sites lose ranking without a publicly-named update. Possible causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Localized algorithm changes&lt;/li&gt;
&lt;li&gt;Targeted spam intervention&lt;/li&gt;
&lt;li&gt;Hacking/security compromise&lt;/li&gt;
&lt;li&gt;Technical issue (de-indexing, canonical confusion)&lt;/li&gt;
&lt;li&gt;Reputation event&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Investigation:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check Search Console for security warnings, manual actions&lt;/li&gt;
&lt;li&gt;Audit technical health (crawl errors, indexability, redirects)&lt;/li&gt;
&lt;li&gt;Audit reputation (new negative content, hacked pages)&lt;/li&gt;
&lt;li&gt;Audit content (was something published that violates policies?)&lt;/li&gt;
&lt;li&gt;Compare to volatility trackers — was there an unannounced update?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Many "algorithmic actions" without public updates turn out to be technical issues or reputation issues remediable by direct action.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Audit Mode
&lt;/h2&gt;

&lt;h3&gt;
  
  
  11.1 Algorithm Update Preparedness Audit
&lt;/h3&gt;

&lt;p&gt;Score the site:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AU1&lt;/td&gt;
&lt;td&gt;Resilience score 25+/30 (Section 8.5)&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AU2&lt;/td&gt;
&lt;td&gt;Algorithm update log maintained&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AU3&lt;/td&gt;
&lt;td&gt;Response protocol documented and team identified&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AU4&lt;/td&gt;
&lt;td&gt;Monitoring infrastructure in place (GSC, GA4, volatility, ranking)&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AU5&lt;/td&gt;
&lt;td&gt;Quarterly resilience audits performed&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AU6&lt;/td&gt;
&lt;td&gt;Past update impacts documented and analyzed&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AU7&lt;/td&gt;
&lt;td&gt;Foundational frameworks (E-E-A-T, HCS, YMYL, SQRG) installed&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AU8&lt;/td&gt;
&lt;td&gt;Content quality distribution favorable (80%+ Medium-or-higher PQ)&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  11.2 Active Update Response Audit
&lt;/h3&gt;

&lt;p&gt;If currently in an active update response, score:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AR1&lt;/td&gt;
&lt;td&gt;Detection occurred within 24 hours of update start&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AR2&lt;/td&gt;
&lt;td&gt;72-hour hold respected — no panic actions in first 3 days&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AR3&lt;/td&gt;
&lt;td&gt;Quantitative impact assessment completed within 7 days&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AR4&lt;/td&gt;
&lt;td&gt;Pattern analysis completed&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AR5&lt;/td&gt;
&lt;td&gt;Hypothesis formed and validated against external sources&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AR6&lt;/td&gt;
&lt;td&gt;Constructive remediation underway based on hypothesis&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AR7&lt;/td&gt;
&lt;td&gt;Documentation maintained throughout&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AR8&lt;/td&gt;
&lt;td&gt;Stakeholder communication occurring on schedule&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AR9&lt;/td&gt;
&lt;td&gt;Recovery monitoring weekly&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  11.3 Post-Update Review Audit
&lt;/h3&gt;

&lt;p&gt;After update completes (4-6 weeks post-rollout), score:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AP1&lt;/td&gt;
&lt;td&gt;Final impact assessment documented&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AP2&lt;/td&gt;
&lt;td&gt;Remediation actions and outcomes documented&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AP3&lt;/td&gt;
&lt;td&gt;Hypothesis validation or revision documented&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AP4&lt;/td&gt;
&lt;td&gt;Lessons integrated into framework&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AP5&lt;/td&gt;
&lt;td&gt;Resilience audit re-run&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AP6&lt;/td&gt;
&lt;td&gt;Remediation gaps identified and scheduled&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  12. Common Mistakes &amp;amp; Anti-Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  12.1 Panic Reaction
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Within 48 hours of detecting an update, mass-deleting content or rewriting articles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Premature action based on incomplete data causes more damage than the update did.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Respect the 72-hour hold. Gather data before acting.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.2 Misdiagnosis
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Assuming the update targeted thing X without checking the data, then remediating for thing X.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: If the update actually targeted thing Y, your remediation doesn't help — and it may hurt by introducing new issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Data-driven hypothesis formation. Validate hypothesis against patterns and external sources before acting.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.3 Treating Updates as Penalties
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Believing the site was "punished" and looking for what to "fix" to make Google "stop punishing."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Updates re-evaluate quality holistically. Looking for a specific "violation" misses the structural nature of the change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Treat updates as evaluative re-baselines. Improve the site genuinely, not as remediation theater.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.4 Expecting Quick Recovery
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Running emergency remediation hoping for recovery within weeks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Recovery typically takes 90+ days minimum, often 6-12 months. Expecting faster sets up false hope and premature additional changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Realistic recovery expectations. Plan for the long game.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.5 Single Update Focus
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Treating each update as isolated event, not learning across them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Misses pattern recognition. Sites that don't learn keep getting hit by similar update types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Cross-update pattern analysis. Build institutional learning.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.6 Tracker Chasing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Reacting to daily volatility tracker fluctuations as if every spike is a major update.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Most volatility is noise. Reacting to noise causes thrashing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Trust multi-source confirmation before treating something as a major update.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.7 Ignoring Foundational Frameworks
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Trying to recover from an update without ever auditing E-E-A-T, HCS, YMYL, or SQRG compliance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Updates reward sites that comply with foundational frameworks. Skipping them limits recovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Use update events as forcing function for foundational framework audits.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.8 Stakeholder Pressure-Driven Decisions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Making changes because a client or executive demands action, not because data supports it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Pressure-driven changes often hurt more than help.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Educate stakeholders on the 72-hour hold, the diagnostic process, and realistic recovery timelines. Hold the line on data-driven response.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.9 Ignoring Spam Update vs Core Update Distinction
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Treating a spam update like a core update or vice versa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Different remediation protocols. Spam violations need direct remediation; core update issues need quality improvement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Identify which type of update is occurring before responding.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.10 Over-Documenting While Under-Acting
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Spending all energy documenting impact and analyzing patterns, never actually executing remediation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Analysis paralysis prevents recovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Documentation supports action, doesn't replace it. After 7-14 days of analysis, execute remediation in parallel with continued monitoring.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Maintenance Schedule
&lt;/h2&gt;

&lt;h3&gt;
  
  
  13.1 Daily
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monitor SERP volatility trackers&lt;/li&gt;
&lt;li&gt;Check GSC for traffic anomalies&lt;/li&gt;
&lt;li&gt;Watch @SearchLiaison and industry news for update mentions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.2 Weekly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Review tracked keyword positions for unusual movement&lt;/li&gt;
&lt;li&gt;Check brand search results for new negative content&lt;/li&gt;
&lt;li&gt;Monitor traffic patterns for trend shifts&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.3 Monthly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Review crawl stats for unusual patterns&lt;/li&gt;
&lt;li&gt;Check for new manual actions or security issues&lt;/li&gt;
&lt;li&gt;Assess content portfolio quality distribution&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.4 Quarterly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Full resilience audit (Section 8.5)&lt;/li&gt;
&lt;li&gt;Foundational framework compliance refresh (E-E-A-T, HCS, YMYL, SQRG)&lt;/li&gt;
&lt;li&gt;Cross-incident pattern review&lt;/li&gt;
&lt;li&gt;Update institutional knowledge base&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.5 Annually
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive year-in-review of all updates and impacts&lt;/li&gt;
&lt;li&gt;Strategic resilience planning for upcoming year&lt;/li&gt;
&lt;li&gt;Framework document revisions based on year's learning&lt;/li&gt;
&lt;li&gt;Stakeholder education on update reality&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.6 During Active Update
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;24-hour intervals during first week&lt;/li&gt;
&lt;li&gt;72-hour intervals during weeks 2-4&lt;/li&gt;
&lt;li&gt;Weekly during recovery monitoring (months 2-6)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  14. Implementation/Audit Report Templates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  14.1 Post-Update Analysis Report Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Post-Update Analysis: {{UPDATE_NAME}}&lt;/span&gt;

&lt;span class="gu"&gt;## Update Identification&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Update name: {{NAME}}
&lt;span class="p"&gt;-&lt;/span&gt; Detected: {{DATETIME}}
&lt;span class="p"&gt;-&lt;/span&gt; Confirmed by Google: {{DATETIME}}
&lt;span class="p"&gt;-&lt;/span&gt; Rollout completed: {{DATETIME}}
&lt;span class="p"&gt;-&lt;/span&gt; Industry consensus on focus: {{SUMMARY}}

&lt;span class="gu"&gt;## Impact on This Site&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Total traffic change: {{PERCENTAGE}}
&lt;span class="p"&gt;-&lt;/span&gt; Direction: {{LOSS/GAIN/MIXED}}
&lt;span class="p"&gt;-&lt;/span&gt; Pages with &amp;gt;25% loss: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; Pages with &amp;gt;25% gain: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; Average position change: {{NUMBER}}
&lt;span class="p"&gt;-&lt;/span&gt; Magnitude classification: {{MINIMAL/MODERATE/SIGNIFICANT/CATASTROPHIC}}

&lt;span class="gu"&gt;## Pages Most Affected&lt;/span&gt;
&lt;span class="gu"&gt;### Largest Losses&lt;/span&gt;
{{TABLE_OF_TOP_10_LOSSES}}

&lt;span class="gu"&gt;### Largest Gains&lt;/span&gt;
{{TABLE_OF_TOP_10_GAINS}}

&lt;span class="gu"&gt;## Pattern Analysis&lt;/span&gt;
{{IDENTIFIED_PATTERNS_ACROSS_AFFECTED_PAGES}}

&lt;span class="gu"&gt;## Hypothesis&lt;/span&gt;
&lt;span class="gs"&gt;**Primary hypothesis**&lt;/span&gt;: {{H1_DESCRIPTION}}
&lt;span class="gs"&gt;**Evidence supporting**&lt;/span&gt;: {{EVIDENCE}}
&lt;span class="gs"&gt;**Counter-evidence**&lt;/span&gt;: {{COUNTER_EVIDENCE}}

&lt;span class="gs"&gt;**Alternative hypothesis**&lt;/span&gt;: {{H2_DESCRIPTION}}
&lt;span class="gs"&gt;**Evidence supporting**&lt;/span&gt;: {{EVIDENCE}}

&lt;span class="gs"&gt;**Hypothesis confidence**&lt;/span&gt;: {{LOW/MEDIUM/HIGH}}

&lt;span class="gu"&gt;## Remediation Plan&lt;/span&gt;
&lt;span class="gu"&gt;### Phase 1 (Immediate)&lt;/span&gt;
{{ACTIONS}}

&lt;span class="gu"&gt;### Phase 2 (30 days)&lt;/span&gt;
{{ACTIONS}}

&lt;span class="gu"&gt;### Phase 3 (90 days)&lt;/span&gt;
{{ACTIONS}}

&lt;span class="gu"&gt;## Recovery Tracking&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; 30-day check-in: {{SCHEDULED_DATE}}
&lt;span class="p"&gt;-&lt;/span&gt; 60-day check-in: {{SCHEDULED_DATE}}
&lt;span class="p"&gt;-&lt;/span&gt; 90-day check-in: {{SCHEDULED_DATE}}

&lt;span class="gu"&gt;## Lessons for Future Updates&lt;/span&gt;
{{INSIGHTS_TO_INTEGRATE}}

&lt;span class="gu"&gt;## Sign-Off&lt;/span&gt;
{{ANALYST_NAME}}, {{DATE}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  14.2 Algorithm Update Audit Report Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Algorithm Update Preparedness Audit&lt;/span&gt;

&lt;span class="gs"&gt;**Site**&lt;/span&gt;: {{BUSINESS_NAME}}
&lt;span class="gs"&gt;**Audit Date**&lt;/span&gt;: {{TODAY}}

&lt;span class="gu"&gt;## Resilience Score&lt;/span&gt;
{{X}}/30 — {{RESILIENT/AT_RISK/VULNERABLE}}

&lt;span class="gu"&gt;## Foundational Framework Status&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; E-E-A-T: {{SCORE}}/130
&lt;span class="p"&gt;-&lt;/span&gt; HCS: {{SCORE}}/54
&lt;span class="p"&gt;-&lt;/span&gt; YMYL: {{SCORE}}/48 (if applicable)
&lt;span class="p"&gt;-&lt;/span&gt; SQRG: {{ESTIMATED_RATING}}

&lt;span class="gu"&gt;## Monitoring Infrastructure Status&lt;/span&gt;
{{LIST_WITH_STATUS}}

&lt;span class="gu"&gt;## Response Capability Status&lt;/span&gt;
{{LIST_WITH_STATUS}}

&lt;span class="gu"&gt;## Past Update Impact History&lt;/span&gt;
{{TABLE_OF_PAST_UPDATES}}

&lt;span class="gu"&gt;## Risk Assessment&lt;/span&gt;
{{ASSESSMENT_OF_LIKELY_VULNERABILITIES}}

&lt;span class="gu"&gt;## Recommended Resilience Improvements&lt;/span&gt;
{{PRIORITIZED_LIST}}

&lt;span class="gu"&gt;## Sign-Off&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  End of Framework Document
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Document version&lt;/strong&gt;: 1.0&lt;br&gt;
&lt;strong&gt;Last updated&lt;/strong&gt;: 2026-04-29&lt;br&gt;
&lt;strong&gt;Maintained by&lt;/strong&gt;: ThatDeveloperGuy&lt;/p&gt;

&lt;p&gt;Core updates are the most disruptive periodic events in SEO. The frameworks in this document — combined with foundational compliance with E-E-A-T, HCS, YMYL, SQRG, and entity-based authority — create resilience. Sites that build resilience proactively spend less time in reactive recovery. Sites that wait for updates to expose weaknesses spend significant time in recovery cycles.&lt;/p&gt;

&lt;p&gt;The most important truth about core updates: &lt;strong&gt;the best response is not having needed one in the first place&lt;/strong&gt;. Build sites that earn their rankings through genuine quality. Audit continuously. Improve continuously. Don't wait for updates to reveal what was always going to be revealed.&lt;/p&gt;

&lt;p&gt;Companion documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;framework-eeat.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-ymyl.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-hcs.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-sqrg.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-infogain.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-entitysalience.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-knowledgegraph.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-aicitations.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  About this framework library
&lt;/h2&gt;

&lt;p&gt;This article is the Dev.to republish of a framework reference document from ThatDevPro's SEO + AI engineering library. &lt;strong&gt;Canonical source: &lt;a href="https://www.thatdevpro.com/insights/framework-coreupdates/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-coreupdates/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio operating from Cassville, Missouri. The studio runs the full &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;14-tier Engine Optimization&lt;/a&gt; stack and ships open-source tooling for AI citation engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Companion 14-tier Engine Optimization stack&lt;/strong&gt; (each tier is its own article):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-1-foundation/" rel="noopener noreferrer"&gt;Tier 1 — Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-2-search-visibility/" rel="noopener noreferrer"&gt;Tier 2 — Search Visibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-3-ai-domination/" rel="noopener noreferrer"&gt;Tier 3 — AI Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-4-entity-and-authority/" rel="noopener noreferrer"&gt;Tier 4 — Entity and Authority&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-5-local-domination/" rel="noopener noreferrer"&gt;Tier 5 — Local Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-6-content-and-multimedia/" rel="noopener noreferrer"&gt;Tier 6 — Content and Multimedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-7-social-and-community/" rel="noopener noreferrer"&gt;Tier 7 — Social and Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-8-data-analytics-conversion/" rel="noopener noreferrer"&gt;Tier 8 — Data, Analytics, Conversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-9-monitoring-and-intelligence/" rel="noopener noreferrer"&gt;Tier 9 — Monitoring and Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-10-workflow-and-operations/" rel="noopener noreferrer"&gt;Tier 10 — Workflow and Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-11-marketplace-and-retail/" rel="noopener noreferrer"&gt;Tier 11 — Marketplace and Retail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-12-international/" rel="noopener noreferrer"&gt;Tier 12 — International&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-14-advanced-and-immersive/" rel="noopener noreferrer"&gt;Tier 14 — Advanced and Immersive&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Need this framework implemented on your site? &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;See the Engine Optimization service&lt;/a&gt; or hire through &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;ThatDevPro contact&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>googleseo</category>
      <category>algorithms</category>
      <category>update</category>
    </item>
    <item>
      <title>Google's Helpful Content System (HCS) explained</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 01:04:01 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/googles-helpful-content-system-hcs-explained-80n</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/googles-helpful-content-system-hcs-explained-80n</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-hcs/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. &lt;a href="https://www.thatdevpro.com" rel="noopener noreferrer"&gt;ThatDevPro&lt;/a&gt; is an SDVOSB-certified veteran-owned web + AI engineering studio. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Google's "People-First Content" Framework&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive installation and audit reference for ensuring website content meets Google's Helpful Content System standards — the framework that became part of Google's core ranking infrastructure in 2024 and continues to drive ranking outcomes across every core update. This document is dual-purpose: installation manual and audit document.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cross-stack implementation note&lt;/strong&gt;: the code samples in this framework are written in plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents of every pattern below, see &lt;a href="//framework-cross-stack-implementation.md"&gt;&lt;code&gt;framework-cross-stack-implementation.md&lt;/code&gt;&lt;/a&gt;. For pure client-rendered SPAs (no SSR/SSG) see &lt;a href="//framework-react.md"&gt;&lt;code&gt;framework-react.md&lt;/code&gt;&lt;/a&gt;. For Tailwind-specific concerns (purge, dynamic classes, dark-mode CLS, focus accessibility) see &lt;a href="//framework-tailwind.md"&gt;&lt;code&gt;framework-tailwind.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Document Purpose &amp;amp; How to Use This Document
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 What This Document Is
&lt;/h3&gt;

&lt;p&gt;This is the canonical reference for implementing Google's Helpful Content System (HCS) on a website. HCS is the framework Google uses to distinguish content created &lt;strong&gt;for people&lt;/strong&gt; (helpful, original, satisfies the searcher's need) from content created &lt;strong&gt;for search engines&lt;/strong&gt; (manipulative, derivative, designed to rank rather than serve). HCS was launched in August 2022 as a standalone update, became part of Google's core ranking system in March 2024, and now operates continuously rather than as a periodic update.&lt;/p&gt;

&lt;p&gt;This document specifies how to evaluate every piece of content against the HCS framework, what signals to install on every page to demonstrate "people-first" content creation, and how to audit existing content for HCS compliance.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Three Operating Modes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mode A — Install Mode&lt;/strong&gt;: Building HCS-compliant content infrastructure. Follow Sections 2 → 14 in order.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode B — Audit Mode&lt;/strong&gt;: Evaluating existing content against HCS criteria. Skip to Section 11.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode C — Hybrid Mode&lt;/strong&gt;: Audit then install for failing items.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3 How Claude Code CLI Should Consume This Document
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read Section 2&lt;/strong&gt; — collect client variables&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run Section 3 self-assessment&lt;/strong&gt; — apply the HCS questions to each piece of content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identify SEO-first patterns&lt;/strong&gt; — flag content showing signals of "made for search engines"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install per-article HCS markers&lt;/strong&gt; (Section 5) and per-site HCS infrastructure (Section 6)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate&lt;/strong&gt; — Section 11&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate report&lt;/strong&gt; — Section 14&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1.4 Conflict Resolution Rules
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Conflict&lt;/th&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Existing thin content optimized for search&lt;/td&gt;
&lt;td&gt;Flag for either deep enrichment or removal/consolidation. Do not preserve in current state.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing manipulative SEO patterns (keyword stuffing, doorway pages)&lt;/td&gt;
&lt;td&gt;Remediate or remove. These pages drag down site-wide HCS score.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing content that's good but lacks HCS markers&lt;/td&gt;
&lt;td&gt;Add markers without rewriting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing content quantity vs quality tension&lt;/td&gt;
&lt;td&gt;Quality always wins. Reduce scale if needed.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1.5 Required Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console&lt;/strong&gt; — for monitoring HCS-related ranking changes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MarketMuse, Frase, or Clearscope&lt;/strong&gt; — for content depth and topic coverage analysis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Originality.ai or similar&lt;/strong&gt; — AI content detection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Surfer SEO&lt;/strong&gt; — for content quality benchmarking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal review&lt;/strong&gt; — qualified human evaluators who can self-assess content honestly&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Client Variables Intake
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================&lt;/span&gt;
&lt;span class="c1"&gt;# HCS FRAMEWORK CLIENT VARIABLES&lt;/span&gt;
&lt;span class="c1"&gt;# ============================================&lt;/span&gt;

&lt;span class="c1"&gt;# --- Business Context (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;business_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;primary_domain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_industry&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_focus_topics&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;            &lt;span class="c1"&gt;# 3-7 topics this site is genuinely the authority on&lt;/span&gt;

&lt;span class="c1"&gt;# --- Content Audit Baseline (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;total_content_pieces&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;content_publication_rate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;         &lt;span class="c1"&gt;# "high_volume" (&amp;gt;10/week), "medium" (1-5/week), "low" (&amp;lt;1/week)&lt;/span&gt;
&lt;span class="na"&gt;content_creation_method&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;          &lt;span class="c1"&gt;# "in_house_experts", "freelancers", "ai_assisted", "outsourced", "mixed"&lt;/span&gt;
&lt;span class="na"&gt;average_content_length&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;            &lt;span class="c1"&gt;# Words&lt;/span&gt;

&lt;span class="c1"&gt;# --- Audience (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;primary_audience_description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;     &lt;span class="c1"&gt;# Who is this content actually for?&lt;/span&gt;
&lt;span class="na"&gt;audience_pain_points&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;             &lt;span class="c1"&gt;# 3-5 specific problems they're trying to solve&lt;/span&gt;
&lt;span class="na"&gt;audience_expertise_level&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;         &lt;span class="c1"&gt;# "beginner", "intermediate", "expert", "mixed"&lt;/span&gt;

&lt;span class="c1"&gt;# --- Content Strategy Honesty Check (REQUIRED — answer truthfully) ---&lt;/span&gt;
&lt;span class="na"&gt;publishes_for_search_intent_only&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# Be honest. Were any articles published only because keywords had volume?&lt;/span&gt;
&lt;span class="na"&gt;publishes_thin_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;        &lt;span class="c1"&gt;# Articles under 500 words on substantive topics&lt;/span&gt;
&lt;span class="na"&gt;publishes_aggregated_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# Content that mostly summarizes others without adding value&lt;/span&gt;
&lt;span class="na"&gt;uses_ai_for_bulk_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;ai_content_review_quality&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;        &lt;span class="c1"&gt;# "minimal", "moderate", "rigorous", "expert_review_required"&lt;/span&gt;
&lt;span class="na"&gt;content_serves_genuine_user_need&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# 1-10 self-rating of how well content serves users vs ranks&lt;/span&gt;

&lt;span class="c1"&gt;# --- Helpful Content Markers (RECOMMENDED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_about_us_explaining_purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_author_bios_with_credentials&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_original_research&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_first_hand_experience_demonstrated&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_clear_topical_focus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_practical_value_per_article&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;publishes_only_what_audience_needs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- SEO-First Anti-Patterns (RECOMMENDED — be honest) ---&lt;/span&gt;
&lt;span class="na"&gt;has_pages_targeting_high_volume_low_intent_keywords&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_doorway_pages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_thin_aggregator_pages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_AI_content_passed_off_as_expert&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_content_promising_what_it_doesnt_deliver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_clickbait_titles_not_matching_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_padded_content_to_hit_word_count&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Refresh &amp;amp; Maintenance (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;content_review_cadence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;           &lt;span class="c1"&gt;# "monthly", "quarterly", "annually", "never"&lt;/span&gt;
&lt;span class="na"&gt;has_content_decay_process&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;retires_outdated_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;consolidates_redundant_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. What HCS Is
&lt;/h2&gt;

&lt;p&gt;The Helpful Content System (HCS) is Google's evaluation framework — and now, ranking infrastructure — for distinguishing content that genuinely helps people from content that's primarily designed to rank in search. Launched August 2022 as a sitewide signal, HCS was integrated into Google's core ranking systems in the March 2024 core update. It now operates continuously rather than as a periodic update.&lt;/p&gt;

&lt;p&gt;The HCS framework is centered on a simple but uncomfortable question: &lt;strong&gt;was this content made primarily for people, or made primarily for search engines?&lt;/strong&gt; Google's algorithms attempt to detect content optimized for search rankings without genuinely serving the searcher's need. When detected, that content gets demoted — and the demotion can cascade across the entire site if the pattern is widespread.&lt;/p&gt;

&lt;p&gt;HCS evaluates content using a "Who, How, and Why" framework:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Who&lt;/strong&gt; created the content? Are they a real person with relevant expertise? Is there transparency about authorship?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How&lt;/strong&gt; was the content created? What process produced it? Was AI involved? Was it reviewed?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why&lt;/strong&gt; was the content created? To genuinely help readers, or primarily to attract search traffic?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The framework is documented in Google's public guidance at &lt;code&gt;developers.google.com/search/docs/fundamentals/creating-helpful-content&lt;/code&gt;. It overlaps significantly with E-E-A-T but is distinct: E-E-A-T evaluates &lt;em&gt;whether the source is trustworthy&lt;/em&gt;; HCS evaluates &lt;em&gt;whether the content itself serves users&lt;/em&gt;. A site can have strong E-E-A-T (credentialed authors, good security, accurate information) but weak HCS (publishing thin content, optimizing for keywords rather than user need).&lt;/p&gt;

&lt;p&gt;The 2024-2026 evolution of HCS reflects Google's response to the AI content explosion. Google's December 2025 helpful content guidance updated the "Who, How, and Why" framework to explicitly address AI-generated content. The position: AI involvement isn't disqualifying. Low effort, generic content that doesn't serve users IS disqualifying. AI-assisted content that is thoroughly reviewed by experts, enriched with original insights, and serves a genuine user need can pass HCS. AI content that's mass-produced for SEO with minimal review fails HCS — and the December 2025 core update specifically targeted these patterns, with significant ranking losses for content farms.&lt;/p&gt;

&lt;p&gt;The four behaviors HCS most directly punishes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Volume-over-quality content strategies&lt;/strong&gt; — sites that publish many articles per day on topics they don't have genuine expertise in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search-intent-first content&lt;/strong&gt; — articles that exist because a keyword has volume, not because the audience needs an answer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aggregated/derivative content&lt;/strong&gt; — articles that summarize what others have said without adding original insight&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI-generated content without expert review&lt;/strong&gt; — bulk AI content optimized for ranking rather than helping&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The four behaviors HCS rewards:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Topical authority through depth&lt;/strong&gt; — sites that cover a focused set of topics deeply rather than broadly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First-hand experience and original insight&lt;/strong&gt; — content that demonstrates the author actually did, used, or experienced what's being discussed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear practical value per article&lt;/strong&gt; — every article should leave the reader with something they didn't have before&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editorial integrity&lt;/strong&gt; — content created by people who care about the topic, reviewed by people who know the topic&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  4. Google's Self-Assessment Questions
&lt;/h2&gt;

&lt;p&gt;Google publishes specific questions creators should ask themselves about their content. This is the official HCS self-evaluation framework. Apply these to every piece of content.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 People-First Content Questions
&lt;/h3&gt;

&lt;p&gt;Score each question Yes/No/Partial for each article being evaluated:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Content quality&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the content provide original information, reporting, research, or analysis?&lt;/li&gt;
&lt;li&gt;Does the content provide a substantial, complete, or comprehensive description of the topic?&lt;/li&gt;
&lt;li&gt;Does the content provide insightful analysis or interesting information beyond the obvious?&lt;/li&gt;
&lt;li&gt;If drawing on other sources, does the content avoid simply copying or rewriting them, and instead provide substantial additional value and originality?&lt;/li&gt;
&lt;li&gt;Does the main heading or page title provide a descriptive, helpful summary of the content?&lt;/li&gt;
&lt;li&gt;Does the main heading or page title avoid exaggerating or being shocking in nature?&lt;/li&gt;
&lt;li&gt;Is this the sort of page you'd want to bookmark, share with a friend, or recommend?&lt;/li&gt;
&lt;li&gt;Would you expect to see this content in or referenced by a printed magazine, encyclopedia, or book?&lt;/li&gt;
&lt;li&gt;Does the content provide substantial value when compared to other pages in search results?&lt;/li&gt;
&lt;li&gt;Does the content have any spelling or stylistic issues?&lt;/li&gt;
&lt;li&gt;Is the content produced well, or does it appear sloppy or hastily produced?&lt;/li&gt;
&lt;li&gt;Is the content mass-produced by or outsourced to a large number of creators, or spread across a large network of sites, so that individual pages or sites don't get as much attention or care?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Expertise&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the content present information in a way that makes you want to trust it, such as clear sourcing, evidence of the expertise involved, background about the author or the site that publishes it?&lt;/li&gt;
&lt;li&gt;If you researched the site producing the content, would you come away with an impression that it is well-trusted or widely-recognized as an authority on its topic?&lt;/li&gt;
&lt;li&gt;Is this content written or reviewed by an expert or enthusiast who demonstrably knows the topic well?&lt;/li&gt;
&lt;li&gt;Does the content have any easily-verified factual errors?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Page experience&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the page have a clear purpose or focus?&lt;/li&gt;
&lt;li&gt;Given the topic, does the page provide a satisfying experience?&lt;/li&gt;
&lt;li&gt;Does the page have an intrusive amount of ads, including pop-ups, interstitials, or anything that distracts from the main content?&lt;/li&gt;
&lt;li&gt;Does the page display well for mobile devices?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.2 SEO-First Content Red Flags (Avoid These)
&lt;/h3&gt;

&lt;p&gt;Google explicitly warns that creating content with these patterns is a problem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is content primarily made to attract people from search engines, rather than made for humans?&lt;/li&gt;
&lt;li&gt;Are you producing lots of content on different topics in hopes that some of it might perform well in search results?&lt;/li&gt;
&lt;li&gt;Are you using extensive automation to produce content on many topics?&lt;/li&gt;
&lt;li&gt;Are you mainly summarizing what others have to say without adding much value?&lt;/li&gt;
&lt;li&gt;Are you writing about things simply because they seem trending, and not because you'd write about them otherwise for your existing audience?&lt;/li&gt;
&lt;li&gt;Does your content leave readers feeling they need to search again to get better information from other sources?&lt;/li&gt;
&lt;li&gt;Are you writing to a particular word count because you've heard or read that Google has a preferred word count?&lt;/li&gt;
&lt;li&gt;Did you decide to enter some niche topic area without any real expertise, but mainly because you thought you'd get search traffic?&lt;/li&gt;
&lt;li&gt;Does your content promise to answer a question that actually has no answer, such as suggesting there's a release date for a product, movie, or TV show when one isn't confirmed?&lt;/li&gt;
&lt;li&gt;Are you changing the date of pages to make them seem fresh when the content has not substantially changed?&lt;/li&gt;
&lt;li&gt;Are you adding lots of new content or removing lots of older content primarily because you believe it will help your search rankings overall by somehow making your site seem fresh?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.3 The "Who, How, Why" Framework
&lt;/h3&gt;

&lt;p&gt;For every piece of content, document:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who created it?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real person or AI?&lt;/li&gt;
&lt;li&gt;If real: what's their relevant expertise?&lt;/li&gt;
&lt;li&gt;If AI-assisted: what role did AI play, and what role did humans play?&lt;/li&gt;
&lt;li&gt;Is the creator's identity transparent on the page?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How was it created?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What was the editorial process?&lt;/li&gt;
&lt;li&gt;Was original research conducted?&lt;/li&gt;
&lt;li&gt;Was firsthand experience involved?&lt;/li&gt;
&lt;li&gt;Was the content reviewed by someone qualified?&lt;/li&gt;
&lt;li&gt;If AI was used, what was the review and editing process?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why was it created?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To genuinely help the audience solve a problem? (good)&lt;/li&gt;
&lt;li&gt;To demonstrate or document the creator's expertise on a topic they care about? (good)&lt;/li&gt;
&lt;li&gt;To target a search keyword the site has no genuine authority on? (bad)&lt;/li&gt;
&lt;li&gt;To increase publication volume for SEO? (bad)&lt;/li&gt;
&lt;li&gt;Because someone said the keyword had high volume? (bad)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The "why" is the hardest to be honest about. Most low-quality SEO content is created by people who would never admit it's primarily for search engines. The honest test: would you publish this article if Google didn't exist? If no, it's probably search-first content.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Per-Article HCS Implementation
&lt;/h2&gt;

&lt;p&gt;What every article must include to demonstrate HCS compliance.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 The Five HCS Markers
&lt;/h3&gt;

&lt;p&gt;Every article must visibly demonstrate these markers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.1.1 Clear creator identity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Author byline at the top of every article with link to author page. The author must be a real person with verifiable expertise. See &lt;code&gt;framework-eeat.md&lt;/code&gt; Section 4.2 for full implementation. HCS adds the requirement that &lt;strong&gt;anonymous content is a red flag&lt;/strong&gt; — even pseudonymous bylines should explain why pseudonymity is appropriate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.1.2 Demonstrable original value&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every article must add something not available in the top-ranked search results for the query. Original value can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Original research or data&lt;/li&gt;
&lt;li&gt;First-hand experience or testing&lt;/li&gt;
&lt;li&gt;Synthesis that connects ideas in a new way&lt;/li&gt;
&lt;li&gt;Specific examples not available elsewhere&lt;/li&gt;
&lt;li&gt;Counterintuitive findings or contrarian analysis&lt;/li&gt;
&lt;li&gt;Updated information based on the author's recent work&lt;/li&gt;
&lt;li&gt;Failure cases and edge cases the author has personally encountered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Build an "original value" sidebar on long-form articles:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"original-value"&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"What this article adds"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;What This Article Adds&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Most articles on {{TOPIC}} cover {{COMMON_COVERAGE}}. This article goes further with:&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;{{ORIGINAL_CONTRIBUTION_1}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;{{ORIGINAL_CONTRIBUTION_2}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;{{ORIGINAL_CONTRIBUTION_3}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5.1.3 Comprehensive coverage when relevant&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If the article promises to be a "complete guide" or "everything you need to know," it must actually be comprehensive. Use a coverage checklist in the article structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;nav&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"article-coverage"&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;"What this article covers"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;What This Guide Covers&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ol&amp;gt;&lt;/span&gt;
    {{LIST_OF_SECTIONS_WITH_LINKS_TO_HEADINGS}}
  &lt;span class="nt"&gt;&amp;lt;/ol&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you can't be comprehensive, don't claim to be. Title and meta should match the actual depth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.1.4 Honest meta and titles&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Title and meta description must accurately describe the content. Anti-patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Ultimate Guide to X" when the article is 800 words of basics&lt;/li&gt;
&lt;li&gt;"X Things You Didn't Know" when the things are well-known&lt;/li&gt;
&lt;li&gt;"Best X for Y" when the article is just a list of things, not a real comparison&lt;/li&gt;
&lt;li&gt;Question titles that the article doesn't actually answer&lt;/li&gt;
&lt;li&gt;Numerical titles ("10 X") when the content has artificially padded to hit the number&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Honest title test: would the article meet the searcher's expectation if they clicked from the title alone, without reading the meta?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.1.5 No trailing fluff&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;End the article when the value is delivered. HCS-compliant articles avoid:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conclusion paragraphs that restate what was said&lt;/li&gt;
&lt;li&gt;"I hope this article helped" filler&lt;/li&gt;
&lt;li&gt;Padding to hit a target word count&lt;/li&gt;
&lt;li&gt;"Stay tuned for more articles like this" engagement bait&lt;/li&gt;
&lt;li&gt;AI-generated boilerplate endings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;End the article with: a clear takeaway, a next step, a related resource, or a question for the reader. Not filler.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 The HCS Article Template
&lt;/h3&gt;

&lt;p&gt;Combining the markers above:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"article hcs-compliant"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- Metadata header --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;header&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;{{ACCURATE_TITLE_THAT_MATCHES_CONTENT}}&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"article-byline"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"{{AUTHOR_PHOTO}}"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"{{AUTHOR_NAME}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;By &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/authors/{{AUTHOR_SLUG}}/"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"author"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{AUTHOR_NAME}}&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"byline-credentials"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{RELEVANT_CREDENTIALS_FOR_THIS_TOPIC}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{PUBLISHED}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Published {{PUBLISHED_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{UPDATED}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Updated {{UPDATED_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    {{IF_AI_USED}}
    &lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ai-disclosure"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      This article {{AI_USAGE_LEVEL}}. Reviewed and verified by {{REVIEWER_NAME}}.
    &lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;
    {{/IF}}
  &lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Original value indicator --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"original-value"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;What This Article Adds&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
      {{ORIGINAL_CONTRIBUTIONS}}
    &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Coverage promise (if comprehensive guide) --&amp;gt;&lt;/span&gt;
  {{IF_COMPREHENSIVE_GUIDE}}
  &lt;span class="nt"&gt;&amp;lt;nav&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"article-coverage"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;What This Guide Covers&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    {{TOC}}
  &lt;span class="nt"&gt;&amp;lt;/nav&amp;gt;&lt;/span&gt;
  {{/IF}}

  &lt;span class="c"&gt;&amp;lt;!-- Article body — substantive content --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"article-body"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    {{CONTENT_THAT_DELIVERS_ON_THE_TITLE_PROMISE}}

    &lt;span class="c"&gt;&amp;lt;!-- First-hand experience callout when applicable --&amp;gt;&lt;/span&gt;
    {{IF_PRACTICAL_CONTENT}}
    &lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"experience-callout"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;How I Know This Works&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{SPECIFIC_EXPERIENCE_DETAILS}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;
    {{/IF}}

    &lt;span class="c"&gt;&amp;lt;!-- Original imagery, screenshots, data visualizations --&amp;gt;&lt;/span&gt;
    {{ORIGINAL_VISUAL_CONTENT}}

    &lt;span class="c"&gt;&amp;lt;!-- Failure cases for practical content --&amp;gt;&lt;/span&gt;
    {{IF_LONG_FORM_PRACTICAL}}
    &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"failures-edge-cases"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;What Doesn't Work&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
      {{SPECIFIC_FAILURES_OR_EDGE_CASES}}
    &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
    {{/IF}}
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- End cleanly: takeaway, next step, or related --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;footer&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"article-takeaway"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Key Takeaway&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{ONE_SENTENCE_TAKEAWAY}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"article-next-step"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Next Step&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{SPECIFIC_RECOMMENDATION_FOR_THE_READER}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

    {{REFERENCES_IF_FACTUAL_CONTENT}}
    {{AUTHOR_BOX}}
    {{RELATED_ARTICLES_GENUINELY_RELATED}}
  &lt;span class="nt"&gt;&amp;lt;/footer&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.3 What to Remove from Articles
&lt;/h3&gt;

&lt;p&gt;To be HCS-compliant, audit every article for and remove:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generic introductions ("In this article, we'll cover...") — get to the value&lt;/li&gt;
&lt;li&gt;Unnecessary backstory before the core content&lt;/li&gt;
&lt;li&gt;Padded sections that don't add value&lt;/li&gt;
&lt;li&gt;Restated conclusions&lt;/li&gt;
&lt;li&gt;Engagement bait ("Don't forget to subscribe!")&lt;/li&gt;
&lt;li&gt;AI-generated transition sentences ("It's important to note that...", "Furthermore...")&lt;/li&gt;
&lt;li&gt;Sections clearly added to hit keyword density or word count&lt;/li&gt;
&lt;li&gt;"Did you know" filler facts unrelated to the user's actual question&lt;/li&gt;
&lt;li&gt;Disclaimers buried in irrelevant places&lt;/li&gt;
&lt;li&gt;Sales pitches for unrelated services&lt;/li&gt;
&lt;li&gt;Pop-up newsletter prompts that interrupt the reading experience&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. Site-Wide HCS Implementation
&lt;/h2&gt;

&lt;p&gt;Beyond per-article work, the site as a whole must signal HCS compliance.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 Phase 1: Topical Focus Audit
&lt;/h3&gt;

&lt;p&gt;Sites that try to cover everything do worse than sites with clear topical focus. HCS rewards depth over breadth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6.1.1 Define the site's topical pillars&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Identify 3-7 topics this site is genuinely the authority on. These should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Topics the founder or team has demonstrable expertise in&lt;/li&gt;
&lt;li&gt;Topics where the site has unique perspective or experience&lt;/li&gt;
&lt;li&gt;Topics where the site can publish original research or insights&lt;/li&gt;
&lt;li&gt;Topics that connect to the business's actual offerings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Document at &lt;code&gt;/topics/&lt;/code&gt; or in an internal strategy doc:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Primary Topics (we are the authority):
1. {{TOPIC_1}} - {{WHY_WE_ARE_AUTHORITY}}
2. {{TOPIC_2}} - {{WHY_WE_ARE_AUTHORITY}}
3. {{TOPIC_3}} - {{WHY_WE_ARE_AUTHORITY}}

Secondary Topics (we have meaningful coverage):
1. {{TOPIC_4}}
2. {{TOPIC_5}}

Topics We Don't Cover (and why):
- {{ADJACENT_TOPIC}} - {{REASON_NOT_COVERED}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6.1.2 Audit existing content against pillars&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For every existing piece of content:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does it fit a primary or secondary pillar? (keep)&lt;/li&gt;
&lt;li&gt;Is it a one-off article on an unrelated topic? (consolidate or remove)&lt;/li&gt;
&lt;li&gt;Is it an old SEO experiment that doesn't fit our focus? (remove)&lt;/li&gt;
&lt;li&gt;Is it duplicative of better existing content? (consolidate)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result: a content inventory where every remaining article reinforces topical authority on a defined pillar.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.2 Phase 2: Topical Hub Pages
&lt;/h3&gt;

&lt;p&gt;Each primary pillar gets a dedicated hub page demonstrating depth.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"topical-hub"&lt;/span&gt; &lt;span class="na"&gt;itemscope&lt;/span&gt; &lt;span class="na"&gt;itemtype=&lt;/span&gt;&lt;span class="s"&gt;"https://schema.org/CollectionPage"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;{{TOPIC_NAME}}&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hub-introduction"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{200_400_WORD_AUTHORITATIVE_INTRO_DEMONSTRATING_DEPTH}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hub-our-perspective"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Our Perspective on {{TOPIC}}&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{WHAT_MAKES_THIS_SITES_TAKE_ON_THE_TOPIC_DISTINCTIVE}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hub-content-organized"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;{{TOPIC}} — Complete Coverage&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Foundations&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;{{FOUNDATIONAL_ARTICLES}}&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Practical Application&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;{{PRACTICAL_ARTICLES}}&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Advanced Topics&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;{{ADVANCED_ARTICLES}}&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;Original Research&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;{{RESEARCH_ARTICLES}}&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hub-related-pillars"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Related Topics We Cover&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;{{LINKS_TO_RELATED_HUBS}}&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hub-not-covered"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Topics We Don't Cover (And Where to Find Them)&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{HONEST_GUIDANCE_TO_OTHER_AUTHORITATIVE_SOURCES}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The "honest guidance to other sources" section is counterintuitive but powerful. Pointing readers to legitimate authorities on adjacent topics demonstrates editorial integrity and improves user satisfaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.3 Phase 3: About Page That Explains the Site's Purpose
&lt;/h3&gt;

&lt;p&gt;Google's HCS guidance specifically asks: "If you researched the site producing the content, would you come away with an impression that it is well-trusted or widely-recognized as an authority on its topic?"&lt;/p&gt;

&lt;p&gt;The About page is the answer. Build at &lt;code&gt;/about/&lt;/code&gt; with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"about-page"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;About {{BUSINESS_NAME}}&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"why-we-exist"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Why We Exist&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{SPECIFIC_PROBLEM_THE_SITE_SOLVES_FOR_AUDIENCE}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{HOW_THE_SITE_IS_DIFFERENT_FROM_ALTERNATIVES}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"who-we-are"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Who We Are&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{FOUNDER_BIO_WITH_RELEVANT_EXPERIENCE}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{TEAM_INFO_IF_APPLICABLE}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"what-we-cover"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;What We Cover&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;{{LIST_OF_PRIMARY_PILLARS_WITH_LINKS}}&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"what-we-dont-cover"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;What We Don't Cover&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{HONEST_DESCRIPTION_OF_TOPICS_OUTSIDE_SCOPE}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"our-process"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;How We Create Content&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;{{CONTENT_CREATION_PROCESS_DETAIL}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;{{REVIEW_PROCESS_DETAIL}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;{{FACT_CHECKING_DETAIL}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;{{IF_AI_USED_HOW}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;See our &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/editorial-policy/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;editorial policy&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; for full details.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"our-relationships"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Our Relationships and Commitments&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{INDEPENDENCE_STATEMENT}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{ANY_AFFILIATE_OR_PARTNERSHIP_CONTEXT}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;See our &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/disclosure/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;full disclosures&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"contact"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;How to Reach Us&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{CONTACT_INFO}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Editorial questions: &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"mailto:editorial@{{DOMAIN}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;editorial@{{DOMAIN}}&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.4 Phase 4: Content Removal &amp;amp; Consolidation
&lt;/h3&gt;

&lt;p&gt;Sites with significant low-quality content drag their entire site's HCS score down. HCS evaluates the site holistically — even good articles can underperform if they're surrounded by low-quality content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6.4.1 Removal candidates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Remove or noindex content that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is thin (under 500 words on a substantive topic)&lt;/li&gt;
&lt;li&gt;Has no original insight (purely aggregated/derivative)&lt;/li&gt;
&lt;li&gt;Is outdated and not refreshed&lt;/li&gt;
&lt;li&gt;Duplicates other content on the site&lt;/li&gt;
&lt;li&gt;Was published as an SEO experiment without genuine expertise&lt;/li&gt;
&lt;li&gt;Has consistently low engagement metrics&lt;/li&gt;
&lt;li&gt;Is no longer aligned with the site's topical focus&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6.4.2 Consolidation candidates&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Consolidate content where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple articles cover overlapping ground&lt;/li&gt;
&lt;li&gt;A series of thin articles could become one comprehensive piece&lt;/li&gt;
&lt;li&gt;Old articles are still relevant but need merging with newer ones&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6.4.3 Consolidation pattern&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When merging multiple articles into one comprehensive piece:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identify the strongest URL to keep (best-ranked, oldest authoritative URL, or cleanest URL structure)&lt;/li&gt;
&lt;li&gt;Merge content from the others into the kept URL&lt;/li&gt;
&lt;li&gt;Improve the merged article significantly — don't just stitch text together&lt;/li&gt;
&lt;li&gt;301 redirect the consolidated URLs to the kept URL&lt;/li&gt;
&lt;li&gt;Update internal links to point to the kept URL&lt;/li&gt;
&lt;li&gt;Re-submit sitemap&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  6.5 Phase 5: AI Content Disclosure &amp;amp; Strategy
&lt;/h3&gt;

&lt;p&gt;If AI is used in content creation, HCS requires more than just disclosure. Google's December 2025 guidance specifically asks "Why" content was created — using AI for bulk publication is a "Why" failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6.5.1 What's acceptable AI use under HCS&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI for research assistance (gathering information for human writer)&lt;/li&gt;
&lt;li&gt;AI for first-draft generation followed by extensive human revision&lt;/li&gt;
&lt;li&gt;AI for grammar and style editing&lt;/li&gt;
&lt;li&gt;AI for summarizing the writer's own notes&lt;/li&gt;
&lt;li&gt;AI for outline generation that the writer fills in with original content&lt;/li&gt;
&lt;li&gt;AI in content the writer reviews and takes professional responsibility for&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6.5.2 What's not acceptable&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI generating articles that get published with minimal review&lt;/li&gt;
&lt;li&gt;AI generating articles on topics the publishing entity has no genuine expertise in&lt;/li&gt;
&lt;li&gt;AI content masquerading as written by a specific human author&lt;/li&gt;
&lt;li&gt;AI churning out articles to hit publication volume goals&lt;/li&gt;
&lt;li&gt;AI generating fake quotes, fake statistics, or fake experiences&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6.5.3 AI disclosure on every AI-assisted article&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ai-content-disclosure"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;About this article&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{SPECIFIC_DESCRIPTION_OF_HOW_AI_WAS_USED}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This article was reviewed and edited by {{REVIEWER_NAME}}, {{CREDENTIALS}}.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{REVIEWER_NAME}} verified all factual claims, citations, and recommendations. They take professional responsibility for the accuracy of this content.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;See our &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/disclosure/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;full AI use policy&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.6 Phase 6: Refresh Strategy (Not Date Manipulation)
&lt;/h3&gt;

&lt;p&gt;HCS specifically warns against "changing the date of pages to make them seem fresh when the content has not substantially changed."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6.6.1 Genuine refresh process&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When refreshing an article:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read the article from the user's perspective — what's no longer accurate?&lt;/li&gt;
&lt;li&gt;Update outdated information with current data&lt;/li&gt;
&lt;li&gt;Add new sections covering developments since the last update&lt;/li&gt;
&lt;li&gt;Remove sections that are no longer relevant&lt;/li&gt;
&lt;li&gt;Update statistics, examples, screenshots&lt;/li&gt;
&lt;li&gt;Verify all citations still work&lt;/li&gt;
&lt;li&gt;Get reviewer sign-off if YMYL&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then update &lt;code&gt;dateModified&lt;/code&gt; and add a changelog entry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6.6.2 Article changelog&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For substantive refreshes, document what changed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;details&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"article-changelog"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;Last updated {{UPDATED_DATE}} — see what changed&lt;span class="nt"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{UPDATE_1_DATE}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{UPDATE_1_DATE_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;: {{WHAT_CHANGED}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{UPDATE_2_DATE}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{UPDATE_2_DATE_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;: {{WHAT_CHANGED}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{UPDATE_3_DATE}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{UPDATE_3_DATE_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;: {{WHAT_CHANGED}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/details&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This proves the refresh was substantive, not just a date change.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Per-Article HCS Audit Criteria
&lt;/h2&gt;

&lt;p&gt;Score each article:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;H1&lt;/td&gt;
&lt;td&gt;Article addresses a genuine user need (not just a keyword)&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H2&lt;/td&gt;
&lt;td&gt;Title and meta accurately describe the content&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H3&lt;/td&gt;
&lt;td&gt;Content delivers on what the title promises&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H4&lt;/td&gt;
&lt;td&gt;Author has demonstrable expertise on this specific topic&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H5&lt;/td&gt;
&lt;td&gt;Article adds original value beyond what's in top SERP results&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H6&lt;/td&gt;
&lt;td&gt;First-person experience or original research demonstrated&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H7&lt;/td&gt;
&lt;td&gt;No padding to hit word count&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H8&lt;/td&gt;
&lt;td&gt;No unnecessary fluff intro or trailing filler&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H9&lt;/td&gt;
&lt;td&gt;Original imagery (not just stock)&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H10&lt;/td&gt;
&lt;td&gt;Comprehensive coverage if claimed&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H11&lt;/td&gt;
&lt;td&gt;Honest about what's not covered&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H12&lt;/td&gt;
&lt;td&gt;If AI was used, transparently disclosed and reviewed&lt;/td&gt;
&lt;td&gt;Critical (if applicable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H13&lt;/td&gt;
&lt;td&gt;Last refresh was substantive (if claimed as updated)&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H14&lt;/td&gt;
&lt;td&gt;Content is well-organized and scannable&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H15&lt;/td&gt;
&lt;td&gt;Page experience is good (load speed, no intrusive ads)&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 30 max. World-class HCS article: 26+/30 with zero Critical fails.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Site-Wide HCS Audit Criteria
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;HS1&lt;/td&gt;
&lt;td&gt;Site has clear topical focus (3-7 pillars, not unlimited topics)&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HS2&lt;/td&gt;
&lt;td&gt;About page explains the site's purpose, audience, and creators&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HS3&lt;/td&gt;
&lt;td&gt;Topical hub pages exist for each primary pillar&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HS4&lt;/td&gt;
&lt;td&gt;Editorial policy documented&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HS5&lt;/td&gt;
&lt;td&gt;All authors have credentials matching topics they cover&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HS6&lt;/td&gt;
&lt;td&gt;No thin content or doorway pages&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HS7&lt;/td&gt;
&lt;td&gt;No content that exists only because keyword has volume&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HS8&lt;/td&gt;
&lt;td&gt;AI use is disclosed where applicable&lt;/td&gt;
&lt;td&gt;Critical (if applicable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HS9&lt;/td&gt;
&lt;td&gt;Refresh strategy is genuine, not date manipulation&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HS10&lt;/td&gt;
&lt;td&gt;Outdated content is refreshed or retired&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HS11&lt;/td&gt;
&lt;td&gt;No mass-produced content patterns&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HS12&lt;/td&gt;
&lt;td&gt;Site doesn't make promises content doesn't deliver&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 24 max. World-class HCS site: 21+/24 with zero Critical fails.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Common HCS Mistakes &amp;amp; Anti-Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  9.1 Keyword-First Content Strategy
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Selecting topics based on keyword volume regardless of whether the site has genuine expertise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Google's HCS specifically targets this pattern. Even well-written articles on topics outside the site's authority struggle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Topic selection must start with "what does our audience genuinely need?" not "what has high search volume?"&lt;/p&gt;

&lt;h3&gt;
  
  
  9.2 AI Content Volume Strategy
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: "We can publish 100 articles per month with AI." Mass-produced AI content with minimal review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: December 2025 core update specifically targeted this. Sites with this pattern lost significant traffic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Either dramatically slow publication and improve review quality, or remove the AI content. Quality &amp;gt; quantity.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.3 "Comprehensive Guide" Without Depth
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Title says "complete guide" but article is 1500 words of basics.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Title-content mismatch is a Trust violation and HCS failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Either deliver actual comprehensive coverage (often 3000-8000+ words for genuinely comprehensive guides) or change the title.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.4 Forced Word Count
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: "Articles need to be 2000 words to rank." Padded content to hit a number.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: HCS specifically warns about this. Padded content is detectable and fails the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Length matches content needs. A 600-word article that perfectly answers the question outranks a padded 2000-word article.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.5 Trending Topics Without Genuine Coverage
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Site that normally covers cooking suddenly publishes articles about cryptocurrency because crypto is trending.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: HCS asks "Are you writing about things simply because they seem trending?" Yes is a failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Stay in your lane. Cover what you genuinely know.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.6 Date Refresh Without Content Refresh
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Updating &lt;code&gt;dateModified&lt;/code&gt; without substantively updating content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Google detects this pattern. It's a Trust violation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Update dates only when content was genuinely updated. Document what changed.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.7 Generic AI Boilerplate
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: AI-generated articles with telltale phrases ("It's important to note...", "Furthermore...", "In conclusion...") and no specific examples or insights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Detectable, generic, doesn't serve users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Either rewrite to remove AI boilerplate and add specific value, or remove the article.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.8 Aggregator Pages Without Original Insight
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: "The 10 best X tools" articles that just describe what each tool does without any actual evaluation, testing, or insight.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Low original value. The article doesn't add anything beyond visiting each tool's homepage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Test the tools, document the testing, share specific findings, give a recommendation based on real evaluation.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.9 Hidden Affiliate Optimization
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: "Best X for Y" article that's structured around which products have the best affiliate commissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: HCS detects mismatch between recommendation and user need. Long-term Trust damage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Recommendations based on actual user benefit. Disclose affiliates clearly.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.10 Content Without a Real Person
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: "Editorial Team" or no byline at all on substantive content. Generic about pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: HCS asks who created the content. Anonymous content is suspect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Real author bylines. Real about pages.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Stack-Specific HCS Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  10.1 WordPress
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use Yoast or Rank Math to enforce title-meta-content alignment&lt;/li&gt;
&lt;li&gt;Build content review workflow into Editorial Calendar&lt;/li&gt;
&lt;li&gt;Custom fields per article: "What this article adds," "Author's experience with this topic"&lt;/li&gt;
&lt;li&gt;Plugin to detect duplicate content and consolidation candidates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.2 Next.js / Astro / Hugo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Type-safe content frontmatter requiring HCS metadata&lt;/li&gt;
&lt;li&gt;Pre-publish CI/CD check that requires HCS markers (author, original value, etc.)&lt;/li&gt;
&lt;li&gt;Build script generates topical hub pages from article frontmatter&lt;/li&gt;
&lt;li&gt;Static analysis of content for AI boilerplate patterns&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.3 Universal Pattern
&lt;/h3&gt;

&lt;p&gt;The HCS workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Topic selection: passes "is this in our authority area?" test&lt;/li&gt;
&lt;li&gt;Drafting: passes "what does this add?" test&lt;/li&gt;
&lt;li&gt;Reviewing: passes "would a reader feel this was worth their time?" test&lt;/li&gt;
&lt;li&gt;Publishing: HCS markers all present&lt;/li&gt;
&lt;li&gt;Monitoring: track engagement metrics; revise or retire underperforming content&lt;/li&gt;
&lt;li&gt;Refreshing: substantive updates only; document changes&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  11. Validation Protocol
&lt;/h2&gt;

&lt;h3&gt;
  
  
  11.1 Per-Article Validation
&lt;/h3&gt;

&lt;p&gt;Sample 10% of articles. For each:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read it as if you found it in search results&lt;/li&gt;
&lt;li&gt;Apply Google's self-assessment questions (Section 4.1)&lt;/li&gt;
&lt;li&gt;Score Pass/Partial/Fail per HCS criterion (Section 7)&lt;/li&gt;
&lt;li&gt;Document findings&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  11.2 Site-Wide Validation
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Audit topical focus — do articles cluster around clear pillars?&lt;/li&gt;
&lt;li&gt;Inventory content quality — what percentage is high-quality vs thin/derivative?&lt;/li&gt;
&lt;li&gt;Check for HCS-failing patterns (Section 9)&lt;/li&gt;
&lt;li&gt;Evaluate About page against Section 6.3 requirements&lt;/li&gt;
&lt;li&gt;Score against Section 8 criteria&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  11.3 Honesty Test
&lt;/h3&gt;

&lt;p&gt;The hardest HCS validation: ask someone outside the site (a peer, a target audience member, an industry colleague) to read sample articles and answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Did this article help you?"&lt;/li&gt;
&lt;li&gt;"Did you trust the source?"&lt;/li&gt;
&lt;li&gt;"Would you bookmark or share this?"&lt;/li&gt;
&lt;li&gt;"Would you come back to this site?"&lt;/li&gt;
&lt;li&gt;"Could you tell if this was AI-written or written by a real expert?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;External honest feedback is the most reliable HCS signal.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Audit Mode
&lt;/h2&gt;

&lt;p&gt;Total HCS audit: 54 points (30 per-article average + 24 site-wide).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;48-54&lt;/td&gt;
&lt;td&gt;World-class HCS compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;41-47&lt;/td&gt;
&lt;td&gt;Compliant with minor gaps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30-40&lt;/td&gt;
&lt;td&gt;Significant gaps requiring remediation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;30&lt;/td&gt;
&lt;td&gt;Critical HCS failures — major content overhaul needed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A site with critical HCS fails (HS1, HS5, HS6, HS7, HS11, HS12) is at significant risk for ranking suppression in core updates regardless of E-E-A-T or technical SEO strength.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Maintenance Schedule
&lt;/h2&gt;

&lt;h3&gt;
  
  
  13.1 Weekly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check newly published content for HCS markers&lt;/li&gt;
&lt;li&gt;Review one piece of older content for refresh or retirement&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.2 Monthly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Audit recent publications against HCS criteria&lt;/li&gt;
&lt;li&gt;Track engagement metrics to identify decay candidates&lt;/li&gt;
&lt;li&gt;Review and update one topical hub page&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.3 Quarterly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Site-wide HCS audit&lt;/li&gt;
&lt;li&gt;Review topical pillar definitions — still accurate?&lt;/li&gt;
&lt;li&gt;Inventory removal/consolidation candidates&lt;/li&gt;
&lt;li&gt;Update About page if business or focus has shifted&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.4 Annually
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive content inventory and quality scoring&lt;/li&gt;
&lt;li&gt;Reduce content footprint if quality issues exist&lt;/li&gt;
&lt;li&gt;Strategic review: are we publishing for users or for search?&lt;/li&gt;
&lt;li&gt;Update editorial policy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.5 Post-Core-Update
&lt;/h3&gt;

&lt;p&gt;After every confirmed Google core update (typically 3-4 per year):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identify pages that lost ranking&lt;/li&gt;
&lt;li&gt;Apply HCS criteria to those pages&lt;/li&gt;
&lt;li&gt;Look for patterns — what failed?&lt;/li&gt;
&lt;li&gt;Remediate per HCS framework&lt;/li&gt;
&lt;li&gt;Track recovery over 30-60 days&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  14. Implementation/Audit Report Templates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  14.1 HCS Implementation Report Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# HCS Framework Implementation Report&lt;/span&gt;

&lt;span class="gs"&gt;**Project**&lt;/span&gt;: {{BUSINESS_NAME}}
&lt;span class="gs"&gt;**Implementation Date**&lt;/span&gt;: {{TODAY}}

&lt;span class="gu"&gt;## Summary&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Total content audited: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; Content kept (high quality): {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; Content refreshed substantively: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; Content consolidated: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; Content removed: {{COUNT}}

&lt;span class="gu"&gt;## Topical Pillars Defined&lt;/span&gt;
{{LIST_OF_PILLARS}}

&lt;span class="gu"&gt;## Hub Pages Created&lt;/span&gt;
{{LIST_OF_HUB_URLS}}

&lt;span class="gu"&gt;## About Page Updated&lt;/span&gt;
{{STATUS_AND_KEY_ADDITIONS}}

&lt;span class="gu"&gt;## AI Use Policy&lt;/span&gt;
{{POLICY_STATUS}}

&lt;span class="gu"&gt;## HCS Markers Installed Per Article Type&lt;/span&gt;
{{TABLE}}

&lt;span class="gu"&gt;## Items Flagged for Manual Review&lt;/span&gt;
{{LIST}}

&lt;span class="gu"&gt;## Validation Results&lt;/span&gt;
{{AUTOMATED_AND_MANUAL_RESULTS}}

&lt;span class="gu"&gt;## Sign-Off&lt;/span&gt;
Implementation complete: {{DATE}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  14.2 HCS Audit Report Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# HCS Framework Audit Report&lt;/span&gt;

&lt;span class="gs"&gt;**Site**&lt;/span&gt;: {{BUSINESS_NAME}}
&lt;span class="gs"&gt;**Audit Date**&lt;/span&gt;: {{TODAY}}

&lt;span class="gu"&gt;## Executive Summary&lt;/span&gt;
{{ONE_PARAGRAPH_ASSESSMENT}}

&lt;span class="gs"&gt;**Overall Score**&lt;/span&gt;: {{X}}/54
&lt;span class="gs"&gt;**Status**&lt;/span&gt;: {{STATUS}}

&lt;span class="gu"&gt;## Topical Focus Assessment&lt;/span&gt;
{{FINDINGS}}

&lt;span class="gu"&gt;## Content Quality Distribution&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; High-quality content: {{PERCENTAGE}}%
&lt;span class="p"&gt;-&lt;/span&gt; Acceptable content: {{PERCENTAGE}}%
&lt;span class="p"&gt;-&lt;/span&gt; Thin/derivative content: {{PERCENTAGE}}%

&lt;span class="gu"&gt;## Critical HCS Failures&lt;/span&gt;
{{LIST_WITH_REMEDIATION}}

&lt;span class="gu"&gt;## Per-Article Findings (Sample of 10%)&lt;/span&gt;
{{DETAILED_FINDINGS}}

&lt;span class="gu"&gt;## Site-Wide Findings&lt;/span&gt;
{{DETAILED_FINDINGS}}

&lt;span class="gu"&gt;## Recommended Remediation Order&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; Critical: {{PRIORITY_1}}
&lt;span class="p"&gt;2.&lt;/span&gt; High: {{PRIORITY_2}}
&lt;span class="p"&gt;3.&lt;/span&gt; Medium: {{PRIORITY_3}}

&lt;span class="gu"&gt;## Estimated Remediation Effort&lt;/span&gt;
{{HOURS}}

&lt;span class="gu"&gt;## Sign-Off&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  End of Framework Document
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Document version&lt;/strong&gt;: 1.0&lt;br&gt;
&lt;strong&gt;Last updated&lt;/strong&gt;: 2026-04-29&lt;br&gt;
&lt;strong&gt;Maintained by&lt;/strong&gt;: ThatDeveloperGuy&lt;/p&gt;

&lt;p&gt;HCS is the evaluation framework for content quality — but more importantly, it's an honest mirror for content strategy. Sites that genuinely serve their audience pass HCS naturally. Sites that prioritize search rankings over user value fail HCS regardless of how clever the SEO is. The fastest path to HCS compliance is the hardest one: be honest about why content exists, who it's for, and whether it's genuinely useful.&lt;/p&gt;

&lt;p&gt;Companion documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;framework-eeat.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-ymyl.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-sqrg.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-coreupdates.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-infogain.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-entitysalience.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-knowledgegraph.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-aicitations.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  About this framework library
&lt;/h2&gt;

&lt;p&gt;This article is the Dev.to republish of a framework reference document from ThatDevPro's SEO + AI engineering library. &lt;strong&gt;Canonical source: &lt;a href="https://www.thatdevpro.com/insights/framework-hcs/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-hcs/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio operating from Cassville, Missouri. The studio runs the full &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;14-tier Engine Optimization&lt;/a&gt; stack and ships open-source tooling for AI citation engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Companion 14-tier Engine Optimization stack&lt;/strong&gt; (each tier is its own article):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-1-foundation/" rel="noopener noreferrer"&gt;Tier 1 — Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-2-search-visibility/" rel="noopener noreferrer"&gt;Tier 2 — Search Visibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-3-ai-domination/" rel="noopener noreferrer"&gt;Tier 3 — AI Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-4-entity-and-authority/" rel="noopener noreferrer"&gt;Tier 4 — Entity and Authority&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-5-local-domination/" rel="noopener noreferrer"&gt;Tier 5 — Local Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-6-content-and-multimedia/" rel="noopener noreferrer"&gt;Tier 6 — Content and Multimedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-7-social-and-community/" rel="noopener noreferrer"&gt;Tier 7 — Social and Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-8-data-analytics-conversion/" rel="noopener noreferrer"&gt;Tier 8 — Data, Analytics, Conversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-9-monitoring-and-intelligence/" rel="noopener noreferrer"&gt;Tier 9 — Monitoring and Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-10-workflow-and-operations/" rel="noopener noreferrer"&gt;Tier 10 — Workflow and Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-11-marketplace-and-retail/" rel="noopener noreferrer"&gt;Tier 11 — Marketplace and Retail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-12-international/" rel="noopener noreferrer"&gt;Tier 12 — International&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-14-advanced-and-immersive/" rel="noopener noreferrer"&gt;Tier 14 — Advanced and Immersive&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Need this framework implemented on your site? &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;See the Engine Optimization service&lt;/a&gt; or hire through &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;ThatDevPro contact&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>googleseo</category>
      <category>hcs</category>
      <category>content</category>
    </item>
    <item>
      <title>YMYL: when Google holds you to higher standards</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 01:03:53 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/ymyl-when-google-holds-you-to-higher-standards-17k7</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/ymyl-when-google-holds-you-to-higher-standards-17k7</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-ymyl/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. &lt;a href="https://www.thatdevpro.com" rel="noopener noreferrer"&gt;ThatDevPro&lt;/a&gt; is an SDVOSB-certified veteran-owned web + AI engineering studio. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Your Money or Your Life — Content Sensitivity Classification &amp;amp; High-Stakes Quality Standards&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive installation and audit reference for identifying YMYL content on a website, applying the elevated quality standards Google requires for it, and protecting both users and the business from the legal, regulatory, and ranking consequences of YMYL violations. This document is dual-purpose: installation manual and audit document.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cross-stack implementation note&lt;/strong&gt;: the code samples in this framework are written in plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents of every pattern below, see &lt;a href="//framework-cross-stack-implementation.md"&gt;&lt;code&gt;framework-cross-stack-implementation.md&lt;/code&gt;&lt;/a&gt;. For pure client-rendered SPAs (no SSR/SSG) see &lt;a href="//framework-react.md"&gt;&lt;code&gt;framework-react.md&lt;/code&gt;&lt;/a&gt;. For Tailwind-specific concerns (purge, dynamic classes, dark-mode CLS, focus accessibility) see &lt;a href="//framework-tailwind.md"&gt;&lt;code&gt;framework-tailwind.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Document Purpose &amp;amp; How to Use This Document
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 What This Document Is
&lt;/h3&gt;

&lt;p&gt;This is the canonical reference for classifying website content under Google's YMYL framework and implementing the elevated quality standards YMYL content requires. Every category Google considers YMYL is documented here. Every signal Google's Search Quality Raters look for in YMYL content is specified. Every code block, schema, and structural requirement needed to meet the YMYL bar is included.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Three Operating Modes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mode A — Install Mode&lt;/strong&gt;: Building YMYL-compliant infrastructure into a new or existing site. Follow Sections 2 → 17 in order.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode B — Audit Mode&lt;/strong&gt;: Evaluating an existing site for YMYL classification and compliance. Skip to Section 12.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode C — Hybrid Mode&lt;/strong&gt;: Audit then install for failing items.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3 How Claude Code CLI Should Consume This Document
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read Section 2&lt;/strong&gt; — collect all client variables, especially YMYL category determinations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run Section 3&lt;/strong&gt; — apply the YMYL classification decision tree to determine site or per-page YMYL status&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detect existing state&lt;/strong&gt; — check what YMYL trust elements already exist&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Follow phases in order&lt;/strong&gt; — site-wide foundations before per-content-type elements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validate after each phase&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate the report&lt;/strong&gt; — Section 17&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1.4 Conflict Resolution Rules
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Conflict&lt;/th&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Existing medical/legal/financial disclaimer&lt;/td&gt;
&lt;td&gt;Audit for completeness. Add missing elements. Do not remove existing disclaimer language without legal review.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing reviewer credit&lt;/td&gt;
&lt;td&gt;Verify reviewer credentials. Update only if reviewer has changed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing editorial policy page&lt;/td&gt;
&lt;td&gt;Audit against Section 5.2.9 requirements. Add missing elements. Preserve customizations.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing corrections process&lt;/td&gt;
&lt;td&gt;Verify it matches the policy page. Document any inconsistencies for manual review.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing content classified differently than this framework recommends&lt;/td&gt;
&lt;td&gt;Flag for manual review with the legal/compliance owner. Do not reclassify automatically.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1.5 Required Tools &amp;amp; Validators
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Whitespark / BrightLocal / Moz Local&lt;/strong&gt; — for citation consistency audit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PubMed&lt;/strong&gt; — for primary medical literature citations (health YMYL)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEC EDGAR&lt;/strong&gt; — for primary financial source citations (finance YMYL)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Westlaw / LexisNexis / CourtListener&lt;/strong&gt; — for primary legal sources (legal YMYL)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FTC.gov&lt;/strong&gt; — for compliance reference on advertising/affiliate disclosures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State Attorney General sites&lt;/strong&gt; — for state-specific privacy and consumer protection law&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Originality.ai&lt;/strong&gt; — for AI content detection (Trust signal validation)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Client Variables Intake
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================&lt;/span&gt;
&lt;span class="c1"&gt;# YMYL FRAMEWORK CLIENT VARIABLES&lt;/span&gt;
&lt;span class="c1"&gt;# ============================================&lt;/span&gt;

&lt;span class="c1"&gt;# --- Business Classification (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;business_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;primary_domain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_industry&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;state_of_operation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;               &lt;span class="c1"&gt;# Primary state — affects regulatory framework&lt;/span&gt;
&lt;span class="na"&gt;states_served&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;                    &lt;span class="c1"&gt;# All states where the business operates&lt;/span&gt;

&lt;span class="c1"&gt;# --- YMYL Classification (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;ymyl_overall_classification&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;      &lt;span class="c1"&gt;# "full_ymyl", "partial_ymyl", "lite_ymyl", "non_ymyl"&lt;/span&gt;
&lt;span class="na"&gt;ymyl_categories&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;                  &lt;span class="c1"&gt;# Categories applicable to this site:&lt;/span&gt;
                                     &lt;span class="c1"&gt;# "health_medical", "mental_health", "fitness_nutrition",&lt;/span&gt;
                                     &lt;span class="c1"&gt;# "financial_advice", "investing", "tax", "banking", "insurance",&lt;/span&gt;
                                     &lt;span class="c1"&gt;# "legal_advice", "civic_government", "elections",&lt;/span&gt;
                                     &lt;span class="c1"&gt;# "safety_personal", "safety_occupational",&lt;/span&gt;
                                     &lt;span class="c1"&gt;# "major_life_decisions", "news_current_events",&lt;/span&gt;
                                     &lt;span class="c1"&gt;# "shopping_ecommerce"&lt;/span&gt;

&lt;span class="c1"&gt;# --- Content Inventory (REQUIRED for audit) ---&lt;/span&gt;
&lt;span class="na"&gt;total_content_pieces&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;ymyl_content_pieces&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;ymyl_content_percentage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.0&lt;/span&gt;
&lt;span class="na"&gt;ymyl_content_types&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;               &lt;span class="c1"&gt;# "articles", "calculators", "tools", "directories", etc.&lt;/span&gt;

&lt;span class="c1"&gt;# --- Author/Reviewer Credentials (REQUIRED for full YMYL) ---&lt;/span&gt;
&lt;span class="na"&gt;primary_authors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;                  &lt;span class="c1"&gt;# Required: degrees, licenses, board certifications&lt;/span&gt;
    &lt;span class="na"&gt;license_number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;               &lt;span class="c1"&gt;# Where applicable (medical, legal, financial)&lt;/span&gt;
    &lt;span class="na"&gt;license_state&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                &lt;span class="c1"&gt;# Where applicable&lt;/span&gt;
    &lt;span class="na"&gt;license_verification_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;     &lt;span class="c1"&gt;# Public verification link&lt;/span&gt;
    &lt;span class="na"&gt;years_practicing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
    &lt;span class="na"&gt;specialty_areas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
    &lt;span class="na"&gt;conflicts_of_interest&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;

&lt;span class="na"&gt;medical_reviewers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;                   &lt;span class="c1"&gt;# Required for health YMYL&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;                  &lt;span class="c1"&gt;# MD, RN, NP, DO, PhD, etc.&lt;/span&gt;
    &lt;span class="na"&gt;license_number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;license_state&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;npi_number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                   &lt;span class="c1"&gt;# National Provider Identifier&lt;/span&gt;
    &lt;span class="na"&gt;specialty&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;affiliations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;                 &lt;span class="c1"&gt;# Hospital systems, academic institutions&lt;/span&gt;

&lt;span class="na"&gt;legal_reviewers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;                     &lt;span class="c1"&gt;# Required for legal YMYL&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;bar_admission&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;                &lt;span class="c1"&gt;# State(s) where admitted&lt;/span&gt;
    &lt;span class="na"&gt;bar_number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;practice_areas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
    &lt;span class="na"&gt;firm_affiliation&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;

&lt;span class="na"&gt;financial_reviewers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;                 &lt;span class="c1"&gt;# Required for finance YMYL&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;credentials&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;                  &lt;span class="c1"&gt;# CFP, CFA, CPA, ChFC, RIA registration&lt;/span&gt;
    &lt;span class="na"&gt;sec_registration&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;             &lt;span class="c1"&gt;# If applicable&lt;/span&gt;
    &lt;span class="na"&gt;finra_crd&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                    &lt;span class="c1"&gt;# If applicable&lt;/span&gt;
    &lt;span class="na"&gt;state_registrations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
    &lt;span class="na"&gt;specialty&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# --- Compliance Posture (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;hipaa_applicable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;              &lt;span class="c1"&gt;# Health entities subject to HIPAA&lt;/span&gt;
&lt;span class="na"&gt;ferpa_applicable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;              &lt;span class="c1"&gt;# Educational records&lt;/span&gt;
&lt;span class="na"&gt;glba_applicable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;               &lt;span class="c1"&gt;# Financial services&lt;/span&gt;
&lt;span class="na"&gt;sox_applicable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;                &lt;span class="c1"&gt;# Public companies&lt;/span&gt;
&lt;span class="na"&gt;fcra_applicable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;               &lt;span class="c1"&gt;# Consumer reporting&lt;/span&gt;
&lt;span class="na"&gt;finra_member&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;                  &lt;span class="c1"&gt;# Securities-related&lt;/span&gt;
&lt;span class="na"&gt;sec_registered&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;                &lt;span class="c1"&gt;# Investment advisor&lt;/span&gt;
&lt;span class="na"&gt;state_insurance_licensed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;         &lt;span class="c1"&gt;# States with insurance license&lt;/span&gt;
&lt;span class="na"&gt;attorney_advertising_compliant&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="c1"&gt;# If legal services&lt;/span&gt;

&lt;span class="c1"&gt;# --- Editorial Process (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_editorial_policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_corrections_policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_fact_checking_process&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;fact_checking_methodology&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;        &lt;span class="c1"&gt;# Brief description&lt;/span&gt;
&lt;span class="na"&gt;review_cadence&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                   &lt;span class="c1"&gt;# "monthly", "quarterly", "biannually", "annually"&lt;/span&gt;
&lt;span class="na"&gt;content_source_standards&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;         &lt;span class="c1"&gt;# "primary_only", "primary_plus_secondary", etc.&lt;/span&gt;

&lt;span class="c1"&gt;# --- Disclosures (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_medical_disclaimer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_financial_disclaimer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_legal_disclaimer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_general_advice_disclaimer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_advertising_disclosure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_affiliate_disclosure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_sponsored_content_disclosure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_ai_use_disclosure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_conflict_of_interest_disclosure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_results_may_vary_disclaimer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# For testimonials/case studies&lt;/span&gt;

&lt;span class="c1"&gt;# --- AI Use in YMYL Content (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;uses_ai_in_ymyl_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;ai_review_protocol_for_ymyl&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;      &lt;span class="c1"&gt;# If true: must describe stricter review for YMYL specifically&lt;/span&gt;

&lt;span class="c1"&gt;# --- Existing Compliance Documentation ---&lt;/span&gt;
&lt;span class="na"&gt;last_legal_review_date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;legal_counsel_firm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;last_compliance_audit_date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;known_compliance_gaps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After variables are gathered, save them as &lt;code&gt;ymyl-variables.yml&lt;/code&gt; in the project root.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. What YMYL Is
&lt;/h2&gt;

&lt;p&gt;YMYL stands for &lt;strong&gt;Your Money or Your Life&lt;/strong&gt; — Google's classification for content categories where inaccurate, misleading, or low-quality information can cause real-world harm to users' health, financial stability, safety, or wellbeing. The term originated in Google's Search Quality Rater Guidelines and refers to topics where Google holds content to dramatically higher quality standards than non-YMYL topics.&lt;/p&gt;

&lt;p&gt;YMYL is not a separate ranking factor. It's a &lt;strong&gt;quality multiplier&lt;/strong&gt; — a classification that tells Google's algorithms and human raters to apply elevated E-E-A-T standards to the content. A non-YMYL article scoring 80% on E-E-A-T audit might rank well; a YMYL article at 80% will likely struggle. The bar is meaningfully higher because the consequences of bad YMYL content are meaningfully more severe.&lt;/p&gt;

&lt;p&gt;The September 2025 Search Quality Rater Guidelines update significantly expanded the YMYL category to explicitly include &lt;strong&gt;elections, civic institutions, and government information&lt;/strong&gt; alongside the historical categories of health, finance, legal, and safety. This expansion reflects Google's growing concern about misinformation on high-stakes civic topics. Sites covering these topics now face the same elevated quality bar as health and finance sites.&lt;/p&gt;

&lt;p&gt;YMYL applies at the &lt;strong&gt;page level&lt;/strong&gt;, not the site level. A general-purpose blog might publish one YMYL article among many non-YMYL ones — that single article must meet YMYL standards. A site that's primarily YMYL (a medical site, a financial advisory site, a legal directory) must meet YMYL standards across nearly every page.&lt;/p&gt;

&lt;p&gt;The four core consequences of getting YMYL wrong:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ranking suppression&lt;/strong&gt; — Google de-prioritizes YMYL content that doesn't meet the bar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI engine de-citation&lt;/strong&gt; — ChatGPT, Perplexity, Claude, Gemini avoid citing untrusted YMYL sources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulatory action&lt;/strong&gt; — FTC, state AGs, professional licensing boards, and securities regulators have enforcement authority&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Civil liability&lt;/strong&gt; — Bad medical/legal/financial advice that causes harm creates legal exposure&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This framework specifies how to identify YMYL content, what elevated standards apply, and how to install the trust infrastructure required.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The YMYL Classification Decision Tree
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4.1 Primary YMYL Categories
&lt;/h3&gt;

&lt;p&gt;Use this tree to classify each piece of content. If any branch returns YMYL, the content is YMYL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Does the content cover any of the following?

├── Health &amp;amp; Medical
│   ├── Diagnosis or treatment of medical conditions → YMYL (health, full)
│   ├── Medication information, dosing, side effects → YMYL (health, full)
│   ├── Mental health advice or crisis information → YMYL (mental health, full)
│   ├── Nutrition advice with health claims → YMYL (health, partial)
│   ├── Fitness routines with injury risk → YMYL (health, partial)
│   ├── Supplements with medical claims → YMYL (health, full)
│   ├── Pregnancy, parenting infant care → YMYL (health, full)
│   ├── Veterinary medical advice → YMYL (health, partial)
│   └── General wellness lifestyle content → Non-YMYL (be cautious)
│
├── Financial
│   ├── Specific investment recommendations → YMYL (finance, full)
│   ├── Tax advice or strategy → YMYL (finance, full)
│   ├── Retirement planning advice → YMYL (finance, full)
│   ├── Loan/mortgage/credit advice → YMYL (finance, full)
│   ├── Insurance advice or comparisons → YMYL (finance, full)
│   ├── Cryptocurrency advice → YMYL (finance, full)
│   ├── General financial education → YMYL (finance, partial)
│   ├── Personal finance budgeting tips → YMYL (finance, partial)
│   └── Reviews of financial products → YMYL (finance, partial)
│
├── Legal
│   ├── Specific legal advice for situations → YMYL (legal, full)
│   ├── Court procedures and rights → YMYL (legal, full)
│   ├── Immigration guidance → YMYL (legal, full)
│   ├── Family law (divorce, custody) → YMYL (legal, full)
│   ├── Criminal law information → YMYL (legal, full)
│   ├── Estate planning/wills → YMYL (legal, full)
│   ├── Business legal information → YMYL (legal, partial)
│   ├── Legal directory listings → YMYL (legal, partial)
│   └── General "what is X law" reference → YMYL (legal, partial)
│
├── Civic &amp;amp; Government (expanded September 2025)
│   ├── Election information, voter rights → YMYL (civic, full)
│   ├── Government services and benefits → YMYL (civic, full)
│   ├── Public health information → YMYL (civic + health, full)
│   ├── Civic institutional information → YMYL (civic, full)
│   ├── Tax filing and government forms → YMYL (civic + finance, full)
│   └── Political opinion content → Non-YMYL (but information integrity matters)
│
├── Safety
│   ├── Personal safety (assault, abuse) → YMYL (safety, full)
│   ├── Occupational safety → YMYL (safety, full)
│   ├── Driving and vehicle safety → YMYL (safety, partial)
│   ├── Home safety (electrical, gas, structural) → YMYL (safety, partial)
│   ├── Drug/substance information → YMYL (safety + health, full)
│   ├── Outdoor/wilderness safety → YMYL (safety, partial)
│   └── Child safety → YMYL (safety, full)
│
├── Major Life Decisions
│   ├── Career changes and education → YMYL (significant)
│   ├── Relationship and divorce decisions → YMYL (significant)
│   ├── Major purchases (home, car) → YMYL (significant + finance)
│   ├── Adoption or fertility → YMYL (significant + health)
│   └── End-of-life planning → YMYL (significant + legal)
│
├── News &amp;amp; Current Events
│   ├── Breaking news with safety implications → YMYL (news, full)
│   ├── Investigative journalism → YMYL (news, full)
│   ├── Public health announcements → YMYL (news + health, full)
│   ├── Election coverage → YMYL (news + civic, full)
│   └── Entertainment news → Non-YMYL
│
└── E-Commerce
    ├── Health products, supplements → YMYL (lite + health-adjacent)
    ├── Financial products, insurance → YMYL (lite + finance-adjacent)
    ├── Safety equipment → YMYL (lite + safety-adjacent)
    ├── Children's products → YMYL (lite + safety-adjacent)
    └── General consumer goods → Non-YMYL (held to higher standards but not full YMYL)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 Classification Levels Explained
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Full YMYL&lt;/strong&gt; — Maximum elevated standards apply. Author credentials must match topic regulatory requirements. Reviewer credit on every article. Primary literature citations only. Editorial and corrections policies required. Topic-specific disclaimers on every article. Monthly refresh cadence for time-sensitive content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Partial YMYL&lt;/strong&gt; — Elevated standards apply but with some flexibility. Credentialed author or reviewer required. Primary or high-quality secondary sources acceptable. Disclaimers required. Quarterly refresh cadence acceptable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lite YMYL&lt;/strong&gt; — Higher than non-YMYL but lower than full YMYL. Credentialed author preferred but not strictly required for non-advice content. Standard review process. General disclaimers. Quarterly refresh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Non-YMYL&lt;/strong&gt; — Standard E-E-A-T rules apply (see &lt;code&gt;framework-eeat.md&lt;/code&gt;).&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3 Edge Cases &amp;amp; Judgment Calls
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Personal experience YMYL&lt;/strong&gt; — "How I paid off $50k in debt" or "My experience with chemo" can be valuable YMYL content even without formal credentials. Frame as &lt;strong&gt;personal experience&lt;/strong&gt;, not authoritative advice. Use first-person language consistently. Never present personal experience as universal recommendation. Disclaimers must be especially clear that this isn't professional advice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aggregated YMYL&lt;/strong&gt; — A site that aggregates content (directory of medical providers, comparison of financial products) is YMYL even if the site doesn't author the underlying advice. Aggregation introduces YMYL responsibility — the curation itself affects user decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ambiguous content&lt;/strong&gt; — When uncertain, classify higher. The cost of treating non-YMYL content as YMYL is some extra rigor. The cost of treating YMYL content as non-YMYL is potential harm to users plus ranking suppression plus regulatory exposure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mixed-classification sites&lt;/strong&gt; — Many sites have both YMYL and non-YMYL content. Apply YMYL standards to YMYL pages only. Make YMYL content visually distinct from non-YMYL content where helpful (different page templates, clearer reviewer credits, more prominent disclaimers).&lt;/p&gt;




&lt;h2&gt;
  
  
  5. YMYL-Specific Implementation Requirements
&lt;/h2&gt;

&lt;p&gt;This section adds to the standard E-E-A-T installation. All E-E-A-T requirements still apply; YMYL content additionally requires everything in this section.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Phase 1: YMYL Inventory &amp;amp; Classification
&lt;/h3&gt;

&lt;p&gt;Before installing any YMYL trust elements, classify the site's content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.1.1 Content audit script&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For each piece of content on the site:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read the URL, page title, and primary topic&lt;/li&gt;
&lt;li&gt;Apply the decision tree from Section 4.1&lt;/li&gt;
&lt;li&gt;Record YMYL classification: full / partial / lite / non&lt;/li&gt;
&lt;li&gt;Record applicable categories (health, finance, legal, etc.)&lt;/li&gt;
&lt;li&gt;Flag any content that's currently published as authoritative advice but lacks credentialed authorship&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Create a classification spreadsheet at &lt;code&gt;/admin/ymyl-inventory.csv&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;url,title,primary_topic,ymyl_classification,categories,current_author,author_credentials,reviewer,reviewer_credentials,disclaimer_present,citations_present,last_review_date,risk_level,action_required
/articles/diabetes-medication-guide,Diabetes Medication Guide,health/medication,full_ymyl,"health_medical","Sarah Smith","none","none","none","partial","2025-04-15","critical","add_medical_reviewer_disclaimer_citations"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5.1.2 Risk-prioritized remediation queue&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sort the inventory by risk level:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Critical risk&lt;/strong&gt;: YMYL content with no credentialed author/reviewer, no disclaimer, factual claims without citations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;High risk&lt;/strong&gt;: YMYL content missing reviewer or disclaimer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medium risk&lt;/strong&gt;: YMYL content with all elements but stale (&amp;gt;12 months since review)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Low risk&lt;/strong&gt;: YMYL content fully compliant but minor enhancements possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remediate in order: Critical → High → Medium → Low. Critical-risk YMYL content should not remain published past 7 days.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Phase 2: Editorial Policy Page
&lt;/h3&gt;

&lt;p&gt;Build at &lt;code&gt;/editorial-policy/&lt;/code&gt;. This is mandatory for all YMYL sites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.2.1 Required content&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"editorial-policy"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Editorial Policy&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{BUSINESS_NAME}} is committed to publishing accurate, helpful, and well-sourced content on topics that affect our readers' {{YMYL_CATEGORIES_PROSE}}. This editorial policy describes our content creation standards, review processes, and accountability mechanisms.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Our Authors and Reviewers&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{BUSINESS_NAME}} content is created and reviewed by individuals with verifiable credentials in their subject areas:&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    {{LIST_OF_AUTHORS_WITH_CREDENTIALS}}
    {{LIST_OF_REVIEWERS_WITH_CREDENTIALS}}
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;You can verify all author and reviewer credentials on their respective &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/authors/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;author profile pages&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Content Creation Process&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ol&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Topic selection:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; {{TOPIC_SELECTION_PROCESS}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Research:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; {{RESEARCH_STANDARDS_PROSE}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Drafting:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; {{DRAFTING_PROCESS_PROSE}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Expert review:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; {{EXPERT_REVIEW_PROCESS_PROSE}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Fact-checking:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; {{FACT_CHECKING_PROCESS_PROSE}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Editorial review:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; {{EDITORIAL_REVIEW_PROCESS_PROSE}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Publication:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; {{PUBLICATION_PROCESS_PROSE}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Ongoing review:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; {{ONGOING_REVIEW_CADENCE_PROSE}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ol&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Source Standards&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;For {{YMYL_CATEGORY}} content, we cite from primary sources:&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    {{IF_HEALTH}}&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Peer-reviewed medical journals indexed in PubMed&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;{{/IF}}
    {{IF_HEALTH}}&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;FDA, NIH, CDC, and WHO official publications&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;{{/IF}}
    {{IF_FINANCE}}&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;SEC filings and EDGAR records&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;{{/IF}}
    {{IF_FINANCE}}&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;IRS publications and Treasury guidance&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;{{/IF}}
    {{IF_FINANCE}}&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Federal Reserve, FDIC, and CFPB publications&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;{{/IF}}
    {{IF_LEGAL}}&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Primary case law via Westlaw/LexisNexis/CourtListener&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;{{/IF}}
    {{IF_LEGAL}}&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Federal and state statutes and regulations&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;{{/IF}}
    {{IF_LEGAL}}&lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Bar association ethics opinions&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;{{/IF}}
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Disclosures and Independence&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{BUSINESS_NAME}} maintains editorial independence. {{INDEPENDENCE_STATEMENT_PROSE}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;When commercial relationships exist, they are disclosed at the article level. See our &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/disclosure/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;full disclosures policy&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Limitations and Disclaimers&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Our content is informational and educational. {{TOPIC_SPECIFIC_DISCLAIMER_PROSE}}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;See: &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/medical-disclaimer/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Medical Disclaimer&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;, &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/financial-disclaimer/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Financial Disclaimer&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;, &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/legal-disclaimer/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Legal Disclaimer&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Corrections and Updates&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;If you find an error in our content, please contact us. See our &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/corrections-policy/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Corrections Policy&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; for our process.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Contact&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Editorial questions: &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"mailto:editorial@{{PRIMARY_DOMAIN}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;editorial@{{PRIMARY_DOMAIN}}&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Last reviewed: &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{LAST_REVIEW_DATE_ISO}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{LAST_REVIEW_DATE_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.3 Phase 3: Corrections Policy Page
&lt;/h3&gt;

&lt;p&gt;Build at &lt;code&gt;/corrections-policy/&lt;/code&gt;. Mandatory for all YMYL sites.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"corrections-policy"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Corrections Policy&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{BUSINESS_NAME}} is committed to factual accuracy. When we publish errors, we correct them transparently.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;How to Report an Error&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;If you find a factual error in any {{BUSINESS_NAME}} content, please contact us at &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"mailto:corrections@{{PRIMARY_DOMAIN}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;corrections@{{PRIMARY_DOMAIN}}&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; with:&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;The URL of the page containing the error&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;The specific text or claim you believe is incorrect&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;The correct information, with source if possible&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Our Correction Process&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ol&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Acknowledge:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; We respond to correction requests within 2 business days.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Investigate:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; Our editorial team and (where applicable) subject matter expert reviewer evaluate the claim against primary sources.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Decide:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; If the claim is correct, we update the content. If we believe the original content was correct, we explain our reasoning.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Update:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; Corrections are made to the source content immediately.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Disclose:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; Material corrections are disclosed at the top of the article with the date of correction and the nature of the change.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Notify:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; If you reported the error, we follow up to inform you of the outcome.&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ol&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Types of Corrections&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;dl&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dt&amp;gt;&lt;/span&gt;Material corrections&lt;span class="nt"&gt;&amp;lt;/dt&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dd&amp;gt;&lt;/span&gt;Factual errors that change the meaning or recommendation of the content. These are disclosed at the top of the article and noted in our corrections log.&lt;span class="nt"&gt;&amp;lt;/dd&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;dt&amp;gt;&lt;/span&gt;Minor corrections&lt;span class="nt"&gt;&amp;lt;/dt&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dd&amp;gt;&lt;/span&gt;Typos, grammatical errors, formatting issues. These are corrected silently.&lt;span class="nt"&gt;&amp;lt;/dd&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;dt&amp;gt;&lt;/span&gt;Updates&lt;span class="nt"&gt;&amp;lt;/dt&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;dd&amp;gt;&lt;/span&gt;Information that was correct at publication but has since changed (e.g., updated regulations). These are reflected via dateModified and noted in the article changelog.&lt;span class="nt"&gt;&amp;lt;/dd&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/dl&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Corrections Log&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;We maintain a public log of all material corrections at &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/corrections-log/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;/corrections-log/&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Contact&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Corrections: &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"mailto:corrections@{{PRIMARY_DOMAIN}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;corrections@{{PRIMARY_DOMAIN}}&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pair with a &lt;code&gt;/corrections-log/&lt;/code&gt; page that lists all material corrections with date, article URL, and nature of correction.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 Phase 4: Topic-Specific Disclaimer Pages
&lt;/h3&gt;

&lt;p&gt;Each YMYL category requires its own dedicated disclaimer page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.4.1 Medical disclaimer (&lt;code&gt;/medical-disclaimer/&lt;/code&gt;)&lt;/strong&gt; — for health YMYL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"medical-disclaimer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Medical Disclaimer&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;The information provided on {{BUSINESS_NAME}} ({{PRIMARY_DOMAIN}}) is for general informational and educational purposes only. &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;It is not a substitute for professional medical advice, diagnosis, or treatment.&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Always Seek Professional Medical Advice&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Always seek the advice of a qualified healthcare provider with any questions you may have regarding a medical condition. Never disregard professional medical advice or delay seeking it because of something you have read on this website.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Emergency Situations&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;If you think you may have a medical emergency, call 911 (or your local emergency number) or go to the nearest emergency room immediately.&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;If you are experiencing thoughts of suicide or self-harm:&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;988 Suicide &lt;span class="err"&gt;&amp;amp;&lt;/span&gt; Crisis Lifeline (US): Call or text 988&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Crisis Text Line: Text HOME to 741741&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;International Association for Suicide Prevention: &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://www.iasp.info/resources/Crisis_Centres/"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"noopener"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;https://www.iasp.info/resources/Crisis_Centres/&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;No Doctor-Patient Relationship&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Reading content on {{BUSINESS_NAME}} does not create a doctor-patient or healthcare provider relationship between you and {{BUSINESS_NAME}}, its authors, its medical reviewers, or anyone else affiliated with the site.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Individual Variation&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Medical information presented on this site is general. Individual circumstances vary, and what is appropriate for one person may not be appropriate for another. Always consult with your healthcare provider before making decisions about your health.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Medications and Treatments&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Information about medications, treatments, and procedures is for educational purposes. {{BUSINESS_NAME}} does not endorse or recommend any specific test, physician, product, procedure, opinion, or other information that may be mentioned on the site. Reliance on any information provided by {{BUSINESS_NAME}} is solely at your own risk.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Currency of Information&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Medical knowledge evolves rapidly. While we work to keep our content current — see our &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/editorial-policy/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Editorial Policy&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; — information may not reflect the latest guidance. Always verify with your healthcare provider.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;External Links&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{BUSINESS_NAME}} may contain links to external websites. We are not responsible for the content of those external sites and inclusion of a link does not constitute endorsement.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Editorial Standards&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Our content is created by {{AUTHOR_DESCRIPTION}} and reviewed by licensed medical professionals. See our &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/editorial-policy/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Editorial Policy&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; for details.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{LAST_UPDATED_ISO}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Last updated: {{LAST_UPDATED_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5.4.2 Financial disclaimer (&lt;code&gt;/financial-disclaimer/&lt;/code&gt;)&lt;/strong&gt; — for finance YMYL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"financial-disclaimer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Financial Disclaimer&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;The information provided on {{BUSINESS_NAME}} ({{PRIMARY_DOMAIN}}) is for general informational and educational purposes only. &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;It is not financial, investment, tax, or legal advice.&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;No Personalized Advice&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Nothing on this website constitutes a recommendation to buy, sell, or hold any security, investment, or other financial product. Content is general in nature and does not consider your specific financial situation, goals, or risk tolerance.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Consult Qualified Professionals&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Before making financial decisions, consult with qualified professionals:&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Certified Financial Planner (CFP) for comprehensive financial planning&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Registered Investment Advisor (RIA) for investment advice&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Certified Public Accountant (CPA) or Enrolled Agent for tax advice&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Licensed insurance agent for insurance decisions&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Estate planning attorney for estate decisions&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Past Performance Disclaimer&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Past performance is not indicative of future results.&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; Investment values fluctuate, and you may lose principal. Historical examples shown for educational purposes do not guarantee similar future outcomes.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;No Guarantees&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{BUSINESS_NAME}} makes no guarantees about the accuracy, completeness, timeliness, or applicability of information presented. Financial regulations, tax laws, and market conditions change frequently. Verify all information with current primary sources or qualified professionals.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Affiliate and Advertising Relationships&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{BUSINESS_NAME}} may have affiliate or advertising relationships with financial product providers. These relationships are disclosed at the article level. See our &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/disclosure/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;full disclosures policy&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;. Such relationships do not influence editorial recommendations, but you should consider them when evaluating our content.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Securities Regulation Disclosure&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  {{IF_NOT_REGISTERED_INVESTMENT_ADVISOR}}
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{BUSINESS_NAME}} is not a registered investment advisor under the Investment Advisers Act of 1940 and does not provide personalized investment advice. Information on this site is not tailored to any individual's financial situation.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  {{/IF}}

  {{IF_REGISTERED_INVESTMENT_ADVISOR}}
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{BUSINESS_NAME}} is a Registered Investment Advisor (CRD #{{CRD_NUMBER}}). However, content on this website is for educational purposes and does not constitute personalized investment advice. Personalized advice is available only through our advisory engagement. &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/services/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Learn about our services&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  {{/IF}}

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Tax Disclaimer&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Tax information is general and not personalized tax advice. Tax laws are complex and vary by jurisdiction and individual circumstances. Consult a qualified tax professional before making tax-related decisions.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;No Fiduciary Relationship&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Reading content on {{BUSINESS_NAME}} does not create a fiduciary or advisory relationship between you and {{BUSINESS_NAME}}.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{LAST_UPDATED_ISO}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Last updated: {{LAST_UPDATED_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5.4.3 Legal disclaimer (&lt;code&gt;/legal-disclaimer/&lt;/code&gt;)&lt;/strong&gt; — for legal YMYL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"legal-disclaimer"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Legal Disclaimer&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;The information provided on {{BUSINESS_NAME}} ({{PRIMARY_DOMAIN}}) is for general informational and educational purposes only. &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;It is not legal advice.&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;No Attorney-Client Relationship&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Reading content on this website, contacting us through this website, or otherwise interacting with {{BUSINESS_NAME}} does not create an attorney-client relationship between you and {{BUSINESS_NAME}} or any of its authors, reviewers, or affiliates.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;An attorney-client relationship is established only through a signed engagement agreement.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Consult a Qualified Attorney&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Laws vary by jurisdiction and change frequently. The information on this site may not be current or applicable to your specific situation. Always consult a qualified attorney licensed in your jurisdiction before making legal decisions.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Confidentiality&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Communications sent through this website are not confidential.&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; Do not send confidential or time-sensitive information through this website or via email to addresses listed on this website.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;No Guarantee of Outcome&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Discussions of legal cases, statutes, or principles do not predict the outcome of any specific legal matter. Past results do not guarantee similar outcomes in your case.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Attorney Advertising&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  {{IF_LAW_FIRM}}
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This website may constitute attorney advertising under applicable rules of professional conduct. {{ATTORNEY_ADVERTISING_DISCLOSURE_BY_STATE}}.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  {{/IF}}

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Bar Admissions&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  {{IF_LAW_FIRM}}
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;{{BUSINESS_NAME}} attorneys are admitted to practice in the following jurisdictions: {{LIST_OF_BAR_ADMISSIONS}}. We do not practice law in jurisdictions where we are not admitted.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  {{/IF}}

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Currency of Information&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Laws change. Court decisions are issued daily. Regulations are updated. While we work to keep content current — see our &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/editorial-policy/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Editorial Policy&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; — information may not reflect the latest law. Always verify with current primary sources or a qualified attorney.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;External Links&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This website may link to external websites. We are not responsible for content on external sites, and inclusion of a link does not constitute endorsement.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{LAST_UPDATED_ISO}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Last updated: {{LAST_UPDATED_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.5 Phase 5: Per-Article YMYL Trust Elements
&lt;/h3&gt;

&lt;p&gt;Every YMYL article requires these elements in addition to standard E-E-A-T elements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.5.1 Top-of-article disclaimer banner&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ymyl-top-disclaimer"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"note"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;{{TOPIC_DISCLAIMER_HEADLINE}}&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt;
    {{TOPIC_DISCLAIMER_TEXT}}
    &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/{{TOPIC}}-disclaimer/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Read our full {{TOPIC}} disclaimer.&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;For health: "This article is for informational purposes only and is not a substitute for professional medical advice. Always consult a qualified healthcare provider for personal medical decisions."&lt;/p&gt;

&lt;p&gt;For finance: "This article is for informational purposes only and is not personalized financial advice. Consult a qualified financial professional before making financial decisions."&lt;/p&gt;

&lt;p&gt;For legal: "This article is for informational purposes only and is not legal advice. Consult a qualified attorney for legal decisions specific to your situation."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.5.2 Author + Reviewer credit block&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;header&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"article-header ymyl-article"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;{{TITLE}}&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ymyl-byline"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"author-credit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"{{AUTHOR_PHOTO}}"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"{{AUTHOR_NAME}}"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"48"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"48"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
        Written by &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/authors/{{AUTHOR_SLUG}}/"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"author"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{AUTHOR_NAME}}&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"credentials"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{AUTHOR_CREDENTIALS}}&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"reviewer-credit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"{{REVIEWER_PHOTO}}"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;"{{REVIEWER_NAME}}"&lt;/span&gt; &lt;span class="na"&gt;width=&lt;/span&gt;&lt;span class="s"&gt;"48"&lt;/span&gt; &lt;span class="na"&gt;height=&lt;/span&gt;&lt;span class="s"&gt;"48"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
        {{REVIEWER_TYPE_VERB}} reviewed by &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/authors/{{REVIEWER_SLUG}}/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{REVIEWER_NAME}}&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"credentials"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{REVIEWER_CREDENTIALS}}&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        {{IF_LICENSED}}
        &lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"license-info"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;License #{{LICENSE_NUMBER}}, {{LICENSE_STATE}} · &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"{{VERIFY_URL}}"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"noopener"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Verify&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        {{/IF}}
      &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ymyl-dates"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{PUBLISHED_DATE}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Published {{PUBLISHED_DATE_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;
      ·
      &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{UPDATED_DATE}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Last updated {{UPDATED_DATE_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;
      ·
      &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"{{REVIEWED_DATE}}"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Last reviewed by {{REVIEWER_TYPE}} {{REVIEWED_DATE_HUMAN}}&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;{{REVIEWER_TYPE_VERB}}&lt;/code&gt; examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Medically" (for medical reviewer)&lt;/li&gt;
&lt;li&gt;"Legally" (for legal reviewer)&lt;/li&gt;
&lt;li&gt;"Financially" (for financial reviewer)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5.5.3 Conflict-of-interest disclosure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When applicable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"coi-disclosure"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"note"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Conflict of Interest Disclosure:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt;
  {{COI_DISCLOSURE_TEXT}}
&lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example: "The author owns shares in companies discussed in this article. The reviewer has consulted for one of the firms mentioned. These relationships are disclosed in compliance with our editorial policy and do not influence the analysis presented."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.5.4 Primary literature citations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;YMYL content cites from primary sources only. Format inline citations with prominent links to primary literature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
  A 2025 systematic review&lt;span class="nt"&gt;&amp;lt;sup&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#ref-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/sup&amp;gt;&lt;/span&gt; found that
  the recommended treatment protocol reduces complications by 47% in patients
  with Type 2 diabetes&lt;span class="nt"&gt;&amp;lt;sup&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"#ref-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;2&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/sup&amp;gt;&lt;/span&gt;.
&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"article-references"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;References&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ol&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"ref-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      Smith J, Doe A, et al. (2025). "Treatment protocols for Type 2 diabetes: A systematic review."
      &lt;span class="nt"&gt;&amp;lt;em&amp;gt;&lt;/span&gt;New England Journal of Medicine&lt;span class="nt"&gt;&amp;lt;/em&amp;gt;&lt;/span&gt;, 392(15), 1422-1438.
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://pubmed.ncbi.nlm.nih.gov/{{PMID}}/"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"noopener"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;PubMed&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
      ·
      DOI: &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://doi.org/{{DOI}}"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"noopener"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{DOI}}&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"ref-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      American Diabetes Association. (2026). "Standards of Medical Care in Diabetes — 2026."
      &lt;span class="nt"&gt;&amp;lt;em&amp;gt;&lt;/span&gt;Diabetes Care&lt;span class="nt"&gt;&amp;lt;/em&amp;gt;&lt;/span&gt;, 49(Supplement 1).
      &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"{{URL}}"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"noopener"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Full text&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ol&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For finance YMYL, cite SEC filings, IRS publications, FRED data, and Federal Reserve research. For legal YMYL, cite primary case law, statutes, and regulations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.5.5 Schema additions for YMYL articles&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MedicalWebPage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;headline&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{TITLE}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;author&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://{{PRIMARY_DOMAIN}}/authors/{{AUTHOR_SLUG}}/#person&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;reviewedBy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://{{PRIMARY_DOMAIN}}/authors/{{REVIEWER_SLUG}}/#person&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;datePublished&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{PUBLISHED_DATE}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dateModified&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{UPDATED_DATE}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lastReviewed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{LAST_REVIEW_DATE}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;publisher&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://{{PRIMARY_DOMAIN}}/#organization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;specialty&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MedicalSpecialty&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{MEDICAL_SPECIALTY}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;audience&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;MedicalAudience&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;audienceType&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Patient&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;citation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="nx"&gt;ARTICLE_CITATIONS_JSON&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;isPartOf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://{{PRIMARY_DOMAIN}}/#website&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For legal articles, use &lt;code&gt;LegalService&lt;/code&gt; or &lt;code&gt;Article&lt;/code&gt; with detailed &lt;code&gt;about&lt;/code&gt; properties. For financial articles, use &lt;code&gt;Article&lt;/code&gt; with &lt;code&gt;mentions&lt;/code&gt; of relevant &lt;code&gt;FinancialProduct&lt;/code&gt; entities.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.5.6 Reviewer Person schema (additional fields)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;YMYL reviewers need expanded Person schema beyond standard E-E-A-T:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Person&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://{{PRIMARY_DOMAIN}}/authors/{{REVIEWER_SLUG}}/#person&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{REVIEWER_NAME}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;jobTitle&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{REVIEWER_TITLE}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;honorificPrefix&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{HONORIFIC_PREFIX}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;honorificSuffix&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{HONORIFIC_SUFFIX}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hasCredential&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;EducationalOccupationalCredential&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{DEGREE_NAME}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;credentialCategory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;degree&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;recognizedBy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;EducationalOrganization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{INSTITUTION}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;EducationalOccupationalCredential&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{LICENSE_NAME}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;credentialCategory&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;license&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;recognizedBy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GovernmentOrganization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{LICENSING_BODY}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;identifier&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{LICENSE_NUMBER}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{LICENSE_VERIFICATION_URL}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;memberOf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Organization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{PROFESSIONAL_ORG}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;knowsAbout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="nx"&gt;REVIEWER_SPECIALTIES_JSON&lt;/span&gt;&lt;span class="p"&gt;}},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sameAs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{{&lt;/span&gt;&lt;span class="nx"&gt;REVIEWER_PROFILES_JSON&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.6 Phase 6: Mental Health Crisis Handling
&lt;/h3&gt;

&lt;p&gt;For any health YMYL site that touches mental health topics, install crisis-line resources prominently and consistently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.6.1 Mental health crisis banner&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Display on every mental-health-related page:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"crisis-resources"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"note"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;If You're in Crisis&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;If you're experiencing thoughts of suicide or self-harm:&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;988 Suicide &lt;span class="err"&gt;&amp;amp;&lt;/span&gt; Crisis Lifeline (US):&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; Call or text &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"tel:988"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;988&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Crisis Text Line:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; Text HOME to &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"sms:741741"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;741741&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;Veterans Crisis Line:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; Call &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"tel:988"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;988&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; and press 1&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;&lt;/span&gt;International:&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"https://www.iasp.info/resources/Crisis_Centres/"&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"noopener"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Find a crisis center near you&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;If you are in immediate danger, call &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"tel:911"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;911&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; or go to your nearest emergency room.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This banner appears at the &lt;strong&gt;top&lt;/strong&gt; of mental health articles, not the bottom.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.7 Phase 7: Regulatory Compliance Per Industry
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;5.7.1 Healthcare (HIPAA-applicable entities)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If &lt;code&gt;hipaa_applicable: true&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HIPAA Privacy Notice page&lt;/li&gt;
&lt;li&gt;Notice of privacy practices&lt;/li&gt;
&lt;li&gt;Patient rights enumeration&lt;/li&gt;
&lt;li&gt;Breach notification procedure&lt;/li&gt;
&lt;li&gt;Business associate agreement template (for vendors)&lt;/li&gt;
&lt;li&gt;All forms collecting PHI use HTTPS with proper encryption&lt;/li&gt;
&lt;li&gt;Cookie consent calibrated for HIPAA-compliant analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5.7.2 Financial Services&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If &lt;code&gt;sec_registered: true&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Form ADV linked from footer&lt;/li&gt;
&lt;li&gt;Brochure (Form ADV Part 2A) downloadable&lt;/li&gt;
&lt;li&gt;Code of ethics&lt;/li&gt;
&lt;li&gt;Customer relationship summary (Form CRS) for retail clients&lt;/li&gt;
&lt;li&gt;Cybersecurity disclosures per SEC rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If &lt;code&gt;finra_member: true&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;BrokerCheck links per representative&lt;/li&gt;
&lt;li&gt;Investor education resources&lt;/li&gt;
&lt;li&gt;Required disclosures per FINRA Rule 2210 (advertising)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5.7.3 Legal Services&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;State-by-state attorney advertising compliance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Attorney advertising" or equivalent label per state requirements&lt;/li&gt;
&lt;li&gt;Disclaimer language varies by jurisdiction (NY, FL, TX, CA each have different requirements)&lt;/li&gt;
&lt;li&gt;Past results disclaimer&lt;/li&gt;
&lt;li&gt;Bar association required language&lt;/li&gt;
&lt;li&gt;Specialization claim restrictions per state&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5.8 Phase 8: AI Content in YMYL — Higher Bar
&lt;/h3&gt;

&lt;p&gt;The standard AI content disclosure (E-E-A-T Section 4.4.6) is insufficient for YMYL. Additional protocols apply:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5.8.1 Per-article YMYL AI disclosure&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;aside&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"ymyl-ai-disclosure"&lt;/span&gt; &lt;span class="na"&gt;role=&lt;/span&gt;&lt;span class="s"&gt;"note"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt;How This Article Was Created&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;{{AI_USAGE_LEVEL}} — {{AI_USAGE_DESCRIPTION}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;Reviewed for accuracy by {{REVIEWER_NAME}}, {{REVIEWER_CREDENTIALS}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;All factual claims verified against primary sources cited in the references section&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;{{REVIEW_DATE_AND_TIME_INVESTED}}&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;See our &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/disclosure/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;AI use policy&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; and &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/editorial-policy/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;editorial policy&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt; for details on our YMYL content standards.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/aside&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5.8.2 What's never acceptable in YMYL&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-generated content published without expert review&lt;/li&gt;
&lt;li&gt;AI-generated medical advice, diagnoses, or treatment recommendations&lt;/li&gt;
&lt;li&gt;AI-generated legal analysis presented as authoritative&lt;/li&gt;
&lt;li&gt;AI-generated financial recommendations&lt;/li&gt;
&lt;li&gt;AI-generated case studies or statistics that aren't real&lt;/li&gt;
&lt;li&gt;AI-fabricated citations (always verify every citation independently)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If an AI tool produces content for YMYL purposes, treat the AI output as a research draft. The credentialed reviewer must verify every fact, every citation, every recommendation. The reviewer's name and credentials go on the article — taking professional responsibility for the content.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.9 Phase 9: Refresh Cadence Calendar
&lt;/h3&gt;

&lt;p&gt;YMYL content requires more frequent refreshing than non-YMYL.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;YMYL Category&lt;/th&gt;
&lt;th&gt;Refresh Cadence&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Drug information, dosing, interactions&lt;/td&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Medical condition treatment guidelines&lt;/td&gt;
&lt;td&gt;Quarterly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tax deadlines and rates&lt;/td&gt;
&lt;td&gt;Annually + on regulatory change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Investment product reviews&lt;/td&gt;
&lt;td&gt;Quarterly&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Legal procedure guides&lt;/td&gt;
&lt;td&gt;Quarterly + on case law change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Insurance regulation guides&lt;/td&gt;
&lt;td&gt;Annually + on regulatory change&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;News-sensitive YMYL (elections, public health)&lt;/td&gt;
&lt;td&gt;Daily during active periods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Evergreen YMYL (anatomy, basic legal concepts)&lt;/td&gt;
&lt;td&gt;Annually&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Build a refresh calendar at &lt;code&gt;/admin/ymyl-refresh-calendar/&lt;/code&gt; listing every YMYL article with next-review-due date.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Per-Page YMYL Validation
&lt;/h2&gt;

&lt;p&gt;Every YMYL page must pass:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Y1&lt;/td&gt;
&lt;td&gt;Top-of-article topic-specific disclaimer banner present&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y2&lt;/td&gt;
&lt;td&gt;Credentialed author byline&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y3&lt;/td&gt;
&lt;td&gt;Credentialed reviewer byline (with verifiable license where applicable)&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y4&lt;/td&gt;
&lt;td&gt;Last-published, last-updated, last-reviewed dates all displayed&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y5&lt;/td&gt;
&lt;td&gt;Conflict-of-interest disclosure if applicable&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y6&lt;/td&gt;
&lt;td&gt;Primary literature citations for every factual claim&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y7&lt;/td&gt;
&lt;td&gt;References section with full source citations&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y8&lt;/td&gt;
&lt;td&gt;Topic-specific schema (MedicalWebPage for health, etc.)&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y9&lt;/td&gt;
&lt;td&gt;Reviewer Person schema with &lt;code&gt;hasCredential&lt;/code&gt; including license&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y10&lt;/td&gt;
&lt;td&gt;Crisis resources displayed if mental health topic&lt;/td&gt;
&lt;td&gt;Critical (mental health)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y11&lt;/td&gt;
&lt;td&gt;AI use disclosed if AI was involved in creation&lt;/td&gt;
&lt;td&gt;Critical (if applicable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Y12&lt;/td&gt;
&lt;td&gt;Article reviewed within required cadence (not stale)&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 24 max. World-class YMYL article: 22+/24 with zero Critical fails.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Site-Wide YMYL Audit Criteria
&lt;/h2&gt;

&lt;p&gt;Beyond per-article criteria, the site as a whole must satisfy:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Severity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;YS1&lt;/td&gt;
&lt;td&gt;Editorial policy page exists at &lt;code&gt;/editorial-policy/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YS2&lt;/td&gt;
&lt;td&gt;Corrections policy page exists at &lt;code&gt;/corrections-policy/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YS3&lt;/td&gt;
&lt;td&gt;Corrections log maintained at &lt;code&gt;/corrections-log/&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YS4&lt;/td&gt;
&lt;td&gt;Topic-specific disclaimer pages exist (medical, financial, legal as applicable)&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YS5&lt;/td&gt;
&lt;td&gt;Author hub page lists credentialed authors with verifiable licenses&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YS6&lt;/td&gt;
&lt;td&gt;YMYL inventory and classification documented internally&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YS7&lt;/td&gt;
&lt;td&gt;Refresh calendar maintained with next-review dates&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YS8&lt;/td&gt;
&lt;td&gt;Industry-specific compliance documentation in place (HIPAA, SEC, bar advertising)&lt;/td&gt;
&lt;td&gt;Critical (if applicable)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YS9&lt;/td&gt;
&lt;td&gt;Cookie consent calibrated for industry compliance&lt;/td&gt;
&lt;td&gt;Critical (if HIPAA/finance)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YS10&lt;/td&gt;
&lt;td&gt;Crisis resources prominent on mental health pages sitewide&lt;/td&gt;
&lt;td&gt;Critical (mental health)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YS11&lt;/td&gt;
&lt;td&gt;AI use policy explicitly addresses YMYL content standards&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YS12&lt;/td&gt;
&lt;td&gt;Quarterly internal YMYL audit conducted and documented&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 24 max. World-class YMYL site: 22+/24 with zero Critical fails.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Common YMYL Mistakes &amp;amp; Anti-Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8.1 "Educational" Content That Functions as Advice
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Articles framed as "educational" but written to direct readers toward specific decisions ("This medication is best for...", "You should invest in..."). The educational framing is a fig leaf for advice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Google's raters see through this. Regulatory bodies see through this. Readers harmed by following the implicit advice have legal recourse.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Either commit to advice (with credentialed authorship and proper disclosures) or commit to education (with clearer language that isn't directive).&lt;/p&gt;

&lt;h3&gt;
  
  
  8.2 Generic Reviewer Stamping
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: A single "medical reviewer" listed on hundreds of articles without evidence they actually reviewed each one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: When detected (typically through inconsistencies in claims across articles), it collapses Trust across the entire site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Reviewer process must be real. Track which articles each reviewer has actually reviewed. Maintain audit trail.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.3 Outdated YMYL Content Treated as Current
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Article published 2021 about "current tax law" still ranking and not refreshed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Stale YMYL content harms users and tanks rankings post-core-update.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Aggressive refresh cadence. Retire content that can't be maintained.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.4 Hidden Affiliate Conflicts in YMYL
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: A health site recommends a supplement; affiliate disclosure exists in footer but not on the article.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: FTC requires "clear and conspicuous" disclosure. For YMYL especially, the conflict is material.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Top-of-article disclosure for any YMYL article with affiliate links.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.5 Personal Anecdote Presented as Universal Advice
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: "How I cured my anxiety with this technique" framed as a solution that will work for readers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Mental health is highly individual. Generalizing personal experience creates harm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Frame personal experience as personal. Add disclaimers explicitly stating the experience may not apply to others.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.6 AI-Generated YMYL Without Real Review
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: ChatGPT writes an article on medication side effects. A non-credentialed editor "reviews" it. Published as authoritative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: AI hallucinations in YMYL content can directly harm readers. Lack of credentialed review is a Trust violation. Detection rate is rising.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Either don't use AI for YMYL drafting, or have a credentialed expert genuinely verify every fact and citation.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.7 Boilerplate Disclaimers That Don't Match Content
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Generic "consult a professional" disclaimer at the bottom of an article that explicitly tells readers what to do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Disclaimers don't immunize against directive content. Plus: regulators don't accept boilerplate disclaimers as protection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Match disclaimer to content. If you're giving advice, the disclaimer should reflect that. If you're educating, the content should be educational.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.8 Misleading Credential Claims
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Author bio claims "20 years of experience" without specifying in what. Or lists credentials abbreviations that look impressive but aren't actually relevant (e.g., a non-medical "PhD" reviewing health content).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Misleading credentials are a Trust violation when discovered. Plus: in regulated industries (medicine, law, finance), can be illegal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Specific, verifiable credentials. Plain-language explanation of why this person's credentials are relevant to the topic.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.9 Fabricated Citations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Article cites a study that doesn't exist or misrepresents what the study found. Often happens with AI-generated content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Easily verified. Catastrophic Trust violation when discovered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Verify every citation independently before publishing. Click every link. Read the actual source.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.10 Cross-Border YMYL Without Jurisdictional Awareness
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: US-focused legal content viewed by readers in other countries who follow guidance that doesn't apply.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Harm to international readers. Reflects on the site's quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Clear jurisdictional scope statements. International readers redirected to country-appropriate resources where possible.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Stack-Specific YMYL Implementation Notes
&lt;/h2&gt;

&lt;p&gt;YMYL content can be created and managed in any stack, but these patterns help:&lt;/p&gt;

&lt;h3&gt;
  
  
  9.1 WordPress
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plugin&lt;/strong&gt;: Use a custom plugin or ACF (Advanced Custom Fields) to add YMYL-specific fields per article: reviewer, license number, last review date, conflict disclosures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template&lt;/strong&gt;: Build dedicated &lt;code&gt;ymyl-article.php&lt;/code&gt; template that renders required disclaimer + reviewer block + citation requirements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow&lt;/strong&gt;: Use Editorial Calendar or PublishPress to enforce reviewer assignment before publish&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.2 Next.js
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content schema&lt;/strong&gt;: Define TypeScript types for YMYL article frontmatter requiring reviewer, license, citations array&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validation&lt;/strong&gt;: Pre-publish CI/CD step validates required YMYL fields are present&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component&lt;/strong&gt;: &lt;code&gt;&amp;lt;YmylArticleHeader /&amp;gt;&lt;/code&gt; component encapsulates disclaimer + author/reviewer credit + dates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.3 Astro / Hugo / Static Sites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Content collections&lt;/strong&gt;: Define YMYL article schema with required fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build-time validation&lt;/strong&gt;: Reject builds where YMYL articles are missing required fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layout&lt;/strong&gt;: Dedicated YMYL article layout enforces structural requirements&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.4 Universal Pattern
&lt;/h3&gt;

&lt;p&gt;Regardless of stack, the YMYL workflow looks like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Author drafts article with YMYL classification metadata&lt;/li&gt;
&lt;li&gt;Drafted content goes to credentialed reviewer&lt;/li&gt;
&lt;li&gt;Reviewer adds review notes and signs off (with date)&lt;/li&gt;
&lt;li&gt;Editorial layer fact-checks against primary sources&lt;/li&gt;
&lt;li&gt;Publication system requires all YMYL fields present before publishing&lt;/li&gt;
&lt;li&gt;Article appears with full YMYL trust elements&lt;/li&gt;
&lt;li&gt;Refresh calendar tracks next-review-due date&lt;/li&gt;
&lt;li&gt;Quarterly audit verifies compliance across all YMYL content&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  10. Cross-Reference to the 14-Tier Framework
&lt;/h2&gt;

&lt;p&gt;YMYL implementation touches multiple tiers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tier 1 SSO&lt;/strong&gt;: Security required for HIPAA-compliant health sites&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 1 GCO&lt;/strong&gt;: GDPR/CCPA compliance overlaps with health/finance privacy requirements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 2 ETO&lt;/strong&gt;: Per-article trust signals (disclaimer banner, reviewer credit)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 2 AAO&lt;/strong&gt;: Author authority — extended for credentialed YMYL authors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 4 PBO&lt;/strong&gt;: Personal brand for credentialed reviewers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 4 REO&lt;/strong&gt;: Reviews carry more weight in YMYL niches&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 6 RSO&lt;/strong&gt;: Research and original studies — primary literature citations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 8 GA4&lt;/strong&gt;: Compliance-aware analytics for YMYL sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When YMYL improvement is the priority for a site, implement in this order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Classify content&lt;/strong&gt; (Section 5.1)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build editorial and corrections policy pages&lt;/strong&gt; (Sections 5.2-5.3)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build topic-specific disclaimer pages&lt;/strong&gt; (Section 5.4)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recruit credentialed reviewers&lt;/strong&gt; if not already in place&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-article YMYL elements&lt;/strong&gt; (Section 5.5)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Industry compliance documentation&lt;/strong&gt; (Section 5.7)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refresh calendar&lt;/strong&gt; (Section 5.9)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mental health crisis resources if applicable&lt;/strong&gt; (Section 5.6)&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  11. Validation Protocol
&lt;/h2&gt;

&lt;h3&gt;
  
  
  11.1 Automated Validation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verify all YMYL articles have required schema&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;url &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nv"&gt;$YMYL_URLS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;curl &lt;span class="nt"&gt;-sL&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | python &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="s2"&gt;"
import sys, re, json
html = sys.stdin.read()
matches = re.findall(r'&amp;lt;script type=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;application/ld&lt;/span&gt;&lt;span class="se"&gt;\+&lt;/span&gt;&lt;span class="s2"&gt;json&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;(.*?)&amp;lt;/script&amp;gt;', html, re.DOTALL)
has_reviewer = False
for m in matches:
    try:
        data = json.loads(m)
        if 'reviewedBy' in data:
            has_reviewer = True
    except:
        pass
if not has_reviewer:
    print(f'{url}: MISSING reviewedBy')
    sys.exit(1)
"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verify all YMYL articles have disclaimer&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;url &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nv"&gt;$YMYL_URLS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; curl &lt;span class="nt"&gt;-sL&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-q&lt;/span&gt; &lt;span class="s1"&gt;'class="ymyl-top-disclaimer"'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"FAIL: &lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="s2"&gt; missing disclaimer"&lt;/span&gt;
  &lt;span class="k"&gt;fi
done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Verify required pages&lt;/span&gt;
&lt;span class="nv"&gt;REQUIRED&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;/editorial-policy/ /corrections-policy/ /corrections-log/&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;page &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;REQUIRED&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
  &lt;/span&gt;&lt;span class="nv"&gt;status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-o&lt;/span&gt; /dev/null &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-w&lt;/span&gt; &lt;span class="s2"&gt;"%{http_code}"&lt;/span&gt; &lt;span class="s2"&gt;"https://&lt;/span&gt;&lt;span class="nv"&gt;$DOMAIN$page&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$status&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s2"&gt;"200"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"FAIL: &lt;/span&gt;&lt;span class="nv"&gt;$page&lt;/span&gt;&lt;span class="s2"&gt; returned &lt;/span&gt;&lt;span class="nv"&gt;$status&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  11.2 Manual Validation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sample 10% of YMYL articles. Verify each has all elements from Section 6.&lt;/li&gt;
&lt;li&gt;Verify reviewer credentials by checking license verification URLs.&lt;/li&gt;
&lt;li&gt;Spot-check citations — click every link in the references section of sampled articles. Verify the source actually exists and supports the claim.&lt;/li&gt;
&lt;li&gt;Test mental health crisis resources are visible and links work.&lt;/li&gt;
&lt;li&gt;Verify AI disclosure if AI is used in any YMYL content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  11.3 Regulatory Validation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;HIPAA covered entities: have HIPAA officer review the site annually&lt;/li&gt;
&lt;li&gt;SEC-registered firms: have compliance officer review marketing content quarterly&lt;/li&gt;
&lt;li&gt;Law firms: have managing partner review attorney advertising compliance per state&lt;/li&gt;
&lt;li&gt;Financial advisors: have compliance officer review per FINRA Rule 2210&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  12. Audit Mode
&lt;/h2&gt;

&lt;p&gt;Use Section 4.1 to classify each piece of content. Then score against:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-article criteria&lt;/strong&gt; (Section 6) — 24 points max per article. Average across all YMYL articles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Site-wide criteria&lt;/strong&gt; (Section 7) — 24 points max.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total: 48 points max for YMYL audit.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;44-48&lt;/td&gt;
&lt;td&gt;World-class YMYL compliance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;38-43&lt;/td&gt;
&lt;td&gt;Compliant with minor gaps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30-37&lt;/td&gt;
&lt;td&gt;Significant gaps requiring remediation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;30&lt;/td&gt;
&lt;td&gt;Critical YMYL failures — immediate action required&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A site cannot be considered YMYL-compliant if any Critical-severity item fails, regardless of total score.&lt;/p&gt;




&lt;h2&gt;
  
  
  13. Maintenance Schedule
&lt;/h2&gt;

&lt;h3&gt;
  
  
  13.1 Daily
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monitor mental health crisis page accuracy if applicable&lt;/li&gt;
&lt;li&gt;Respond to corrections requests within 2 business days&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.2 Weekly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Review one piece of YMYL content from refresh queue&lt;/li&gt;
&lt;li&gt;Check for new citations to add (new studies, regulatory updates)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.3 Monthly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Generate YMYL compliance status report&lt;/li&gt;
&lt;li&gt;Update corrections log with any material corrections&lt;/li&gt;
&lt;li&gt;Run automated YMYL validation across all flagged content&lt;/li&gt;
&lt;li&gt;Refresh time-sensitive content (drug info, tax dates, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.4 Quarterly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Full YMYL audit of randomly sampled 10% of YMYL content&lt;/li&gt;
&lt;li&gt;Reviewer credential verification (license still active, not suspended)&lt;/li&gt;
&lt;li&gt;Editorial policy review&lt;/li&gt;
&lt;li&gt;Industry compliance audit (HIPAA, SEC, bar advertising)&lt;/li&gt;
&lt;li&gt;Update refresh calendar with new content&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.5 Annually
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive site-wide YMYL audit&lt;/li&gt;
&lt;li&gt;Editorial policy substantive review&lt;/li&gt;
&lt;li&gt;Disclaimer language legal review&lt;/li&gt;
&lt;li&gt;AI use policy review&lt;/li&gt;
&lt;li&gt;Reviewer team review (any changes, additions, departures)&lt;/li&gt;
&lt;li&gt;Strategic decision: are we still publishing YMYL content responsibly?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  13.6 On Regulatory Change
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;New SEC/FINRA rule → financial content review within 30 days&lt;/li&gt;
&lt;li&gt;New tax law → tax content review immediately&lt;/li&gt;
&lt;li&gt;New medical guidelines (ADA standards, ACOG guidelines, etc.) → relevant content review within 60 days&lt;/li&gt;
&lt;li&gt;Court decisions affecting legal content → review within 90 days&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  14. Implementation/Audit Report Templates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  14.1 YMYL Implementation Report Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# YMYL Framework Implementation Report&lt;/span&gt;

&lt;span class="gs"&gt;**Project**&lt;/span&gt;: {{BUSINESS_NAME}}
&lt;span class="gs"&gt;**Domain**&lt;/span&gt;: {{PRIMARY_DOMAIN}}
&lt;span class="gs"&gt;**Implementation Date**&lt;/span&gt;: {{TODAY}}
&lt;span class="gs"&gt;**YMYL Classification**&lt;/span&gt;: {{CLASSIFICATION}}
&lt;span class="gs"&gt;**YMYL Categories**&lt;/span&gt;: {{CATEGORIES}}

&lt;span class="gu"&gt;## Summary&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Total YMYL articles**&lt;/span&gt;: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Articles with full YMYL trust elements**&lt;/span&gt;: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Critical items remediated**&lt;/span&gt;: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="gs"&gt;**Reviewer team established**&lt;/span&gt;: {{REVIEWER_LIST}}

&lt;span class="gu"&gt;## Required Pages Created&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; /editorial-policy/ — {{STATUS}}
&lt;span class="p"&gt;-&lt;/span&gt; /corrections-policy/ — {{STATUS}}
&lt;span class="p"&gt;-&lt;/span&gt; /corrections-log/ — {{STATUS}}
&lt;span class="p"&gt;-&lt;/span&gt; /medical-disclaimer/ — {{STATUS}}
&lt;span class="p"&gt;-&lt;/span&gt; /financial-disclaimer/ — {{STATUS}}
&lt;span class="p"&gt;-&lt;/span&gt; /legal-disclaimer/ — {{STATUS}}

&lt;span class="gu"&gt;## Per-Article Trust Elements Installed&lt;/span&gt;
{{TABLE_OF_ARTICLES_WITH_INSTALLED_ELEMENTS}}

&lt;span class="gu"&gt;## Industry Compliance Documentation&lt;/span&gt;
{{LIST_OF_COMPLIANCE_DOCS}}

&lt;span class="gu"&gt;## Items Flagged for Manual Review&lt;/span&gt;
{{LIST_WITH_REASONS}}

&lt;span class="gu"&gt;## Refresh Calendar Established&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Articles requiring monthly refresh: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; Articles requiring quarterly refresh: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; Articles requiring annual refresh: {{COUNT}}

&lt;span class="gu"&gt;## Validation Results&lt;/span&gt;
{{AUTOMATED_AND_MANUAL_RESULTS}}

&lt;span class="gu"&gt;## Sign-Off&lt;/span&gt;
Implementation complete: {{DATE}}
Implementer: {{NAME}}
Editorial Lead: {{NAME}}
Compliance Lead: {{NAME}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  14.2 YMYL Audit Report Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# YMYL Framework Audit Report&lt;/span&gt;

&lt;span class="gs"&gt;**Site**&lt;/span&gt;: {{BUSINESS_NAME}}
&lt;span class="gs"&gt;**Audit Date**&lt;/span&gt;: {{TODAY}}
&lt;span class="gs"&gt;**YMYL Classification**&lt;/span&gt;: {{CLASSIFICATION}}

&lt;span class="gu"&gt;## Executive Summary&lt;/span&gt;
{{SUMMARY}}

&lt;span class="gs"&gt;**Overall Score**&lt;/span&gt;: {{X}}/48 ({{PERCENTAGE}}%)
&lt;span class="gs"&gt;**Status**&lt;/span&gt;: {{STATUS}}

&lt;span class="gu"&gt;## YMYL Inventory&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Total content: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; YMYL content (full): {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; YMYL content (partial): {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; YMYL content (lite): {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; Non-YMYL content: {{COUNT}}

&lt;span class="gu"&gt;## Per-Article Compliance ({{X}}/24 average)&lt;/span&gt;
{{DETAILED_PER_ARTICLE_FINDINGS}}

&lt;span class="gu"&gt;## Site-Wide Compliance ({{X}}/24)&lt;/span&gt;
{{DETAILED_SITE_FINDINGS}}

&lt;span class="gu"&gt;## Critical Failures&lt;/span&gt;
{{LIST_WITH_REMEDIATION}}

&lt;span class="gu"&gt;## High-Severity Issues&lt;/span&gt;
{{LIST_WITH_REMEDIATION}}

&lt;span class="gu"&gt;## Industry-Specific Findings&lt;/span&gt;
{{HIPAA_SEC_BAR_FINDINGS}}

&lt;span class="gu"&gt;## Recommended Remediation Order&lt;/span&gt;
{{PRIORITIZED_LIST}}

&lt;span class="gu"&gt;## Sign-Off&lt;/span&gt;
Audit complete: {{DATE}}
Auditor: {{NAME}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  End of Framework Document
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Document version&lt;/strong&gt;: 1.0&lt;br&gt;
&lt;strong&gt;Last updated&lt;/strong&gt;: 2026-04-29&lt;br&gt;
&lt;strong&gt;Maintained by&lt;/strong&gt;: ThatDeveloperGuy&lt;/p&gt;

&lt;p&gt;YMYL is the highest-stakes framework in the foundational library. Errors in YMYL content can harm users, expose the business to legal and regulatory consequences, and tank rankings. The standards in this document are non-negotiable. When in doubt, err toward more rigor — extra disclaimers, more credentialed reviewers, more frequent refresh, more conservative claims.&lt;/p&gt;

&lt;p&gt;Companion documents in this library:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;framework-eeat.md&lt;/code&gt; — Foundational E-E-A-T (YMYL applies elevated E-E-A-T standards)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-hcs.md&lt;/code&gt; — Helpful Content System&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-sqrg.md&lt;/code&gt; — Search Quality Rater Guidelines&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-coreupdates.md&lt;/code&gt; — Core Updates&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-infogain.md&lt;/code&gt; — Information Gain&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-entitysalience.md&lt;/code&gt; — Entity Salience&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-knowledgegraph.md&lt;/code&gt; — Knowledge Graph&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-aicitations.md&lt;/code&gt; — AI Citation Theory&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  About this framework library
&lt;/h2&gt;

&lt;p&gt;This article is the Dev.to republish of a framework reference document from ThatDevPro's SEO + AI engineering library. &lt;strong&gt;Canonical source: &lt;a href="https://www.thatdevpro.com/insights/framework-ymyl/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-ymyl/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio operating from Cassville, Missouri. The studio runs the full &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;14-tier Engine Optimization&lt;/a&gt; stack and ships open-source tooling for AI citation engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Companion 14-tier Engine Optimization stack&lt;/strong&gt; (each tier is its own article):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-1-foundation/" rel="noopener noreferrer"&gt;Tier 1 — Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-2-search-visibility/" rel="noopener noreferrer"&gt;Tier 2 — Search Visibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-3-ai-domination/" rel="noopener noreferrer"&gt;Tier 3 — AI Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-4-entity-and-authority/" rel="noopener noreferrer"&gt;Tier 4 — Entity and Authority&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-5-local-domination/" rel="noopener noreferrer"&gt;Tier 5 — Local Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-6-content-and-multimedia/" rel="noopener noreferrer"&gt;Tier 6 — Content and Multimedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-7-social-and-community/" rel="noopener noreferrer"&gt;Tier 7 — Social and Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-8-data-analytics-conversion/" rel="noopener noreferrer"&gt;Tier 8 — Data, Analytics, Conversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-9-monitoring-and-intelligence/" rel="noopener noreferrer"&gt;Tier 9 — Monitoring and Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-10-workflow-and-operations/" rel="noopener noreferrer"&gt;Tier 10 — Workflow and Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-11-marketplace-and-retail/" rel="noopener noreferrer"&gt;Tier 11 — Marketplace and Retail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-12-international/" rel="noopener noreferrer"&gt;Tier 12 — International&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-14-advanced-and-immersive/" rel="noopener noreferrer"&gt;Tier 14 — Advanced and Immersive&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Need this framework implemented on your site? &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;See the Engine Optimization service&lt;/a&gt; or hire through &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;ThatDevPro contact&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>googleseo</category>
      <category>ymyl</category>
      <category>codequality</category>
    </item>
    <item>
      <title>Schema.org + JSON-LD: the complete pattern reference</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 01:03:44 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/schemaorg-json-ld-the-complete-pattern-reference-143e</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/schemaorg-json-ld-the-complete-pattern-reference-143e</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-schema/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. &lt;a href="https://www.thatdevpro.com" rel="noopener noreferrer"&gt;ThatDevPro&lt;/a&gt; is an SDVOSB-certified veteran-owned web + AI engineering studio. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;JSON-LD Implementation, the &lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt; Graph Pattern, Per-Page Type Selection, and Validation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive installation and audit reference for structured data — the machine-readable layer that tells Google, AI crawlers, and other consumers what entities a page is about and how they relate. Every meaningful SERP feature, AI citation, and Knowledge Panel claim depends on this layer being correct. Dual-purpose: installation manual and audit document.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cross-stack implementation note&lt;/strong&gt;: the code samples in this framework are written in plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents of every pattern below, see &lt;a href="//framework-cross-stack-implementation.md"&gt;&lt;code&gt;framework-cross-stack-implementation.md&lt;/code&gt;&lt;/a&gt;. For pure client-rendered SPAs (no SSR/SSG) see &lt;a href="//framework-react.md"&gt;&lt;code&gt;framework-react.md&lt;/code&gt;&lt;/a&gt;. For Tailwind-specific concerns (purge, dynamic classes, dark-mode CLS, focus accessibility) see &lt;a href="//framework-tailwind.md"&gt;&lt;code&gt;framework-tailwind.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Document Purpose
&lt;/h2&gt;

&lt;p&gt;This is the canonical reference for schema.org structured data implementation. Schema is no longer optional in 2026 — it is the foundation that lets Google's Knowledge Graph populate, AI search engines extract claims, and SERP rich results render. A site without proper structured data is invisible to half of modern search.&lt;/p&gt;

&lt;p&gt;Schema in 2026 differs from schema in 2020 in three critical ways. First, the &lt;code&gt;@id&lt;/code&gt; graph pattern (cross-referenced nodes within a single &lt;code&gt;@graph&lt;/code&gt; block) has overtaken the older "one schema block per page" approach because it lets entities reference each other across the site. Second, AI search engines (ChatGPT, Perplexity, Claude, Gemini) rely on schema as a primary signal for entity extraction — accurate schema increases citation likelihood. Third, validation is non-negotiable: invalid schema is worse than no schema, because Google penalizes spam markup.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.1 Required Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Rich Results Test&lt;/strong&gt; — &lt;code&gt;search.google.com/test/rich-results&lt;/code&gt; — primary validator&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema.org Validator&lt;/strong&gt; — &lt;code&gt;validator.schema.org&lt;/code&gt; — comprehensive validator (accepts more types than Google's tool)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console — Enhancements section&lt;/strong&gt; — sitewide schema health monitoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yandex Microdata Validator&lt;/strong&gt; — &lt;code&gt;webmaster.yandex.com/tools/microtest/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON-LD Playground&lt;/strong&gt; — &lt;code&gt;json-ld.org/playground/&lt;/code&gt; — for graph experimentation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema App&lt;/strong&gt; / &lt;strong&gt;Schema Pro&lt;/strong&gt; — paid tooling for non-developer environments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yoast SEO&lt;/strong&gt; / &lt;strong&gt;Rank Math&lt;/strong&gt; — WordPress plugins with schema generators&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Browser DevTools&lt;/strong&gt; — Application &amp;gt; Frames &amp;gt; Structured Data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;curl&lt;/code&gt; + &lt;code&gt;jq&lt;/code&gt;&lt;/strong&gt; — extract and inspect JSON-LD from a URL programmatically&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1.2 Document Scope
&lt;/h3&gt;

&lt;p&gt;Covers: schema formats, &lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt; graph pattern, the major schema types every site needs, type-specific implementation per content type, validation methodology, sameAs networks, and common pitfalls. Touches but does not exhaust: Knowledge Graph claiming (own framework: &lt;code&gt;framework-knowledgegraph.md&lt;/code&gt;), AI citation mechanics (&lt;code&gt;framework-aicitations.md&lt;/code&gt;), Local SEO schema (&lt;code&gt;framework-localseo.md&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Client Variables Intake
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;business_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                      &lt;span class="c1"&gt;# local | ecommerce | publisher | b2b_service | sdvosb&lt;/span&gt;
&lt;span class="na"&gt;primary_entity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                     &lt;span class="c1"&gt;# Organization name&lt;/span&gt;
&lt;span class="na"&gt;person_entity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                      &lt;span class="c1"&gt;# Founder/author Person if relevant&lt;/span&gt;
&lt;span class="na"&gt;website_domain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;local_business_subtype&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;             &lt;span class="c1"&gt;# Restaurant | Plumber | Dentist | etc. — only if local&lt;/span&gt;
&lt;span class="na"&gt;ecommerce_product_count&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;existing_schema_present&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;existing_schema_format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;             &lt;span class="c1"&gt;# JSON-LD | Microdata | RDFa&lt;/span&gt;
&lt;span class="na"&gt;existing_schema_validated&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;wikidata_qid_org&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                   &lt;span class="c1"&gt;# if claimed&lt;/span&gt;
&lt;span class="na"&gt;wikidata_qid_person&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                &lt;span class="c1"&gt;# if claimed&lt;/span&gt;
&lt;span class="na"&gt;sameas_targets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;                     &lt;span class="c1"&gt;# LinkedIn, GitHub, Wikidata, Wikipedia, etc.&lt;/span&gt;
&lt;span class="na"&gt;known_schema_errors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Schema Format Decision
&lt;/h2&gt;

&lt;p&gt;Three formats are valid. Pick one and stick with it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Recommendation&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JSON-LD&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Use this.&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Decoupled from rendered HTML; survives template changes; preferred by Google; trivial to maintain.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microdata&lt;/td&gt;
&lt;td&gt;Avoid for new builds&lt;/td&gt;
&lt;td&gt;Inline HTML attributes; brittle; tied to template structure.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RDFa&lt;/td&gt;
&lt;td&gt;Avoid for new builds&lt;/td&gt;
&lt;td&gt;Similar drawbacks to Microdata; less common.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;JSON-LD lives in a &lt;code&gt;&amp;lt;script type="application/ld+json"&amp;gt;&lt;/code&gt; block in the document head (or anywhere in the body — head is conventional). It does not need to mirror the visible HTML.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The &lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt; Graph Pattern
&lt;/h2&gt;

&lt;p&gt;This is the single most important pattern in modern schema implementation. Older sites declared one schema block per type per page, with no cross-references. The graph pattern declares all entities in one &lt;code&gt;@graph&lt;/code&gt; block with cross-referenced &lt;code&gt;@id&lt;/code&gt; URIs, letting Google reconstruct the entity relationships.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 Anatomy of a Graph
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@graph&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Organization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ProfessionalService&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;LocalBusiness&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/#organization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Example Co&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sameAs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.wikidata.org/wiki/Q12345&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.linkedin.com/company/example&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://github.com/example&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;founder&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/#founder&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Person&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/#founder&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Joseph W. Anady&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sameAs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.wikidata.org/wiki/Q139592630&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.linkedin.com/in/josephanady&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;worksFor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/#organization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;knowsAbout&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Technical SEO&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;AI search optimization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WebSite&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/#website&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Example Co&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;publisher&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/#organization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;WebPage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/about/#webpage&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/about/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;About — Example Co&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;isPartOf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/#website&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;about&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/#organization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 The &lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt; Convention
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;@id&lt;/code&gt; values are URIs. Use absolute URLs with a fragment identifier (&lt;code&gt;#&lt;/code&gt;) to disambiguate entities on the same page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;https://example.com/#organization&lt;/code&gt; — the Organization entity&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://example.com/#website&lt;/code&gt; — the WebSite entity&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://example.com/#founder&lt;/code&gt; — the Person entity&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://example.com/about/#webpage&lt;/code&gt; — the About page WebPage entity&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://example.com/blog/post-name/#article&lt;/code&gt; — an Article entity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;@id&lt;/code&gt; does NOT need to resolve to a real URL. It is just a unique identifier within the graph.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3 Cross-Page Consistency
&lt;/h3&gt;

&lt;p&gt;Every page on the site declares the same Organization, WebSite, and Person entities (with the same &lt;code&gt;@id&lt;/code&gt; URIs). Page-specific entities (WebPage, Article, Service, Product) reference back via &lt;code&gt;@id&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Article"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/blog/post/#article"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"headline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Post Title"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#founder"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publisher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#organization"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"isPartOf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/blog/post/#webpage"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This cross-referencing is what gives Google's Knowledge Graph the connectivity it needs to attribute Articles to Authors, Authors to Organizations, and Organizations to Knowledge Panel entries.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. The Foundation Schemas
&lt;/h2&gt;

&lt;p&gt;Every meaningful site needs these. Implement them sitewide before any page-specific schema.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Organization
&lt;/h3&gt;

&lt;p&gt;Required for every site. If the business has a physical location, extend with LocalBusiness; if it serves a profession, extend with ProfessionalService.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Organization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ProfessionalService"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LocalBusiness"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#organization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Example Co"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"alternateName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Example"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"logo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ImageObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/logo.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"width"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"height"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/og-default.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Plain-English description matching the site's actual purpose."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"telephone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+1-505-512-3662"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"hello@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"priceRange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$597-$11997"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PostalAddress"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"streetAddress"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"123 Main St"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"addressLocality"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cassville"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"addressRegion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MO"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"postalCode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"65625"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"addressCountry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"US"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"geo"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GeoCoordinates"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"latitude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;36.6811&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"longitude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;-93.8702&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"areaServed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AdministrativeArea"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Northwest Arkansas"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AdministrativeArea"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Southwest Missouri"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"founder"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#founder"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"foundingDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2017-01-01"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sameAs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://www.wikidata.org/wiki/Q139592631"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://www.linkedin.com/company/example"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com/example"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.2 Person
&lt;/h3&gt;

&lt;p&gt;For owner-operated businesses, sole-proprietor agencies, and any site with named editorial authors. Critical for E-E-A-T.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Person"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#founder"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Joseph W. Anady"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"givenName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Joseph"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"additionalName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"W."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"familyName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Anady"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"jobTitle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Founder"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"worksFor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#organization"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/joseph.jpg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/about/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"knowsAbout"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Technical SEO"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Local SEO"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AI search optimization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Schema markup"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SDVOSB digital marketing"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"knowsLanguage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"English"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"alumniOf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"U.S. Army"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sameAs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://www.wikidata.org/wiki/Q139592630"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://www.linkedin.com/in/josephanady"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://github.com/josephanady"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cross-reference: &lt;code&gt;framework-eeat.md&lt;/code&gt; for Person schema's role in expertise signals; &lt;code&gt;framework-knowledgegraph.md&lt;/code&gt; for sameAs network construction.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 WebSite
&lt;/h3&gt;

&lt;p&gt;Declares the site itself as an entity. Enables sitelinks search box.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"WebSite"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#website"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Example Co"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publisher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#organization"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"inLanguage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"en-US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"potentialAction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SearchAction"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EntryPoint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"urlTemplate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/search?q={search_term_string}"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"query-input"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"required name=search_term_string"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.4 WebPage (per-page)
&lt;/h3&gt;

&lt;p&gt;Every page declares itself as a WebPage. Subtypes when applicable: AboutPage, ContactPage, FAQPage, CollectionPage.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"WebPage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/about/#webpage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/about/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"About — Example Co"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"About page meta description."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"isPartOf"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#website"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"about"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#organization"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"primaryImageOfPage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ImageObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/about-hero.jpg"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"datePublished"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-01-15"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dateModified"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-05-05"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"breadcrumb"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/about/#breadcrumb"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.5 BreadcrumbList
&lt;/h3&gt;

&lt;p&gt;For every non-homepage. Drives breadcrumb display in SERPs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BreadcrumbList"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/about/#breadcrumb"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"itemListElement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ListItem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"position"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Home"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"item"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ListItem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"position"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"About"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"item"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/about/"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  6. Per-Content-Type Schemas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Article (blog post, news story, editorial)
&lt;/h3&gt;

&lt;p&gt;Use &lt;code&gt;Article&lt;/code&gt;, &lt;code&gt;NewsArticle&lt;/code&gt;, &lt;code&gt;BlogPosting&lt;/code&gt;, or &lt;code&gt;TechArticle&lt;/code&gt; depending on content. &lt;code&gt;Article&lt;/code&gt; is the safe default.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Article"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/blog/post-slug/#article"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"headline"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Post headline (under 110 characters)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Meta description."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/post-image-1x1.jpg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/post-image-4x3.jpg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/post-image-16x9.jpg"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#founder"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publisher"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#organization"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"datePublished"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-15T10:00:00-05:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dateModified"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-05-05T14:30:00-05:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mainEntityOfPage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/blog/post-slug/#webpage"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"wordCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"articleBody"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"First 200 characters of body, optional but improves AI extraction."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"technical seo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"schema"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"json-ld"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Image best practice: provide three images at three aspect ratios (1x1, 4x3, 16x9). Google selects the best fit per surface.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.2 Service
&lt;/h3&gt;

&lt;p&gt;For service-based businesses describing what they offer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Service"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/services/local-seo/#service"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Local SEO for Northwest Arkansas"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Description of the service offered."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"provider"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#organization"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"serviceType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Local SEO"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"areaServed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AdministrativeArea"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Northwest Arkansas"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"hasOfferCatalog"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OfferCatalog"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Local SEO Services"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"itemListElement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Offer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"itemOffered"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Service"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Google Business Profile setup"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"597"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"priceCurrency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.3 Product (ecommerce)
&lt;/h3&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-ecommerceseo.md&lt;/code&gt; for full product schema depth.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Product"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/products/sku-123/#product"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Product Name"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Product description."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"image"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/product.jpg"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"sku"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SKU-123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"gtin13"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"1234567890123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"brand"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Brand"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Brand Name"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"offers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Offer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/products/sku-123/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"priceCurrency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"USD"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"29.99"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"priceValidUntil"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-12-31"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"availability"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.org/InStock"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"itemCondition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.org/NewCondition"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"shippingDetails"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OfferShippingDetails"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"hasMerchantReturnPolicy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MerchantReturnPolicy"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"aggregateRating"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AggregateRating"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ratingValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4.8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"reviewCount"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"127"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;aggregateRating&lt;/code&gt; is only valid if you actually have those reviews on-site. Fabricating reviews is a manual-action violation. Cross-reference: &lt;code&gt;framework-spampolicies.md&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.4 LocalBusiness (with subtype)
&lt;/h3&gt;

&lt;p&gt;For local businesses, use the most specific subtype available. Schema.org has hundreds: &lt;code&gt;Restaurant&lt;/code&gt;, &lt;code&gt;Plumber&lt;/code&gt;, &lt;code&gt;Dentist&lt;/code&gt;, &lt;code&gt;HVACBusiness&lt;/code&gt;, &lt;code&gt;RealEstateAgent&lt;/code&gt;, &lt;code&gt;LegalService&lt;/code&gt;, &lt;code&gt;MedicalBusiness&lt;/code&gt;, &lt;code&gt;HomeAndConstructionBusiness&lt;/code&gt;, etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"LocalBusiness"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Plumber"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#organization"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Example Plumbing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"telephone"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"+1-555-555-5555"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PostalAddress"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"openingHoursSpecification"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OpeningHoursSpecification"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"dayOfWeek"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Monday"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Tuesday"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Wednesday"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Thursday"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Friday"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"opens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"08:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"closes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"17:00"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"priceRange"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$$"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cross-reference: &lt;code&gt;framework-localseo.md&lt;/code&gt; for full LocalBusiness depth.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.5 FAQPage
&lt;/h3&gt;

&lt;p&gt;Only when the page actually answers questions. Misuse triggers manual actions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FAQPage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/faq/#faqpage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mainEntity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Question"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"How long does local SEO take to show results?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"acceptedAnswer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Answer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Most clients see Local Pack improvements within 30-60 days..."&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;FAQ rich results were largely deprecated by Google in 2023 for non-government / non-health sites, but the schema still feeds AI extraction. Keep using it where it accurately describes the page; do not expect rich results.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.6 HowTo
&lt;/h3&gt;

&lt;p&gt;For genuine step-by-step instructions. Like FAQ, rich results were curtailed in 2023 but the schema remains useful for AI extraction.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HowTo"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"How to claim a Google Business Profile"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"step"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HowToStep"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Sign in to Google Business Profile"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Visit business.google.com and sign in..."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.7 Event
&lt;/h3&gt;

&lt;p&gt;For dated events.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Event"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Workshop on Local SEO"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"startDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-15T18:00:00-05:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"endDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-06-15T20:00:00-05:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Place"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Cassville Chamber"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"address"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PostalAddress"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"organizer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#organization"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"eventStatus"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.org/EventScheduled"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"eventAttendanceMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://schema.org/OfflineEventAttendanceMode"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.8 Review (single review)
&lt;/h3&gt;

&lt;p&gt;When a page is genuinely a single review of one product/service.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Review"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"itemReviewed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Product"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Product Name"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"author"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"@id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/#founder"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"reviewRating"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Rating"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ratingValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"4.5"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"bestRating"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"datePublished"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-01"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.9 VideoObject
&lt;/h3&gt;

&lt;p&gt;For pages embedding or hosting video. Required for video sitemap inclusion.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"VideoObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Video Title"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Video description."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"thumbnailUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/thumb.jpg"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"uploadDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-04-01T08:00:00-05:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"duration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PT5M30S"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"contentUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example.com/video.mp4"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"embedUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.youtube.com/embed/abc123"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cross-reference: &lt;code&gt;framework-videoseo.md&lt;/code&gt; for full video implementation.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.10 Other Useful Types
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Course&lt;/code&gt; — for educational content&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Recipe&lt;/code&gt; — for food sites&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;JobPosting&lt;/code&gt; — for hiring pages&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;RealEstateListing&lt;/code&gt; — for property listings&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;MedicalCondition&lt;/code&gt; / &lt;code&gt;Drug&lt;/code&gt; — for YMYL medical content (high standard required)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SoftwareApplication&lt;/code&gt; — for tools/apps&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;DataCatalog&lt;/code&gt; / &lt;code&gt;Dataset&lt;/code&gt; — for structured data publishers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ItemList&lt;/code&gt; — for lists of any kind&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. The sameAs Network
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;sameAs&lt;/code&gt; declares external canonical identifiers for an entity. This is how Google's Knowledge Graph builds entity confidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 sameAs Hierarchy of Trust
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;th&gt;Weight&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Wikidata&lt;/td&gt;
&lt;td&gt;Highest&lt;/td&gt;
&lt;td&gt;Entity ID format: &lt;code&gt;https://www.wikidata.org/wiki/Q12345&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wikipedia&lt;/td&gt;
&lt;td&gt;Very high&lt;/td&gt;
&lt;td&gt;Article URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Crunchbase (orgs)&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Verified company entries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;LinkedIn (orgs and persons)&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Verified accounts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub (devs/orgs)&lt;/td&gt;
&lt;td&gt;High when relevant&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Twitter/X&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Verified accounts only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Facebook&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Page (not personal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Instagram&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Business profiles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YouTube&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Channel URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Personal website&lt;/td&gt;
&lt;td&gt;Low (when used as sameAs from another entity)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Random social network&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Avoid noise&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Cross-reference: &lt;code&gt;framework-knowledgegraph.md&lt;/code&gt; for Wikidata claiming methodology.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.2 sameAs Hygiene
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Only declare sameAs for entities you actually own and control.&lt;/li&gt;
&lt;li&gt;Verify each sameAs target resolves and represents the same entity.&lt;/li&gt;
&lt;li&gt;Do not include URL shorteners or redirects in sameAs.&lt;/li&gt;
&lt;li&gt;Update sameAs when external profiles move.&lt;/li&gt;
&lt;li&gt;Both directions matter: the external profile should also link back to the canonical site.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Schema Implementation Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8.1 The Sitewide Block
&lt;/h3&gt;

&lt;p&gt;Every page on the site emits the same Organization, WebSite, and Person entities. Implement once in your template head:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Sitewide schema graph (every page) --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@graph&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* Organization */&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* Person */&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* WebSite */&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  8.2 The Page-Specific Block
&lt;/h3&gt;

&lt;p&gt;Each page adds its specific entities (WebPage, Article, BreadcrumbList, etc.) referencing the sitewide entities via &lt;code&gt;@id&lt;/code&gt;. Two valid patterns:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pattern A: Two separate script tags&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sitewide block in template head&lt;/li&gt;
&lt;li&gt;Page-specific block in template body or a content-type-specific include&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pattern B: Merged graph&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single script tag combining sitewide + page-specific entities&lt;/li&gt;
&lt;li&gt;Cleaner output; more complex template logic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pattern A is easier to maintain. Pattern B is what Yoast / Rank Math output.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.3 Dynamic Sites
&lt;/h3&gt;

&lt;p&gt;For React, Next.js, Astro, Hugo, etc., the schema is built from data at render time. Maintain a single &lt;code&gt;schema.ts&lt;/code&gt; (or equivalent) module that exports typed builders:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;organizationSchema&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nx"&gt;Organization&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* ... */&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;articleSchema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;Article&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* ... */&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;pageSchema&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Page&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;WebPage&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* ... */&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tests assert the output validates. Cross-reference: &lt;code&gt;framework-nextjs.md&lt;/code&gt;, &lt;code&gt;framework-astrohugo.md&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.4 WordPress Sites
&lt;/h3&gt;

&lt;p&gt;Yoast and Rank Math both output JSON-LD using the &lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt; graph pattern. Verify their output rather than rebuilding. Common gotchas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yoast and Rank Math both running → duplicate schema. Pick one.&lt;/li&gt;
&lt;li&gt;Theme adding schema in addition to the plugin → duplicate or conflicting. Strip theme schema.&lt;/li&gt;
&lt;li&gt;Plugin defaults inadequate (e.g., missing Person schema for the site owner) → use plugin's customization hooks.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Validation Methodology
&lt;/h2&gt;

&lt;h3&gt;
  
  
  9.1 Per-URL Validation
&lt;/h3&gt;

&lt;p&gt;Three tools to run on every important page:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Google Rich Results Test&lt;/strong&gt; — confirms Google can parse and what rich results are eligible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema.org Validator&lt;/strong&gt; — confirms strict schema.org compliance (catches issues Google's tool doesn't).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yandex Microdata Validator&lt;/strong&gt; — third opinion; sometimes catches edge cases.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A page that passes all three is in good shape.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.2 Sitewide Validation
&lt;/h3&gt;

&lt;p&gt;For sites with many URLs, sample-test rather than per-URL:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pick one URL per content type (homepage, About, blog post, service page, product page if ecommerce, etc.)&lt;/li&gt;
&lt;li&gt;Run the three validators on each&lt;/li&gt;
&lt;li&gt;Crawl the site with Screaming Frog — Custom Extraction can pull JSON-LD blocks from every URL&lt;/li&gt;
&lt;li&gt;Programmatically parse and validate (custom script + schema.org's Java validator or a Node lib like &lt;code&gt;structured-data-testing-tool&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9.3 GSC Enhancements Monitoring
&lt;/h3&gt;

&lt;p&gt;Google Search Console's Enhancements section reports schema-related issues sitewide. Categories include Articles, Products, FAQs, How-tos, Breadcrumbs, Sitelinks searchbox, Logos, etc. Check monthly. New errors usually indicate a template change broke schema for a content type.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Schema for AI Search
&lt;/h2&gt;

&lt;p&gt;In 2026, AI search engines (ChatGPT, Perplexity, Claude, Gemini, Copilot) use schema as a primary signal for entity extraction. Practical implications:&lt;/p&gt;

&lt;h3&gt;
  
  
  10.1 Make Claims Extractable
&lt;/h3&gt;

&lt;p&gt;AI engines parse schema looking for atomic facts: "Joseph W. Anady is the founder of That Stupid Computer," "That Stupid Computer is a SDVOSB business in Cassville, Missouri." Express these as schema:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;founder&lt;/code&gt; relationship between Person and Organization&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;address.addressLocality&lt;/code&gt; for the city&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;award&lt;/code&gt;, &lt;code&gt;honorificPrefix&lt;/code&gt;, certifications declared on Person&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;description&lt;/code&gt; written as plain prose, not marketing copy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.2 Don't Hide Facts in Prose Only
&lt;/h3&gt;

&lt;p&gt;A page can have a clear fact in body text ("we serve all of Northwest Arkansas") but if it isn't also in the schema (&lt;code&gt;areaServed&lt;/code&gt;), AI engines may miss it.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.3 Use Specific Subtypes
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;Organization&lt;/code&gt; is too generic. &lt;code&gt;LocalBusiness&lt;/code&gt; is better. &lt;code&gt;Plumber&lt;/code&gt; (a LocalBusiness subtype) is best because it matches a query category. AI search engines weight specificity.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.4 The answer-capsule Pattern
&lt;/h3&gt;

&lt;p&gt;Pair schema with a 200-300 word "answer capsule" paragraph in the visible page content that AI extractors can copy verbatim. The schema gives them entity confidence; the prose gives them the quote. Cross-reference: &lt;code&gt;framework-aicitations.md&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Audit Mode
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SC1&lt;/td&gt;
&lt;td&gt;Format is JSON-LD (not Microdata or RDFa)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC2&lt;/td&gt;
&lt;td&gt;Sitewide Organization schema present on every page&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC3&lt;/td&gt;
&lt;td&gt;Sitewide WebSite schema present on every page&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC4&lt;/td&gt;
&lt;td&gt;Person schema for owner/key author present and referenced from Organization&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC5&lt;/td&gt;
&lt;td&gt;Per-page WebPage schema present, references WebSite via &lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt;
&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC6&lt;/td&gt;
&lt;td&gt;BreadcrumbList present on every non-homepage&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC7&lt;/td&gt;
&lt;td&gt;
&lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt; graph pattern used (entities cross-reference via &lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt;, not duplicated)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC8&lt;/td&gt;
&lt;td&gt;All &lt;a class="mentioned-user" href="https://dev.to/id"&gt;@id&lt;/a&gt; values are absolute URLs with fragment identifier&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC9&lt;/td&gt;
&lt;td&gt;sameAs network includes Wikidata Q-ID where claimed&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC10&lt;/td&gt;
&lt;td&gt;sameAs network includes 3+ authoritative external profiles&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC11&lt;/td&gt;
&lt;td&gt;Article schema on every editorial page with author + publisher refs&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC12&lt;/td&gt;
&lt;td&gt;Service or Product schema on every commercial page&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC13&lt;/td&gt;
&lt;td&gt;LocalBusiness with specific subtype if local business&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC14&lt;/td&gt;
&lt;td&gt;All schema URLs use HTTPS&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC15&lt;/td&gt;
&lt;td&gt;Image fields point to existing assets, correct dimensions&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC16&lt;/td&gt;
&lt;td&gt;datePublished and dateModified accurate (not faked)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC17&lt;/td&gt;
&lt;td&gt;aggregateRating only present if reviews actually exist&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC18&lt;/td&gt;
&lt;td&gt;FAQPage schema only on pages that genuinely answer questions&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC19&lt;/td&gt;
&lt;td&gt;No deprecated types (&lt;code&gt;hCard&lt;/code&gt;, &lt;code&gt;hReview&lt;/code&gt;, etc.)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC20&lt;/td&gt;
&lt;td&gt;Google Rich Results Test passes for sample of 5+ pages&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC21&lt;/td&gt;
&lt;td&gt;Schema.org Validator passes for sample of 5+ pages&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC22&lt;/td&gt;
&lt;td&gt;GSC Enhancements section shows zero errors (warnings acceptable)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC23&lt;/td&gt;
&lt;td&gt;No duplicate schema (multiple plugins emitting overlapping blocks)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC24&lt;/td&gt;
&lt;td&gt;sameAs targets verified to resolve and represent same entity&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC25&lt;/td&gt;
&lt;td&gt;Schema present in initial HTML (not added by client-side JS)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC26&lt;/td&gt;
&lt;td&gt;Schema identical on mobile and desktop&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC27&lt;/td&gt;
&lt;td&gt;Article images provided in 1x1, 4x3, 16x9 ratios&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC28&lt;/td&gt;
&lt;td&gt;Wikidata Q-ID present in Person and Organization sameAs if claimed&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC29&lt;/td&gt;
&lt;td&gt;Specific LocalBusiness subtype used (not generic LocalBusiness)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SC30&lt;/td&gt;
&lt;td&gt;Sitewide schema validated quarterly&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 30. World-class: 28+/30.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Common Mistakes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Microdata or RDFa instead of JSON-LD.&lt;/strong&gt; Maintainability nightmare.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One schema per page, no &lt;a class="mentioned-user" href="https://dev.to/graph"&gt;@graph&lt;/a&gt;.&lt;/strong&gt; Misses the cross-referencing benefit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Person schema.&lt;/strong&gt; Erases E-E-A-T author signals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generic LocalBusiness.&lt;/strong&gt; &lt;code&gt;Plumber&lt;/code&gt; or &lt;code&gt;Dentist&lt;/code&gt; is far stronger than &lt;code&gt;LocalBusiness&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fabricated aggregateRating.&lt;/strong&gt; Manual-action territory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FAQ schema on pages that aren't FAQs.&lt;/strong&gt; Same.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema added by client-side JavaScript.&lt;/strong&gt; Some crawlers see it; many don't.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Duplicate schema from multiple plugins.&lt;/strong&gt; Yoast + Rank Math + theme = three Organization blocks. Conflicting signals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;@id&lt;/code&gt; values that aren't URIs.&lt;/strong&gt; Use absolute URLs with &lt;code&gt;#&lt;/code&gt; fragments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image fields pointing to broken assets.&lt;/strong&gt; Schema validates but rich results don't show.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;datePublished after dateModified.&lt;/strong&gt; Logical impossibility, occasionally happens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;sameAs targets that don't resolve.&lt;/strong&gt; Dead links erode signal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema on staging visible to crawlers.&lt;/strong&gt; Robots-blocked staging still gets indexed sometimes; schema there pollutes the entity graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema not updated when content changes.&lt;/strong&gt; Stale &lt;code&gt;wordCount&lt;/code&gt;, stale &lt;code&gt;dateModified&lt;/code&gt;, stale &lt;code&gt;description&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skipping BreadcrumbList.&lt;/strong&gt; Trivial to implement, immediate SERP benefit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Over-decorating schema with marketing language.&lt;/strong&gt; "Best plumber in Cassville" in &lt;code&gt;description&lt;/code&gt; instead of plain prose. AI extractors discount marketing phrases.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  13. Maintenance
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Weekly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spot-check newly published content for correct schema&lt;/li&gt;
&lt;li&gt;Monitor GSC Enhancements for new errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Monthly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sitewide validation sample (5 representative URLs through Rich Results Test)&lt;/li&gt;
&lt;li&gt;Review GSC Enhancements report&lt;/li&gt;
&lt;li&gt;Verify sameAs targets still resolve&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quarterly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive schema audit (every content type sampled)&lt;/li&gt;
&lt;li&gt;Validate Wikidata Q-IDs still claimed&lt;/li&gt;
&lt;li&gt;Refresh any schema fields that depend on counted data (review counts, post counts, etc.)&lt;/li&gt;
&lt;li&gt;Review new Schema.org types released; adopt where applicable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Annually:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full sitewide JSON-LD extraction and programmatic validation&lt;/li&gt;
&lt;li&gt;Review schema strategy against new SERP features and AI search developments&lt;/li&gt;
&lt;li&gt;Verify schema authoring tools (plugins, modules) are up to date&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  14. Companion Documents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;framework-knowledgegraph.md&lt;/code&gt; — Wikidata claiming, Knowledge Panel, sameAs network construction&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-eeat.md&lt;/code&gt; — Person schema's role in E-E-A-T signals&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-localseo.md&lt;/code&gt; — LocalBusiness subtype selection and full local schema depth&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-aicitations.md&lt;/code&gt; — Schema's role in AI search citation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-ecommerceseo.md&lt;/code&gt; — Product schema, MerchantReturnPolicy, OfferShippingDetails&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-videoseo.md&lt;/code&gt; — VideoObject and video sitemap&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-spampolicies.md&lt;/code&gt; — Schema spam policies (fabricated reviews, FAQ misuse)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-internallinking.md&lt;/code&gt; — BreadcrumbList placement strategy&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-technicalseo.md&lt;/code&gt; — Schema's place in the indexing pipeline&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Document version&lt;/strong&gt;: 1.0&lt;br&gt;
&lt;strong&gt;Last updated&lt;/strong&gt;: 2026-05-05&lt;br&gt;
&lt;strong&gt;Owner&lt;/strong&gt;: Joseph W. Anady — ThatDeveloperGuy — SDVOSB&lt;/p&gt;




&lt;h2&gt;
  
  
  About this framework library
&lt;/h2&gt;

&lt;p&gt;This article is the Dev.to republish of a framework reference document from ThatDevPro's SEO + AI engineering library. &lt;strong&gt;Canonical source: &lt;a href="https://www.thatdevpro.com/insights/framework-schema/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-schema/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio operating from Cassville, Missouri. The studio runs the full &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;14-tier Engine Optimization&lt;/a&gt; stack and ships open-source tooling for AI citation engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Companion 14-tier Engine Optimization stack&lt;/strong&gt; (each tier is its own article):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-1-foundation/" rel="noopener noreferrer"&gt;Tier 1 — Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-2-search-visibility/" rel="noopener noreferrer"&gt;Tier 2 — Search Visibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-3-ai-domination/" rel="noopener noreferrer"&gt;Tier 3 — AI Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-4-entity-and-authority/" rel="noopener noreferrer"&gt;Tier 4 — Entity and Authority&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-5-local-domination/" rel="noopener noreferrer"&gt;Tier 5 — Local Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-6-content-and-multimedia/" rel="noopener noreferrer"&gt;Tier 6 — Content and Multimedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-7-social-and-community/" rel="noopener noreferrer"&gt;Tier 7 — Social and Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-8-data-analytics-conversion/" rel="noopener noreferrer"&gt;Tier 8 — Data, Analytics, Conversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-9-monitoring-and-intelligence/" rel="noopener noreferrer"&gt;Tier 9 — Monitoring and Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-10-workflow-and-operations/" rel="noopener noreferrer"&gt;Tier 10 — Workflow and Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-11-marketplace-and-retail/" rel="noopener noreferrer"&gt;Tier 11 — Marketplace and Retail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-12-international/" rel="noopener noreferrer"&gt;Tier 12 — International&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-14-advanced-and-immersive/" rel="noopener noreferrer"&gt;Tier 14 — Advanced and Immersive&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Need this framework implemented on your site? &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;See the Engine Optimization service&lt;/a&gt; or hire through &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;ThatDevPro contact&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>schema</category>
      <category>webdev</category>
      <category>jsonld</category>
    </item>
    <item>
      <title>Wikidata, Wikipedia, and Knowledge Graph entity engineering</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 01:03:36 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/wikidata-wikipedia-and-knowledge-graph-entity-engineering-353n</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/wikidata-wikipedia-and-knowledge-graph-entity-engineering-353n</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-knowledgegraph/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. &lt;a href="https://www.thatdevpro.com" rel="noopener noreferrer"&gt;ThatDevPro&lt;/a&gt; is an SDVOSB-certified veteran-owned web + AI engineering studio. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Establishing Entities in Google's Knowledge Graph — Wikidata, Wikipedia, and the Entity Web&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive installation and audit reference for establishing a business and its key entities in Google's Knowledge Graph, claiming and managing the Knowledge Panel, building reciprocal entity reconciliation across the web, and maintaining the entity authority that compounds across rankings, AI engines, and brand search results. This document is dual-purpose: installation manual and audit document.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cross-stack implementation note&lt;/strong&gt;: the code samples in this framework are written in plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents of every pattern below, see &lt;a href="//framework-cross-stack-implementation.md"&gt;&lt;code&gt;framework-cross-stack-implementation.md&lt;/code&gt;&lt;/a&gt;. For pure client-rendered SPAs (no SSR/SSG) see &lt;a href="//framework-react.md"&gt;&lt;code&gt;framework-react.md&lt;/code&gt;&lt;/a&gt;. For Tailwind-specific concerns (purge, dynamic classes, dark-mode CLS, focus accessibility) see &lt;a href="//framework-tailwind.md"&gt;&lt;code&gt;framework-tailwind.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Document Purpose &amp;amp; How to Use This Document
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 What This Document Is
&lt;/h3&gt;

&lt;p&gt;This is the canonical reference for establishing entities in Google's Knowledge Graph (KG). The Knowledge Graph is Google's database of entities and their relationships — people, places, organizations, products, concepts, events. When Google recognizes an entity in its Knowledge Graph, that recognition manifests as Knowledge Panels in search results, populates AI Overviews, drives entity-based ranking, and feeds the data that LLMs train on.&lt;/p&gt;

&lt;p&gt;This framework specifies how to assess current entity recognition status, how to build the foundation for entity recognition (Wikidata being the primary path), how to pursue Wikipedia inclusion when notability supports it, how to claim and optimize the Knowledge Panel when it appears, and how to maintain entity authority over time. It also specifies entity reconciliation — the process by which Google associates external profiles, references, and data points with the canonical entity in its Knowledge Graph.&lt;/p&gt;

&lt;p&gt;Entity authority compounds. Every authoritative reference, every Wikidata property added, every Wikipedia mention, every reciprocal external link reinforces Google's confidence in the entity. Conversely, weak or fragmented entity signals leave Google uncertain — and uncertain entities don't get Knowledge Panels, don't rank as authoritatively, and don't get cited by AI engines.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Three Operating Modes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mode A — Install Mode&lt;/strong&gt;: Building entity recognition from scratch or adding to existing presence. Follow Sections 2 → 14.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode B — Audit Mode&lt;/strong&gt;: Evaluating existing Knowledge Graph status. Skip to Section 11.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode C — Hybrid Mode&lt;/strong&gt;: Audit then install for gaps.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3 How Claude Code CLI Should Consume This Document
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read Section 2&lt;/strong&gt; — collect client variables, especially existing entity references&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read Section 3&lt;/strong&gt; — understand the Knowledge Graph and entity ecosystem&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run Section 4&lt;/strong&gt; — assess current entity recognition status&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install Sections 5-9&lt;/strong&gt; — Wikidata first, then external reconciliation, then Wikipedia if notable, then Knowledge Panel claim&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate&lt;/strong&gt; — Section 11&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate report&lt;/strong&gt; — Section 14&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1.4 Conflict Resolution Rules
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Conflict&lt;/th&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Existing Wikidata entry with errors&lt;/td&gt;
&lt;td&gt;Audit; correct via standard Wikidata editing process. Do not delete and recreate.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing Wikipedia article with errors&lt;/td&gt;
&lt;td&gt;Use talk page to discuss; let community editors handle changes. Don't edit your own entry.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multiple Wikidata entries for same entity&lt;/td&gt;
&lt;td&gt;Use merge process; flag for review by Wikidata community.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Panel showing wrong information&lt;/td&gt;
&lt;td&gt;Suggest edit through Knowledge Panel suggest-edit feature.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entity name conflict with existing notable entity&lt;/td&gt;
&lt;td&gt;Disambiguate clearly; never try to claim someone else's entity.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1.5 Required Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Wikidata&lt;/strong&gt; — &lt;code&gt;wikidata.org&lt;/code&gt; — primary platform for entity creation and management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wikipedia&lt;/strong&gt; — &lt;code&gt;wikipedia.org&lt;/code&gt; — for notable entities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console&lt;/strong&gt; — to verify Knowledge Panel claim eligibility&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Knowledge Graph Search API&lt;/strong&gt; — &lt;code&gt;developers.google.com/knowledge-graph&lt;/code&gt; — to verify entity recognition&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenRefine&lt;/strong&gt; — &lt;code&gt;openrefine.org&lt;/code&gt; — for batch entity reconciliation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wikidata Query Service&lt;/strong&gt; — &lt;code&gt;query.wikidata.org&lt;/code&gt; — for testing Wikidata entries&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Client Variables Intake
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================&lt;/span&gt;
&lt;span class="c1"&gt;# KNOWLEDGE GRAPH FRAMEWORK CLIENT VARIABLES&lt;/span&gt;
&lt;span class="c1"&gt;# ============================================&lt;/span&gt;

&lt;span class="c1"&gt;# --- Business Entity (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;business_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                    &lt;span class="c1"&gt;# Canonical name as entity&lt;/span&gt;
&lt;span class="na"&gt;business_alternate_names&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;         &lt;span class="c1"&gt;# All variations&lt;/span&gt;
&lt;span class="na"&gt;business_legal_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;              &lt;span class="c1"&gt;# If different from canonical&lt;/span&gt;
&lt;span class="na"&gt;business_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;                    &lt;span class="c1"&gt;# Schema.org type&lt;/span&gt;
&lt;span class="na"&gt;business_founded_year&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_founder_names&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;business_founder_qids&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;            &lt;span class="c1"&gt;# Wikidata QIDs if exist&lt;/span&gt;
&lt;span class="na"&gt;business_industry&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_industry_qid&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;            &lt;span class="c1"&gt;# Wikidata industry classification&lt;/span&gt;
&lt;span class="na"&gt;business_headquarters_city&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_headquarters_country&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_official_website&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# --- Existing Entity Recognition Status (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;business_in_knowledge_graph&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;   &lt;span class="c1"&gt;# Use Knowledge Graph Search API to check&lt;/span&gt;
&lt;span class="na"&gt;business_knowledge_panel_appears&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# Search business name; does panel appear?&lt;/span&gt;
&lt;span class="na"&gt;business_wikidata_qid&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;            &lt;span class="c1"&gt;# Existing Wikidata entry if any&lt;/span&gt;
&lt;span class="na"&gt;business_wikipedia_article_exists&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;business_wikipedia_article_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# --- Founder Entity (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;founder_full_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;founder_alternate_names&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;founder_birth_year&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;               &lt;span class="c1"&gt;# Optional but helps disambiguation&lt;/span&gt;
&lt;span class="na"&gt;founder_credentials&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;founder_employer_qid&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;             &lt;span class="c1"&gt;# Wikidata QID for current/founded business&lt;/span&gt;
&lt;span class="na"&gt;founder_in_knowledge_graph&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;founder_wikidata_qid&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;founder_wikipedia_article_exists&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Notability Assessment (REQUIRED for Wikipedia) ---&lt;/span&gt;
&lt;span class="na"&gt;business_independent_secondary_sources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;  &lt;span class="c1"&gt;# URLs of substantial coverage in independent publications&lt;/span&gt;
&lt;span class="na"&gt;business_passes_wikipedia_notability_test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;founder_independent_secondary_sources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;founder_passes_wikipedia_notability_test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- External Profile Inventory (REQUIRED for sameAs reconciliation) ---&lt;/span&gt;
&lt;span class="na"&gt;business_linkedin_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_x_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_facebook_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_youtube_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_github_org_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_crunchbase_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_bbb_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_chamber_of_commerce_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;business_industry_directory_urls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;

&lt;span class="na"&gt;founder_linkedin_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;founder_x_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;founder_github_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;founder_huggingface_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;founder_orcid&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;founder_personal_site_url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;founder_other_profile_urls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;

&lt;span class="c1"&gt;# --- Topical Entity Coverage (RECOMMENDED) ---&lt;/span&gt;
&lt;span class="na"&gt;primary_topical_entities&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;         &lt;span class="c1"&gt;# Topics covered with topical hub pages&lt;/span&gt;
&lt;span class="na"&gt;topical_entity_qids&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{}&lt;/span&gt;              &lt;span class="c1"&gt;# Existing Wikidata QIDs for major topics&lt;/span&gt;

&lt;span class="c1"&gt;# --- Knowledge Graph Strategy Status (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_strategy_for_kg_inclusion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;plans_to_pursue_wikipedia_inclusion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# "yes_now", "yes_when_notable", "no", "uncertain"&lt;/span&gt;
&lt;span class="na"&gt;plans_to_create_wikidata_entries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_kg_inclusion_timeline&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Entity Maintenance (REQUIRED ongoing) ---&lt;/span&gt;
&lt;span class="na"&gt;wikidata_last_reviewed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;wikipedia_last_monitored&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;knowledge_panel_last_audited&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;external_profile_last_audited&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. What the Knowledge Graph Is
&lt;/h2&gt;

&lt;p&gt;Google's Knowledge Graph is a database of entities and their relationships. Launched in 2012, it powers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge Panels&lt;/strong&gt; in search results (the boxes on the right side showing entity information)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Featured snippets and rich results&lt;/strong&gt; for entity-related queries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI Overview source selection&lt;/strong&gt; — AI Overviews preferentially cite Knowledge Graph entities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice search and assistant responses&lt;/strong&gt; ("Hey Google, who is...")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entity-based ranking&lt;/strong&gt; — pages associated with recognized entities benefit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disambiguation&lt;/strong&gt; — when multiple entities share names, KG provides the disambiguation infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Knowledge Graph contains hundreds of billions of facts about millions of entities. Most is automatically extracted from sources like Wikipedia, Wikidata, government databases, structured data on websites, and news mining. Some is manually curated.&lt;/p&gt;

&lt;p&gt;Entity inclusion in the Knowledge Graph isn't binary — it's confidence-based. Google may have very high confidence in well-established entities (Apple Inc, Albert Einstein, Tokyo) and lower confidence in less-established entities. Confidence determines whether Knowledge Panels appear, how prominently the entity features in results, and how authoritatively the entity is treated in AI Overviews.&lt;/p&gt;

&lt;p&gt;Entity confidence comes from:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Wikidata presence&lt;/strong&gt; — Wikidata entries are direct input into Google's Knowledge Graph. A complete, well-cited Wikidata entry is the strongest single signal for entity inclusion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Wikipedia presence&lt;/strong&gt; — Wikipedia articles flow into Wikidata and are direct sources for Knowledge Panels. Wikipedia coverage is a strong signal but has higher notability requirements than Wikidata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Schema markup with sameAs&lt;/strong&gt; — Schema on the entity's official website that declares sameAs links to authoritative external profiles helps Google reconcile the entity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Citation by other authoritative sources&lt;/strong&gt; — When other recognized entities reference this entity, confidence increases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Consistent factual data across sources&lt;/strong&gt; — When the same facts appear across multiple authoritative sources, confidence increases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Structured data accessibility&lt;/strong&gt; — Sites that expose entity data via schema, API, or other structured formats are easier to ingest into KG.&lt;/p&gt;

&lt;p&gt;The 2026 evolution of the Knowledge Graph is significant. AI engines (ChatGPT, Perplexity, Claude, Gemini) all rely on entity data overlapping with Google's KG. Entities recognized in KG get cited more frequently across AI engines. The Knowledge Graph is no longer just for Google search — it's foundational infrastructure for the entire AI search ecosystem.&lt;/p&gt;

&lt;p&gt;For any business or individual seeking to be recognized as an authoritative entity in 2026, Knowledge Graph inclusion is foundational — not optional.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Current Entity Recognition Assessment
&lt;/h2&gt;

&lt;p&gt;Before pursuing inclusion, understand current status.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 Knowledge Graph Search API Check
&lt;/h3&gt;

&lt;p&gt;Use Google's Knowledge Graph Search API to check if entities are already recognized:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://kgsearch.googleapis.com/v1/entities:search?query={{ENTITY_NAME}}&amp;amp;key={{API_KEY}}&amp;amp;limit=10"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The response shows whether Google has the entity, its type, description, and confidence score. If the entity returns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Strong match (resultScore &amp;gt;100)&lt;/strong&gt;: Entity is well-recognized&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak match (resultScore &amp;lt;100)&lt;/strong&gt;: Some recognition but not strong&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No match&lt;/strong&gt;: No KG presence&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this site's primary entities (business, founder, key topics), document current status.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.2 Knowledge Panel Search Test
&lt;/h3&gt;

&lt;p&gt;In incognito mode, search for the entity name and document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does a Knowledge Panel appear on the right side?&lt;/li&gt;
&lt;li&gt;What information is in the panel?&lt;/li&gt;
&lt;li&gt;Is the information accurate?&lt;/li&gt;
&lt;li&gt;Is the panel "claimed" (has owner verification)?&lt;/li&gt;
&lt;li&gt;What sources does the panel cite (Wikipedia, official website, etc.)?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Test variations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;{{exact_business_name}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{{business_name}} {{location}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{{business_name}} {{founder_name}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{{founder_full_name}}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;who is {{founder_name}}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.3 Wikidata Direct Search
&lt;/h3&gt;

&lt;p&gt;Search Wikidata directly: &lt;code&gt;wikidata.org/w/index.php?search={{ENTITY_NAME}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Existing entries that match&lt;/li&gt;
&lt;li&gt;Existing entries that conflict (other entities with same name)&lt;/li&gt;
&lt;li&gt;Whether existing entry is complete and accurate&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.4 Wikipedia Search
&lt;/h3&gt;

&lt;p&gt;Search Wikipedia: &lt;code&gt;en.wikipedia.org/w/index.php?search={{ENTITY_NAME}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Document:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Existing article if any&lt;/li&gt;
&lt;li&gt;Quality and completeness of article&lt;/li&gt;
&lt;li&gt;Whether the article links to the official website&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.5 External Profile Mapping
&lt;/h3&gt;

&lt;p&gt;Document all existing external profiles for the entity. Each profile is a potential &lt;code&gt;sameAs&lt;/code&gt; reconciliation point:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;business_external_profiles&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;platform&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LinkedIn"&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;verified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
    &lt;span class="na"&gt;matches_official_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;platform&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Twitter"&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;verified&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
    &lt;span class="na"&gt;matches_official_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;platform&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Crunchbase"&lt;/span&gt;
    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;matches_official_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="c1"&gt;# ... etc&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Identify any profiles with mismatched data (different addresses, different founding dates, etc.). These need correction before reconciliation, or they'll undermine entity confidence.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.6 Recognition Status Summary
&lt;/h3&gt;

&lt;p&gt;After assessment, classify status:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Established entity&lt;/strong&gt; — Strong KG presence, accurate Knowledge Panel, complete Wikidata, possible Wikipedia. Focus on maintenance and refinement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recognized but partial&lt;/strong&gt; — Some KG presence, partial info, no Knowledge Panel or unclaimed panel. Focus on completion and claiming.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Minimal recognition&lt;/strong&gt; — Some external profiles but no KG presence. Focus on creating Wikidata entry and reconciliation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No recognition&lt;/strong&gt; — No external profiles, no Wikidata, no KG. Foundation must be built from scratch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The implementation path varies by status.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Wikidata Implementation (Foundation)
&lt;/h2&gt;

&lt;p&gt;Wikidata is the primary path to Knowledge Graph inclusion. Wikidata has a lower notability bar than Wikipedia and is direct input to Google's Knowledge Graph. Every entity that wants KG inclusion should have a Wikidata entry as foundation.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Wikidata Notability Requirements
&lt;/h3&gt;

&lt;p&gt;To create a Wikidata entry, the entity must satisfy at least one notability criterion:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Has a Wikipedia article&lt;/strong&gt; in any language (automatic notability)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refers to an instance of a clearly identifiable conceptual or material entity&lt;/strong&gt; (most businesses, people, places qualify)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fulfills a structural need&lt;/strong&gt; to make statements about other entities&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For most businesses and individuals associated with businesses, criterion 2 applies. Notability bar is essentially: is this a real, identifiable entity that people might reasonably want to make statements about?&lt;/p&gt;

&lt;h3&gt;
  
  
  5.2 Wikidata Account Setup
&lt;/h3&gt;

&lt;p&gt;Create a Wikidata account at &lt;code&gt;wikidata.org&lt;/code&gt;. Use a real account with established edit history if possible — accounts with no history can have edits scrutinized more carefully.&lt;/p&gt;

&lt;p&gt;Best practice: declare conflict of interest on user page if creating entry for own business or self.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.3 Creating the Business Entity
&lt;/h3&gt;

&lt;p&gt;Navigate to &lt;code&gt;wikidata.org/wiki/Special:NewItem&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Required initial fields:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Label&lt;/strong&gt; — &lt;code&gt;{{business_name}}&lt;/code&gt; (canonical form, capitalized correctly)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt; — Concise (under 250 char), defining sentence. Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"American technology company headquartered in Cupertino, California" (Apple Inc.)&lt;/li&gt;
&lt;li&gt;"Service-Disabled Veteran-Owned web development and SEO firm based in Cassville, Missouri" (ThatDeveloperGuy)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Aliases&lt;/strong&gt; — All alternate names. List every legitimate alternate spelling, abbreviation, DBA name.&lt;/p&gt;

&lt;p&gt;After creating the basic entry, populate properties.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.4 Required Wikidata Properties for Businesses
&lt;/h3&gt;

&lt;p&gt;Add these properties (Wikidata uses property IDs like P31, P17 — find each on Wikidata's property documentation):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Property ID&lt;/th&gt;
&lt;th&gt;Value Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Instance of&lt;/td&gt;
&lt;td&gt;P31&lt;/td&gt;
&lt;td&gt;Type — "business" (Q4830453), "company" (Q783794), or more specific&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Country&lt;/td&gt;
&lt;td&gt;P17&lt;/td&gt;
&lt;td&gt;Country (US = Q30)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Headquarters location&lt;/td&gt;
&lt;td&gt;P159&lt;/td&gt;
&lt;td&gt;City Wikidata QID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Founder&lt;/td&gt;
&lt;td&gt;P112&lt;/td&gt;
&lt;td&gt;Person Wikidata QID (create if needed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inception&lt;/td&gt;
&lt;td&gt;P571&lt;/td&gt;
&lt;td&gt;Founding date&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Industry&lt;/td&gt;
&lt;td&gt;P452&lt;/td&gt;
&lt;td&gt;Industry QID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Official website&lt;/td&gt;
&lt;td&gt;P856&lt;/td&gt;
&lt;td&gt;Domain URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logo image&lt;/td&gt;
&lt;td&gt;P154&lt;/td&gt;
&lt;td&gt;Wikimedia Commons file (upload first if not there)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coordinates&lt;/td&gt;
&lt;td&gt;P625&lt;/td&gt;
&lt;td&gt;Lat/long for physical location&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Example of a populated business entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Item: Q138610626 (ThatDeveloperGuy)
Label (en): ThatDeveloperGuy
Description (en): Service-Disabled Veteran-Owned web development and SEO firm based in Cassville, Missouri

Statements:
- instance of (P31): business (Q4830453)
- country (P17): United States of America (Q30)
- headquarters location (P159): Cassville (Q...)
- founder (P112): Joseph Anady (Q... if created)
- inception (P571): 2020
- industry (P452): web development (Q386275)
- official website (P856): https://thatdeveloperguy.com
- coordinates (P625): 36.6770° N, 93.8730° W

External Identifiers:
- LinkedIn (P4264): {{linkedin_handle}}
- Crunchbase (P2087): {{crunchbase_id}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.5 Required References for Each Property
&lt;/h3&gt;

&lt;p&gt;Every statement should be supported by a reference:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;inception (P571): 2020
References:
- stated in: official website (P856) of subject
- reference URL: https://thatdeveloperguy.com/about/
- retrieved: 2026-04-29
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without references, statements can be challenged. With strong references, the entry is robust against editor revisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.6 Creating the Founder Person Entity
&lt;/h3&gt;

&lt;p&gt;Same process for founder. Required Person properties:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Property ID&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Instance of&lt;/td&gt;
&lt;td&gt;P31&lt;/td&gt;
&lt;td&gt;human (Q5)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Country of citizenship&lt;/td&gt;
&lt;td&gt;P27&lt;/td&gt;
&lt;td&gt;Country&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Date of birth&lt;/td&gt;
&lt;td&gt;P569&lt;/td&gt;
&lt;td&gt;If notable; can omit for privacy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Place of birth&lt;/td&gt;
&lt;td&gt;P19&lt;/td&gt;
&lt;td&gt;If notable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Occupation&lt;/td&gt;
&lt;td&gt;P106&lt;/td&gt;
&lt;td&gt;Occupation QIDs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Employer&lt;/td&gt;
&lt;td&gt;P108&lt;/td&gt;
&lt;td&gt;Business QID (the entity created above)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Educated at&lt;/td&gt;
&lt;td&gt;P69&lt;/td&gt;
&lt;td&gt;School QIDs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Field of work&lt;/td&gt;
&lt;td&gt;P101&lt;/td&gt;
&lt;td&gt;Field QIDs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native language&lt;/td&gt;
&lt;td&gt;P103&lt;/td&gt;
&lt;td&gt;Language QID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Official website&lt;/td&gt;
&lt;td&gt;P856&lt;/td&gt;
&lt;td&gt;Personal site if exists&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;External Identifier properties for founder:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Identifier&lt;/th&gt;
&lt;th&gt;Property ID&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LinkedIn personal profile&lt;/td&gt;
&lt;td&gt;P6634&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub username&lt;/td&gt;
&lt;td&gt;P2037&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hugging Face username&lt;/td&gt;
&lt;td&gt;P9100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ORCID iD&lt;/td&gt;
&lt;td&gt;P496&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;X (Twitter) username&lt;/td&gt;
&lt;td&gt;P2002&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  5.7 Topical Entity Wikidata Entries
&lt;/h3&gt;

&lt;p&gt;For unique topical entities the site is the authority on (specific frameworks, methods, tools the site has created), create Wikidata entries. Most general topics already have entries.&lt;/p&gt;

&lt;p&gt;For example, if the site has authored a specific framework called "SDVOSB Engine Optimization Methodology," that could be a Wikidata entity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Item: Q... (SDVOSB Engine Optimization Methodology)
Label (en): SDVOSB Engine Optimization Methodology
Description (en): A 14-tier framework for search engine and AI engine optimization developed by Joseph Anady at ThatDeveloperGuy

Statements:
- instance of (P31): methodology (Q1799072)
- developed by (P178): Joseph Anady (Q...)
- subclass of (P279): search engine optimization (Q180711)
- depicts (P180): 14-tier framework
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5.8 Cross-Linking via External Identifiers
&lt;/h3&gt;

&lt;p&gt;Wikidata's external identifier properties allow direct linking to authoritative external databases. Add as many as apply:&lt;/p&gt;

&lt;p&gt;For businesses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn company ID (P4264)&lt;/li&gt;
&lt;li&gt;Crunchbase organization ID (P2087)&lt;/li&gt;
&lt;li&gt;BBB business profile (... if property exists)&lt;/li&gt;
&lt;li&gt;Industry-specific identifiers (BSI, NAICS code, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For people:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn personal ID (P6634)&lt;/li&gt;
&lt;li&gt;ORCID (P496)&lt;/li&gt;
&lt;li&gt;Google Scholar author ID (P1960)&lt;/li&gt;
&lt;li&gt;ResearchGate profile (P6178)&lt;/li&gt;
&lt;li&gt;GitHub username (P2037)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;External identifiers strengthen entity reconciliation — they tell systems unambiguously that this Wikidata entity is the same entity as in those external sources.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.9 Wikimedia Commons Logo Upload
&lt;/h3&gt;

&lt;p&gt;Upload the business logo to Wikimedia Commons:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;code&gt;commons.wikimedia.org/wiki/Special:UploadWizard&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Confirm copyright (logo must be licensed permissively or be your own work you license)&lt;/li&gt;
&lt;li&gt;Upload with descriptive filename: &lt;code&gt;ThatDeveloperGuy-logo.svg&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add to Wikidata entry as logo image (P154)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The logo is then available for use in Knowledge Panels and other systems.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.10 Patience for Wikidata Propagation
&lt;/h3&gt;

&lt;p&gt;After creating Wikidata entries, allow time for propagation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;24-72 hours for community visibility&lt;/li&gt;
&lt;li&gt;1-4 weeks for Google's Knowledge Graph ingestion&lt;/li&gt;
&lt;li&gt;1-3 months for stable Knowledge Panel appearance (typically requires multiple signals beyond Wikidata)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't expect immediate Knowledge Panel from Wikidata alone. Wikidata is foundational; other signals build on it.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. External Reconciliation Strategy
&lt;/h2&gt;

&lt;p&gt;Beyond Wikidata, build the network of references that reinforce entity recognition.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 Schema sameAs on Official Website
&lt;/h3&gt;

&lt;p&gt;The official website's Organization and Person schema must include sameAs links to all authoritative external profiles AND to the Wikidata entry:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Organization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://{{domain}}/#organization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{business_name}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sameAs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.wikidata.org/wiki/{{business_qid}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://en.wikipedia.org/wiki/{{business_wiki_slug}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{linkedin_company_url}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{x_company_url}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{facebook_url}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{crunchbase_url}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{bbb_url}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{youtube_channel_url}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{github_org_url}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;{{industry_directory_urls}}&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This declares: "All these URLs refer to the same entity." Google uses this for entity reconciliation.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.2 Reciprocal sameAs from External Profiles
&lt;/h3&gt;

&lt;p&gt;Where possible, add the website URL to external profiles so reconciliation is bidirectional:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn company page: lists official website&lt;/li&gt;
&lt;li&gt;X bio: includes website URL&lt;/li&gt;
&lt;li&gt;Crunchbase profile: official website field&lt;/li&gt;
&lt;li&gt;Personal LinkedIn: lists company and website&lt;/li&gt;
&lt;li&gt;GitHub org/user: website field&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some platforms allow &lt;code&gt;rel="me"&lt;/code&gt; markup for verified mutual claiming. Where supported (Mastodon, personal sites), use &lt;code&gt;rel="me"&lt;/code&gt; to formally declare the relationship.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.3 Authority-Building Profile Coverage
&lt;/h3&gt;

&lt;p&gt;Build presence on platforms that contribute to entity authority:&lt;/p&gt;

&lt;p&gt;For businesses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn Company Page&lt;/li&gt;
&lt;li&gt;Google Business Profile&lt;/li&gt;
&lt;li&gt;Crunchbase&lt;/li&gt;
&lt;li&gt;BBB (where applicable)&lt;/li&gt;
&lt;li&gt;Trustpilot&lt;/li&gt;
&lt;li&gt;Industry-specific directories (Clutch for B2B services, etc.)&lt;/li&gt;
&lt;li&gt;Local Chamber of Commerce&lt;/li&gt;
&lt;li&gt;State business registry (already exists if formally registered)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For founders:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LinkedIn personal profile&lt;/li&gt;
&lt;li&gt;GitHub (for developers)&lt;/li&gt;
&lt;li&gt;Hugging Face (for AI work)&lt;/li&gt;
&lt;li&gt;ResearchGate or ORCID (for academics)&lt;/li&gt;
&lt;li&gt;Industry-specific profiles&lt;/li&gt;
&lt;li&gt;Personal domain with comprehensive bio&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6.4 Industry-Specific Authoritative Listings
&lt;/h3&gt;

&lt;p&gt;Each industry has authoritative directories Google trusts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Medical&lt;/strong&gt;: NPI registry, state medical board, hospital staff directory&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legal&lt;/strong&gt;: Bar association directory, Avvo, Martindale-Hubbell&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Financial&lt;/strong&gt;: BrokerCheck, SEC IAPD, Form ADV&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real estate&lt;/strong&gt;: NAR, state real estate licensing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Construction&lt;/strong&gt;: state contractor licensing, BBB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Listing on these sources contributes to entity authority and provides additional sameAs targets.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.5 Earned Media Coverage
&lt;/h3&gt;

&lt;p&gt;When the entity is featured in articles, news, or industry publications, ensure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The publication's article links to the official website&lt;/li&gt;
&lt;li&gt;The article uses the canonical entity name&lt;/li&gt;
&lt;li&gt;The article references factual data consistent with Wikidata/official sources&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inconsistencies across earned media weaken entity confidence. Reach out to publications to correct factual errors when they appear.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.6 Press Kit With Canonical Entity Data
&lt;/h3&gt;

&lt;p&gt;Maintain a press kit at &lt;code&gt;/press/&lt;/code&gt; with canonical entity facts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Official entity name and acceptable abbreviations&lt;/li&gt;
&lt;li&gt;Founding year&lt;/li&gt;
&lt;li&gt;Founder names with correct spellings&lt;/li&gt;
&lt;li&gt;Headquarters location&lt;/li&gt;
&lt;li&gt;Industry classification&lt;/li&gt;
&lt;li&gt;Brief description (matching Wikidata description)&lt;/li&gt;
&lt;li&gt;High-resolution logos&lt;/li&gt;
&lt;li&gt;Founder photos&lt;/li&gt;
&lt;li&gt;Recent press releases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make it easy for journalists to use correct facts. Inconsistent facts in earned media create entity confusion that takes time to resolve.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Wikipedia Strategy
&lt;/h2&gt;

&lt;p&gt;Wikipedia has a higher notability bar than Wikidata. Don't pursue Wikipedia until notability is genuinely demonstrable.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 Wikipedia Notability Test
&lt;/h3&gt;

&lt;p&gt;Wikipedia's notability requirement: "significant coverage in independent reliable secondary sources."&lt;/p&gt;

&lt;p&gt;Tests:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Significant coverage&lt;/strong&gt; — multiple paragraphs about the entity, not just passing mention&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent&lt;/strong&gt; — not the entity's own marketing, press releases, or affiliated sources&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliable&lt;/strong&gt; — established publications with editorial standards (newspapers, trade publications, academic journals, books)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secondary sources&lt;/strong&gt; — not primary sources like the entity's own website or interviews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most businesses, Wikipedia notability requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coverage in 3+ independent reliable sources&lt;/li&gt;
&lt;li&gt;Coverage that's substantive (not just listings or brief mentions)&lt;/li&gt;
&lt;li&gt;Coverage spanning more than a single time period&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For most individuals, similar tests but framed around the person's accomplishments, work, recognition.&lt;/p&gt;

&lt;p&gt;If notability is genuinely there, Wikipedia inclusion follows. If it's not, attempting to create a Wikipedia article will result in deletion, often with administrative rebuke that makes future attempts harder.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.2 Don't Create Your Own Wikipedia Article
&lt;/h3&gt;

&lt;p&gt;Wikipedia has strong policies against creating articles about yourself or your business (conflict of interest). Articles created by COI editors are flagged, scrutinized, often deleted.&lt;/p&gt;

&lt;p&gt;Better path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build genuine notability over time&lt;/li&gt;
&lt;li&gt;Wait for organic article creation by an independent editor&lt;/li&gt;
&lt;li&gt;If asked, provide factual support to editors but don't draft the article&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  7.3 If You Must Create a Wikipedia Article
&lt;/h3&gt;

&lt;p&gt;If notability is genuinely strong and no organic editor is creating an article, the legitimate path:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Disclose conflict of interest on user page&lt;/li&gt;
&lt;li&gt;Use Articles for Creation process (&lt;code&gt;en.wikipedia.org/wiki/Wikipedia:Articles_for_creation&lt;/code&gt;) rather than direct creation&lt;/li&gt;
&lt;li&gt;Submit through draft review by uninvolved editors&lt;/li&gt;
&lt;li&gt;Accept their feedback and revisions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The article must:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Be written in encyclopedic tone, not promotional&lt;/li&gt;
&lt;li&gt;Cite multiple independent reliable sources&lt;/li&gt;
&lt;li&gt;Cover both achievements and any controversies fairly&lt;/li&gt;
&lt;li&gt;Avoid superlatives, marketing language, original research&lt;/li&gt;
&lt;li&gt;Use neutral point of view&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7.4 Maintaining the Wikipedia Article
&lt;/h3&gt;

&lt;p&gt;Once created, monitor the article but don't edit it directly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Watch for changes via Wikipedia's watchlist feature&lt;/li&gt;
&lt;li&gt;Use Talk page to suggest corrections with citations&lt;/li&gt;
&lt;li&gt;Engage with editors who request information&lt;/li&gt;
&lt;li&gt;Provide source materials when requested&lt;/li&gt;
&lt;li&gt;Accept that the article belongs to Wikipedia community, not the subject&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Inappropriate editing of own Wikipedia article causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edit reverts&lt;/li&gt;
&lt;li&gt;Articles flagged for COI review&lt;/li&gt;
&lt;li&gt;Sometimes article deletion&lt;/li&gt;
&lt;li&gt;Editor account sanctions&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7.5 What Wikipedia Inclusion Adds
&lt;/h3&gt;

&lt;p&gt;When/if Wikipedia article exists:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Knowledge Graph confidence increases dramatically&lt;/li&gt;
&lt;li&gt;Knowledge Panel typically appears in search results&lt;/li&gt;
&lt;li&gt;AI engines cite the entity more confidently&lt;/li&gt;
&lt;li&gt;The Wikipedia article becomes input into many derivative systems (LLM training data, AI knowledge bases, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wikipedia is force-multiplying for entity authority. But it must be earned, not engineered.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Knowledge Panel Claiming
&lt;/h2&gt;

&lt;p&gt;Once an entity has Knowledge Graph recognition, claim the Knowledge Panel for control.&lt;/p&gt;

&lt;h3&gt;
  
  
  8.1 Verifying Eligibility
&lt;/h3&gt;

&lt;p&gt;Knowledge Panels can be claimed when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The entity is recognized in Google's Knowledge Graph (Knowledge Panel appears)&lt;/li&gt;
&lt;li&gt;You can demonstrate official representation (own the website, are the entity, or are authorized representative)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To check if a Knowledge Panel exists for your entity, search the entity name in Google. The panel appears on the right side (desktop) or below results (mobile).&lt;/p&gt;

&lt;h3&gt;
  
  
  8.2 Claiming Process
&lt;/h3&gt;

&lt;p&gt;If a Knowledge Panel exists:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click "Claim this knowledge panel" link in the panel (typically at bottom)&lt;/li&gt;
&lt;li&gt;Sign in with Google account&lt;/li&gt;
&lt;li&gt;Verify ownership through one of:

&lt;ul&gt;
&lt;li&gt;Authorized social profile (verified Twitter/X, official LinkedIn, etc.)&lt;/li&gt;
&lt;li&gt;YouTube channel&lt;/li&gt;
&lt;li&gt;Official Twitter/X account&lt;/li&gt;
&lt;li&gt;Other verified Google service&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Wait for Google review (typically days to weeks)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once claimed, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suggest edits to information in the panel&lt;/li&gt;
&lt;li&gt;Add or update images&lt;/li&gt;
&lt;li&gt;Request corrections to factual errors&lt;/li&gt;
&lt;li&gt;Update social profile links&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.3 Maintaining the Knowledge Panel
&lt;/h3&gt;

&lt;p&gt;After claiming:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monthly: review panel for accuracy&lt;/li&gt;
&lt;li&gt;After business changes (address, hours, name): suggest update&lt;/li&gt;
&lt;li&gt;After credentials/awards: suggest addition&lt;/li&gt;
&lt;li&gt;Quarterly: verify all linked profiles still active&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.4 What If No Knowledge Panel Exists
&lt;/h3&gt;

&lt;p&gt;If no Knowledge Panel exists despite Wikidata presence and external profile coverage, possible reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recognition exists but below threshold for panel display&lt;/li&gt;
&lt;li&gt;Entity is too new (give it 3-6 months after building foundation)&lt;/li&gt;
&lt;li&gt;Entity confusion (Google can't disambiguate from other entities with same name)&lt;/li&gt;
&lt;li&gt;Insufficient cross-source consistency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Continue building entity signals: more authoritative external profiles, more earned media, more consistent factual data across sources, possibly Wikipedia inclusion if notability allows. Knowledge Panel typically follows when entity confidence reaches threshold.&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Topical Entity Strategy
&lt;/h2&gt;

&lt;p&gt;Beyond business and founder entities, topical entities matter.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.1 Major Topic Wikidata Entries
&lt;/h3&gt;

&lt;p&gt;Most major topics (web development, SEO, AI, etc.) already have Wikidata entries. Reference them in your content schema:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Article&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;about&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Thing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Search engine optimization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;sameAs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.wikidata.org/wiki/Q180711&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Topical hub pages similarly use the Wikidata QID for their primary topic.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.2 Custom Methodology Entities
&lt;/h3&gt;

&lt;p&gt;If the site has authored unique methodologies, frameworks, or tools, create Wikidata entries for them. See Section 5.7.&lt;/p&gt;

&lt;h3&gt;
  
  
  9.3 Person-Topic Affinity
&lt;/h3&gt;

&lt;p&gt;Connect people entities to topical entities via Wikidata:&lt;/p&gt;

&lt;p&gt;For founder entry, add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;field of work (P101): SEO QID&lt;/li&gt;
&lt;li&gt;field of work (P101): Web development QID&lt;/li&gt;
&lt;li&gt;field of work (P101): AI optimization QID&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This declares topical authority in Wikidata, which compounds with on-site &lt;code&gt;knowsAbout&lt;/code&gt; schema.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Common Mistakes &amp;amp; Anti-Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  10.1 Self-Created Wikipedia Article
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Creating own Wikipedia article without notability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Almost certainly deleted. Editor account sanctioned. Future legitimate attempts harder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Build notability first. Use Wikidata in the meantime. Wait for organic Wikipedia creation.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.2 Inconsistent Entity Names Across Sources
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: "ThatDeveloperGuy" on website, "That Developer Guy LLC" on LinkedIn, "TDG Inc" on Crunchbase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Google can't reconcile these as the same entity. Entity confidence stays low.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Pick canonical name. Use consistently everywhere. Document acceptable variations as &lt;code&gt;alternateName&lt;/code&gt; only.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.3 Wikidata Without References
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Wikidata entry created with statements but no supporting references.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Entry is fragile; community editors may revise or remove unsupported statements.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Cite sources for every statement.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.4 No Schema sameAs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Site has Wikidata entry, but Organization schema doesn't include sameAs link to Wikidata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Google has to reconcile via other means; loses easy direct signal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: sameAs link to Wikidata in all relevant schema.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.5 Sparse External Profile Coverage
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Only website and one social profile. Nothing else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Entity reconciliation needs multiple signals. Sparse coverage means low confidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Build coverage on 8-15 authoritative platforms.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.6 Outdated Wikidata Information
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Wikidata entry created years ago, never updated. Address has changed, founder roles changed, founding date inaccurate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Inconsistent data across sources weakens entity confidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Quarterly Wikidata review; keep current.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.7 Edit Warring on Wikipedia
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Repeatedly editing your own Wikipedia article to add favorable content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Article flagged for COI review. Editor account sanctioned. Trust damaged.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Use Talk page to suggest changes. Provide sources. Let community editors decide.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.8 Knowledge Panel Errors Ignored
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Knowledge Panel showing wrong information, no action taken.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Wrong information at the most prominent position in search results. Long-term reputation damage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Claim panel; suggest corrections; provide source documentation for corrections.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.9 Multiple Wikidata Entries for Same Entity
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Creating new Wikidata entry without checking if one already exists, resulting in duplicates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Confusion. Statements split across entries. Reconciliation issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Search before creating. If duplicates exist, use Wikidata's merge process.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.10 Trying to Game Knowledge Graph
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Creating fake Wikipedia citations, manipulating Wikidata, fabricating earned media to inflate entity authority.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Detection by Wikipedia community is high. Wikidata has data quality processes. Fabricated earned media is detectable. Caught manipulation = catastrophic reputation damage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Build genuine entity authority through real work, real notability, real recognition.&lt;/p&gt;




&lt;h2&gt;
  
  
  11. Audit Mode
&lt;/h2&gt;

&lt;h3&gt;
  
  
  11.1 Knowledge Graph Status Audit
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;KG1&lt;/td&gt;
&lt;td&gt;Business entity recognized in Knowledge Graph (KG Search API)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG2&lt;/td&gt;
&lt;td&gt;Founder entity recognized in Knowledge Graph&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG3&lt;/td&gt;
&lt;td&gt;Wikidata entry exists for business with 8+ properties&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG4&lt;/td&gt;
&lt;td&gt;Wikidata entry exists for founder with 6+ properties&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG5&lt;/td&gt;
&lt;td&gt;Wikidata entries have references for all major statements&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG6&lt;/td&gt;
&lt;td&gt;Schema sameAs on website includes Wikidata link&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG7&lt;/td&gt;
&lt;td&gt;Schema sameAs includes 8+ external profiles&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG8&lt;/td&gt;
&lt;td&gt;External profile data is consistent (NAP, dates, etc.)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG9&lt;/td&gt;
&lt;td&gt;Knowledge Panel appears for business name search&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG10&lt;/td&gt;
&lt;td&gt;Knowledge Panel claimed (if appears)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG11&lt;/td&gt;
&lt;td&gt;Knowledge Panel information accurate (if appears)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG12&lt;/td&gt;
&lt;td&gt;Wikipedia article exists and accurate (if notability supports)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG13&lt;/td&gt;
&lt;td&gt;Major topical entities referenced via Wikidata QIDs in schema&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG14&lt;/td&gt;
&lt;td&gt;Custom methodology entities created in Wikidata where applicable&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KG15&lt;/td&gt;
&lt;td&gt;Press kit maintained with canonical entity facts&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 15. World-class KG status: 13+/15.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.2 Entity Authority Strength Score
&lt;/h3&gt;

&lt;p&gt;For each primary entity (business, founder, key topics), score:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Strong (3)&lt;/th&gt;
&lt;th&gt;Moderate (2)&lt;/th&gt;
&lt;th&gt;Weak (1)&lt;/th&gt;
&lt;th&gt;Absent (0)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Wikidata presence&lt;/td&gt;
&lt;td&gt;Complete entry with 12+ properties&lt;/td&gt;
&lt;td&gt;Basic entry&lt;/td&gt;
&lt;td&gt;Minimal entry&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wikipedia presence&lt;/td&gt;
&lt;td&gt;Substantial article&lt;/td&gt;
&lt;td&gt;Brief article&lt;/td&gt;
&lt;td&gt;Mention only&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Schema declaration&lt;/td&gt;
&lt;td&gt;Full declaration with sameAs&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;External profile coverage&lt;/td&gt;
&lt;td&gt;12+ authoritative profiles&lt;/td&gt;
&lt;td&gt;8-11&lt;/td&gt;
&lt;td&gt;4-7&lt;/td&gt;
&lt;td&gt;&amp;lt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Earned media&lt;/td&gt;
&lt;td&gt;Multiple substantive coverage&lt;/td&gt;
&lt;td&gt;Some coverage&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Industry recognition&lt;/td&gt;
&lt;td&gt;Awards, certifications, memberships&lt;/td&gt;
&lt;td&gt;Some&lt;/td&gt;
&lt;td&gt;Few&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Knowledge Panel&lt;/td&gt;
&lt;td&gt;Claimed and accurate&lt;/td&gt;
&lt;td&gt;Appears unclaimed&lt;/td&gt;
&lt;td&gt;Appears with errors&lt;/td&gt;
&lt;td&gt;Doesn't appear&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Per entity: 21 max. Strong entity: 18+/21.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Maintenance Schedule
&lt;/h2&gt;

&lt;h3&gt;
  
  
  12.1 Monthly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Verify Wikidata entries still accurate; correct if facts changed&lt;/li&gt;
&lt;li&gt;Monitor Wikipedia article for changes (if exists)&lt;/li&gt;
&lt;li&gt;Check Knowledge Panel for accuracy&lt;/li&gt;
&lt;li&gt;Review external profiles for consistency&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12.2 Quarterly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive entity authority audit&lt;/li&gt;
&lt;li&gt;Update press kit with new earned media, achievements&lt;/li&gt;
&lt;li&gt;Refresh photos and logos if updated&lt;/li&gt;
&lt;li&gt;Cross-check NAP across all profiles&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12.3 Annually
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Strategic entity review&lt;/li&gt;
&lt;li&gt;Pursue new Wikipedia inclusion if notability has grown&lt;/li&gt;
&lt;li&gt;Add new topical entities as the site's authority expands&lt;/li&gt;
&lt;li&gt;Update Wikidata with significant year's developments&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12.4 Event-Driven
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Address change → update everywhere within 7 days&lt;/li&gt;
&lt;li&gt;Founder change → update Wikidata, Knowledge Panel, schema&lt;/li&gt;
&lt;li&gt;New significant earned media → add to press kit, update Wikidata reference&lt;/li&gt;
&lt;li&gt;New award/certification → update credentials in Wikidata, schema, About page&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  13. Cross-Reference to the 14-Tier Framework
&lt;/h2&gt;

&lt;p&gt;Knowledge Graph implementation touches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tier 3 KGO&lt;/strong&gt; — Knowledge Graph Optimization is named for this exact work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 3 WIK&lt;/strong&gt; — Wikipedia &amp;amp; Wikidata Optimization is the foundational work this framework specifies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 1 SDO&lt;/strong&gt; — Structured Data Optimization implements schema sameAs for KG reconciliation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 1 EEA&lt;/strong&gt; — E-E-A-T Entity Optimization with Person/Organization schema&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 4 PBO&lt;/strong&gt; — Personal Brand Optimization extends founder entity work&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 4 CHO&lt;/strong&gt; — Citation/Honors Optimization documents the awards and recognitions that build entity authority&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  14. Implementation/Audit Report Templates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  14.1 Implementation Report Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Knowledge Graph Implementation Report&lt;/span&gt;

&lt;span class="gs"&gt;**Site**&lt;/span&gt;: {{BUSINESS_NAME}}
&lt;span class="gs"&gt;**Implementation Date**&lt;/span&gt;: {{TODAY}}

&lt;span class="gu"&gt;## Wikidata Entries Created&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Business: {{QID}} — {{COMPLETENESS_PERCENTAGE}}% properties populated
&lt;span class="p"&gt;-&lt;/span&gt; Founder: {{QID}} — {{COMPLETENESS_PERCENTAGE}}% properties populated
&lt;span class="p"&gt;-&lt;/span&gt; Custom methodologies: {{LIST_OF_QIDS}}

&lt;span class="gu"&gt;## External Reconciliation Status&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Schema sameAs links: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; External profiles claimed: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; NAP consistency: {{PERCENTAGE}}% across all profiles

&lt;span class="gu"&gt;## Knowledge Panel Status&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Business: {{APPEARS/DOES_NOT_APPEAR}}, {{CLAIMED/UNCLAIMED}}
&lt;span class="p"&gt;-&lt;/span&gt; Founder: {{APPEARS/DOES_NOT_APPEAR}}, {{CLAIMED/UNCLAIMED}}

&lt;span class="gu"&gt;## Wikipedia Status&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Notability assessment: {{ASSESSMENT}}
&lt;span class="p"&gt;-&lt;/span&gt; Action: {{NONE/ARTICLE_CREATED/ARTICLE_AWAITED}}

&lt;span class="gu"&gt;## Topical Entity Coverage&lt;/span&gt;
{{LIST_OF_TOPICS_AND_QIDS}}

&lt;span class="gu"&gt;## Press Kit Established&lt;/span&gt;
{{STATUS}}

&lt;span class="gu"&gt;## Sign-Off&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  14.2 Audit Report Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Knowledge Graph Audit Report&lt;/span&gt;

&lt;span class="gs"&gt;**Site**&lt;/span&gt;: {{BUSINESS_NAME}}
&lt;span class="gs"&gt;**Audit Date**&lt;/span&gt;: {{TODAY}}

&lt;span class="gu"&gt;## Overall KG Status&lt;/span&gt;
{{ESTABLISHED / RECOGNIZED_PARTIAL / MINIMAL / NONE}}

&lt;span class="gu"&gt;## KG Status Score&lt;/span&gt;
{{X}}/15

&lt;span class="gu"&gt;## Entity Authority Strength&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Business: {{X}}/21
&lt;span class="p"&gt;-&lt;/span&gt; Founder: {{X}}/21
&lt;span class="p"&gt;-&lt;/span&gt; Primary topics: {{ASSESSMENT}}

&lt;span class="gu"&gt;## Wikidata Findings&lt;/span&gt;
{{DETAILED_FINDINGS}}

&lt;span class="gu"&gt;## Wikipedia Findings&lt;/span&gt;
{{DETAILED_FINDINGS}}

&lt;span class="gu"&gt;## External Reconciliation Findings&lt;/span&gt;
{{DETAILED_FINDINGS}}

&lt;span class="gu"&gt;## Knowledge Panel Findings&lt;/span&gt;
{{DETAILED_FINDINGS}}

&lt;span class="gu"&gt;## Critical Failures&lt;/span&gt;
{{LIST}}

&lt;span class="gu"&gt;## Recommended Implementation Order&lt;/span&gt;
{{PRIORITIZED_LIST}}

&lt;span class="gu"&gt;## Sign-Off&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  End of Framework Document
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Document version&lt;/strong&gt;: 1.0&lt;br&gt;
&lt;strong&gt;Last updated&lt;/strong&gt;: 2026-04-29&lt;br&gt;
&lt;strong&gt;Maintained by&lt;/strong&gt;: ThatDeveloperGuy&lt;/p&gt;

&lt;p&gt;Knowledge Graph inclusion is foundational entity authority infrastructure for 2026. Without it, entities operate at a permanent confidence disadvantage in search rankings, AI citations, and brand recognition. With it, every other quality signal compounds — E-E-A-T is stronger when the entity is recognized, content ranks better when its primary entity is authoritative, AI engines cite the entity preferentially.&lt;/p&gt;

&lt;p&gt;The work is methodical. Wikidata first. External reconciliation. Wikipedia when notable. Knowledge Panel claim. Then maintain. The compound returns over time are substantial.&lt;/p&gt;

&lt;p&gt;Companion documents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;framework-eeat.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-ymyl.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-hcs.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-sqrg.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-coreupdates.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-infogain.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-entitysalience.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;framework-aicitations.md&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  About this framework library
&lt;/h2&gt;

&lt;p&gt;This article is the Dev.to republish of a framework reference document from ThatDevPro's SEO + AI engineering library. &lt;strong&gt;Canonical source: &lt;a href="https://www.thatdevpro.com/insights/framework-knowledgegraph/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-knowledgegraph/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio operating from Cassville, Missouri. The studio runs the full &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;14-tier Engine Optimization&lt;/a&gt; stack and ships open-source tooling for AI citation engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Companion 14-tier Engine Optimization stack&lt;/strong&gt; (each tier is its own article):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-1-foundation/" rel="noopener noreferrer"&gt;Tier 1 — Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-2-search-visibility/" rel="noopener noreferrer"&gt;Tier 2 — Search Visibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-3-ai-domination/" rel="noopener noreferrer"&gt;Tier 3 — AI Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-4-entity-and-authority/" rel="noopener noreferrer"&gt;Tier 4 — Entity and Authority&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-5-local-domination/" rel="noopener noreferrer"&gt;Tier 5 — Local Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-6-content-and-multimedia/" rel="noopener noreferrer"&gt;Tier 6 — Content and Multimedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-7-social-and-community/" rel="noopener noreferrer"&gt;Tier 7 — Social and Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-8-data-analytics-conversion/" rel="noopener noreferrer"&gt;Tier 8 — Data, Analytics, Conversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-9-monitoring-and-intelligence/" rel="noopener noreferrer"&gt;Tier 9 — Monitoring and Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-10-workflow-and-operations/" rel="noopener noreferrer"&gt;Tier 10 — Workflow and Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-11-marketplace-and-retail/" rel="noopener noreferrer"&gt;Tier 11 — Marketplace and Retail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-12-international/" rel="noopener noreferrer"&gt;Tier 12 — International&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-14-advanced-and-immersive/" rel="noopener noreferrer"&gt;Tier 14 — Advanced and Immersive&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Need this framework implemented on your site? &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;See the Engine Optimization service&lt;/a&gt; or hire through &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;ThatDevPro contact&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>wikidata</category>
      <category>knowledgegraph</category>
      <category>schema</category>
    </item>
    <item>
      <title>Google's 18 spam policies and how to comply</title>
      <dc:creator>Joseph Anady</dc:creator>
      <pubDate>Sun, 24 May 2026 01:03:28 +0000</pubDate>
      <link>https://forem.com/joseph_anady_214bacedf939/googles-18-spam-policies-and-how-to-comply-40</link>
      <guid>https://forem.com/joseph_anady_214bacedf939/googles-18-spam-policies-and-how-to-comply-40</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Originally published at &lt;a href="https://www.thatdevpro.com/insights/framework-spampolicies/" rel="noopener noreferrer"&gt;thatdevpro.com&lt;/a&gt;.&lt;/strong&gt; Part of ThatDevPro's open SEO + AI framework library. &lt;a href="https://www.thatdevpro.com" rel="noopener noreferrer"&gt;ThatDevPro&lt;/a&gt; is an SDVOSB-certified veteran-owned web + AI engineering studio. Open-source AI citation toolkit: &lt;a href="https://github.com/Janady13/aio-surfaces" rel="noopener noreferrer"&gt;github.com/Janady13/aio-surfaces&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Google's Explicit Anti-Spam Policies — What Gets Punished, How to Avoid It, and How to Recover&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A comprehensive installation and audit reference for understanding Google's documented spam policies, identifying spam policy violations on a website, remediating violations, recovering from spam updates and manual actions, and building structural defenses against accidentally violating spam policies through scale or third-party content. This document is dual-purpose: installation manual and audit document.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cross-stack implementation note&lt;/strong&gt;: the code samples in this framework are written in plain HTML for clarity. For React, Vue, Svelte, Next.js, Nuxt, SvelteKit, Astro, Hugo, 11ty, Remix, WordPress, Shopify, and Webflow equivalents of every pattern below, see &lt;a href="//framework-cross-stack-implementation.md"&gt;&lt;code&gt;framework-cross-stack-implementation.md&lt;/code&gt;&lt;/a&gt;. For pure client-rendered SPAs (no SSR/SSG) see &lt;a href="//framework-react.md"&gt;&lt;code&gt;framework-react.md&lt;/code&gt;&lt;/a&gt;. For Tailwind-specific concerns (purge, dynamic classes, dark-mode CLS, focus accessibility) see &lt;a href="//framework-tailwind.md"&gt;&lt;code&gt;framework-tailwind.md&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. Document Purpose &amp;amp; How to Use This Document
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.1 What This Document Is
&lt;/h3&gt;

&lt;p&gt;This is the canonical reference for Google's spam policies — the documented rules at &lt;code&gt;developers.google.com/search/docs/essentials/spam-policies&lt;/code&gt; that define what Google considers manipulative practices, what triggers algorithmic spam updates, and what triggers manual actions. While the rest of the foundational framework library focuses on what to &lt;strong&gt;do&lt;/strong&gt; to earn rankings and citations, this document focuses on what &lt;strong&gt;not to do&lt;/strong&gt; — the practices that result in ranking suppression, deindexing, or manual penalties regardless of how strong other signals are.&lt;/p&gt;

&lt;p&gt;Spam policies are operationally distinct from quality frameworks. A site can score 130/130 on E-E-A-T, satisfy YMYL standards perfectly, and still get hit by a spam policy violation that suppresses or removes it from search entirely. Conversely, a site can have weak E-E-A-T and still avoid spam violations. The two systems run in parallel — quality frameworks affect where you rank; spam policies affect whether you can rank at all.&lt;/p&gt;

&lt;p&gt;The 2024-2026 evolution of Google's spam policies has been significant. The March 2024 update added three new spam policies (scaled content abuse, site reputation abuse, expired domain abuse) and integrated existing policies more aggressively into core ranking. The May 2024 spam update enforced these policies with substantial site impact. Continuing through 2025 and into 2026, spam updates have run alongside core updates with increasing frequency, and manual action issuance has accelerated for the new policy categories.&lt;/p&gt;

&lt;p&gt;This document specifies every documented spam policy, the patterns Google uses to detect violations, defensive structural patterns to prevent accidental violations, response procedures when violations are detected, and recovery protocols for both algorithmic suppression and manual actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.2 Three Operating Modes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Mode A — Install Mode&lt;/strong&gt;: Building defensive infrastructure into a site to prevent spam policy violations. Follow Sections 2 → 14.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode B — Audit Mode&lt;/strong&gt;: Evaluating an existing site for spam policy compliance. Skip to Section 11.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mode C — Hybrid Mode&lt;/strong&gt;: Audit then install for failing items.&lt;/p&gt;

&lt;h3&gt;
  
  
  1.3 How Claude Code CLI Should Consume This Document
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Read Section 2&lt;/strong&gt; — collect client variables, especially historical penalty status&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read Section 3&lt;/strong&gt; — understand the difference between spam updates, manual actions, and core updates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apply Section 4&lt;/strong&gt; — work through every documented spam policy systematically&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apply Section 5&lt;/strong&gt; — special focus on the three policies added in March 2024 (most active enforcement)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Install defensive patterns&lt;/strong&gt; — Sections 6-9&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Validate&lt;/strong&gt; — Section 11&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If active violation suspected&lt;/strong&gt; — go directly to Section 10 (response and recovery)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate report&lt;/strong&gt; — Section 14&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1.4 Conflict Resolution Rules
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Conflict&lt;/th&gt;
&lt;th&gt;Rule&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Existing manual action&lt;/td&gt;
&lt;td&gt;Stop all other work. Section 10.3 takes priority.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Suspected scaled content abuse&lt;/td&gt;
&lt;td&gt;Audit immediately. Stop publishing AI content until audit complete.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing site reputation abuse via subdomain/subfolder leasing&lt;/td&gt;
&lt;td&gt;Terminate the arrangement. No remediation works while it's active.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing expired domain abuse&lt;/td&gt;
&lt;td&gt;Either commit to substantively continuing original purpose or migrate to new domain.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Existing link schemes&lt;/td&gt;
&lt;td&gt;Disavow + cease + document for any reconsideration request.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Aggressive SEO contractor recommending policy-violating practices&lt;/td&gt;
&lt;td&gt;Do not implement. Document advice in writing for accountability.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  1.5 Required Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console&lt;/strong&gt; — primary source for manual action notifications and spam-related ranking data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Search Console Disavow Tool&lt;/strong&gt; — for disavowing toxic backlinks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bing Webmaster Tools&lt;/strong&gt; — parallel monitoring for Bing manual actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The actual spam policies documentation&lt;/strong&gt; — &lt;code&gt;developers.google.com/search/docs/essentials/spam-policies&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Originality.ai or similar&lt;/strong&gt; — AI content detection for scaled content abuse audit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ahrefs/Semrush/Majestic&lt;/strong&gt; — backlink profile auditing for link scheme detection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wayback Machine&lt;/strong&gt; — historical site state research, especially for expired domain audit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server logs&lt;/strong&gt; — to detect cloaking, sneaky redirects, hacked content&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Client Variables Intake
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# ============================================&lt;/span&gt;
&lt;span class="c1"&gt;# SPAM POLICIES FRAMEWORK CLIENT VARIABLES&lt;/span&gt;
&lt;span class="c1"&gt;# ============================================&lt;/span&gt;

&lt;span class="c1"&gt;# --- Business Identity (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;business_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;primary_domain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;domain_age_years&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;domain_acquired_from_someone_else&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# Critical — if true, expired domain abuse risk&lt;/span&gt;
&lt;span class="na"&gt;previous_domain_owner_known&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;previous_domain_purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# --- Penalty History (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_received_manual_action&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;manual_action_history&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;            &lt;span class="c1"&gt;# List of past manual actions and dates&lt;/span&gt;
&lt;span class="na"&gt;has_filed_reconsideration_request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;reconsideration_request_outcome&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;historical_spam_update_impacts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;    &lt;span class="c1"&gt;# Past spam updates that affected this site&lt;/span&gt;

&lt;span class="c1"&gt;# --- Content Creation Patterns (REQUIRED — be honest) ---&lt;/span&gt;
&lt;span class="na"&gt;publishes_ai_generated_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;ai_content_publication_volume&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;    &lt;span class="c1"&gt;# "low" (&amp;lt;5/month), "medium" (5-50/month), "high" (&amp;gt;50/month)&lt;/span&gt;
&lt;span class="na"&gt;ai_content_review_quality&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;        &lt;span class="c1"&gt;# "expert_review", "editor_review", "minimal_review", "none"&lt;/span&gt;
&lt;span class="na"&gt;ai_content_disclosure&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;publishes_at_high_volume&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;      &lt;span class="c1"&gt;# &amp;gt;10 articles per week&lt;/span&gt;
&lt;span class="na"&gt;content_outsourced_to_freelancers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;content_outsourced_volume&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# --- Site Architecture (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_subdomains&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;subdomain_list&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;has_subfolders_with_external_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# Critical for site reputation abuse&lt;/span&gt;
&lt;span class="na"&gt;external_partners_publishing_on_site&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;
&lt;span class="na"&gt;allows_user_generated_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;ugc_moderation_level&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;             &lt;span class="c1"&gt;# "none", "post_hoc", "pre_publication", "vetted_only"&lt;/span&gt;

&lt;span class="c1"&gt;# --- Linking Patterns (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_outbound_paid_links&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;paid_links_use_rel_sponsored&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_link_exchange_arrangements&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_purchased_links&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_used_link_building_services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;sponsored_content_disclosed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;affiliate_links_use_rel_sponsored&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Technical Spam Vectors (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;serves_different_content_to_googlebot&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# Cloaking risk&lt;/span&gt;
&lt;span class="na"&gt;uses_user_agent_detection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_redirect_chains&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_meta_refresh_redirects&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_javascript_redirects_obscuring_destination&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_doorway_pages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;             &lt;span class="c1"&gt;# Many pages targeting variations of same intent&lt;/span&gt;
&lt;span class="na"&gt;has_thin_pages_targeting_keywords&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Content Quality Signals (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_scraped_or_syndicated_content_without_value_add&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_duplicated_content_across_pages&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_machine_translated_content_without_review&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_auto_generated_text_filler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_keyword_stuffed_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_invisible_or_misleading_text&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Hacking &amp;amp; Security (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;last_security_audit_date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;has_been_hacked_historically&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;hack_remediation_complete&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_2fa_on_admin_accounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_security_monitoring&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- Affiliate &amp;amp; Monetization (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;business_model_includes_affiliate&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;affiliate_content_adds_value_beyond_links&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# Honest answer&lt;/span&gt;
&lt;span class="na"&gt;affiliate_disclosure_present&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;affiliate_disclosure_clear_and_conspicuous&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;

&lt;span class="c1"&gt;# --- E-Commerce Specific (if applicable) ---&lt;/span&gt;
&lt;span class="na"&gt;sells_user_data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;displays_misleading_product_information&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;deceptive_pricing_practices&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;fake_reviews_present&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;review_acquisition_methods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;        &lt;span class="c1"&gt;# How reviews are obtained&lt;/span&gt;

&lt;span class="c1"&gt;# --- Compliance Documentation (REQUIRED) ---&lt;/span&gt;
&lt;span class="na"&gt;has_documented_anti_spam_policies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_third_party_content_review_process&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_link_acquisition_policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;has_ai_content_policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;quarterly_spam_audit_performed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After variables are gathered, save as &lt;code&gt;spam-policies-variables.yml&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. What Spam Policies Are
&lt;/h2&gt;

&lt;p&gt;Google's spam policies are explicit rules documented at &lt;code&gt;developers.google.com/search/docs/essentials/spam-policies&lt;/code&gt; that define manipulative practices Google does not allow in search results. These are operationally distinct from quality frameworks like E-E-A-T or HCS.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.1 The Three Enforcement Mechanisms
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Algorithmic Spam Updates&lt;/strong&gt; — Periodic updates to Google's spam-detection algorithms. Like core updates, they roll out over days to weeks, are publicly named, and affect rankings broadly. Sites violating spam policies see ranking suppression, sometimes severe. Recovery requires remediation plus time. Recent named spam updates include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;May 2024 Spam Update (enforcement of the new March 2024 policies)&lt;/li&gt;
&lt;li&gt;October 2024 Spam Update&lt;/li&gt;
&lt;li&gt;December 2024 Spam Update&lt;/li&gt;
&lt;li&gt;June 2025 Spam Update&lt;/li&gt;
&lt;li&gt;November 2025 Spam Update&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Manual Actions&lt;/strong&gt; — Human-issued penalties communicated via Search Console under Security &amp;amp; Manual Actions. Manual actions can be partial (specific pages or sections affected) or sitewide. Some are reconsideration-eligible (after demonstrating remediation), some are not. Manual action types include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Site abused with third-party spam&lt;/li&gt;
&lt;li&gt;User-generated spam&lt;/li&gt;
&lt;li&gt;Spammy free hosts&lt;/li&gt;
&lt;li&gt;Structured data issue&lt;/li&gt;
&lt;li&gt;Unnatural links to your site&lt;/li&gt;
&lt;li&gt;Unnatural links from your site&lt;/li&gt;
&lt;li&gt;Thin content with little or no added value&lt;/li&gt;
&lt;li&gt;Cloaking and/or sneaky redirects&lt;/li&gt;
&lt;li&gt;Pure spam&lt;/li&gt;
&lt;li&gt;Cloaked images&lt;/li&gt;
&lt;li&gt;Hidden text and/or keyword stuffing&lt;/li&gt;
&lt;li&gt;AMP content mismatch&lt;/li&gt;
&lt;li&gt;Sneaky mobile redirects&lt;/li&gt;
&lt;li&gt;News and Discover policy violations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Algorithmic Demotion (No Manual Action)&lt;/strong&gt; — Some spam-detection happens algorithmically without manual review, resulting in ranking suppression without an explicit manual action notification. Sites may experience traffic loss without knowing the cause. These cases require diagnostic investigation against spam policy criteria.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 What Distinguishes Spam from Low Quality
&lt;/h3&gt;

&lt;p&gt;Quality issues (low E-E-A-T, weak HCS) are matters of degree — content can be more or less helpful, more or less authoritative. Spam violations are matters of category — content either is or isn't keyword stuffed, scraped, cloaked. Spam policies define bright lines.&lt;/p&gt;

&lt;p&gt;The practical implication: improving quality moves rankings up gradually. Eliminating spam violations may unlock sudden ranking restoration once Google's systems re-evaluate the site post-remediation.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.3 The 2024 Policy Expansions
&lt;/h3&gt;

&lt;p&gt;In March 2024, Google added three new spam policies that have driven substantial enforcement activity:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scaled Content Abuse&lt;/strong&gt; — Producing pages at scale primarily for ranking purposes, regardless of whether AI, human, or mixed authorship. Replaced the older "automatically generated content" policy with a broader definition focused on intent and pattern rather than method.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Site Reputation Abuse&lt;/strong&gt; — Third parties publishing content on a host site primarily to leverage that site's ranking signals. Common pattern: established media sites leasing subdomains or subfolders to coupon, casino, or supplement marketers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expired Domain Abuse&lt;/strong&gt; — Repurposing expired domains with prior authority to host content unrelated to the prior purpose, primarily for ranking benefit from inherited trust signals.&lt;/p&gt;

&lt;p&gt;These three policies represent the largest spam policy expansion in years and continue to drive significant enforcement through 2026.&lt;/p&gt;

&lt;h3&gt;
  
  
  3.4 What Spam Policies Don't Cover
&lt;/h3&gt;

&lt;p&gt;Spam policies don't cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quality issues&lt;/strong&gt; — addressed via core updates and HCS, not spam policies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mistakes or accidents&lt;/strong&gt; — Google distinguishes between intentional manipulation and good-faith errors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personal preference disagreements&lt;/strong&gt; — practices Google might not love but doesn't classify as spam&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Legal compliance issues&lt;/strong&gt; — copyright, defamation, etc. are addressed through other mechanisms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When something isn't a spam policy violation, addressing it requires the relevant quality framework.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Documented Spam Policies — Comprehensive Reference
&lt;/h2&gt;

&lt;p&gt;This section catalogs every documented spam policy, what it covers, detection patterns, and avoidance requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.1 Cloaking
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Presenting different content to search engine crawlers than to human users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User-agent detection serving different HTML to Googlebot vs browsers&lt;/li&gt;
&lt;li&gt;IP-based content swapping&lt;/li&gt;
&lt;li&gt;JavaScript that hides content from users that Googlebot sees as text&lt;/li&gt;
&lt;li&gt;Reverse cloaking — keyword-stuffed text visible to bots, "cleaner" version to users&lt;/li&gt;
&lt;li&gt;Geographic cloaking serving different content based on visitor location for ranking manipulation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google fetches with browser-like user agents and compares&lt;/li&gt;
&lt;li&gt;Googlebot also runs in different network locations&lt;/li&gt;
&lt;li&gt;Discrepancies between rendered DOM and HTML sent to crawlers flagged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Serve identical content to all visitors (with legitimate exceptions for personalization, A/B testing through proper Google-supported methods, paywall/login walls properly declared)&lt;/li&gt;
&lt;li&gt;If using A/B testing, use Google's recommended approach (canonical to original, no rel=canonical pointing to test variant)&lt;/li&gt;
&lt;li&gt;Personalization based on user signals must not differ for Googlebot in ways that would change ranking signals&lt;/li&gt;
&lt;li&gt;Geographic content variations must use proper hreflang&lt;/li&gt;
&lt;li&gt;Verify with Google's URL Inspection Tool — what Googlebot sees should match what users see&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code pattern (anti-cloaking)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Same HTML for all visitors --&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- Personalization happens client-side AFTER initial render --&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;!-- Or via Google-recognized signals like cookies, not user-agent --&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.2 Doorway Pages
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Pages created primarily to rank for specific queries that funnel users to a different destination of less direct utility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple landing pages for slight variations of the same query (e.g., "cheap car rental Austin," "affordable car rental Austin," "low cost car rental Austin" all leading to same booking page)&lt;/li&gt;
&lt;li&gt;Geographic doorway pages with thin city-specific content but identical service offering&lt;/li&gt;
&lt;li&gt;Pages that exist solely to rank, then redirect or funnel users elsewhere&lt;/li&gt;
&lt;li&gt;Templated pages with minor keyword variations across each instance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Distinction from legitimate location pages&lt;/strong&gt;: A genuine local landing page provides location-specific information (local team, local hours, local context, local testimonials). A doorway page just swaps the city name in templated content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pattern recognition across page templates&lt;/li&gt;
&lt;li&gt;Bounce-and-redirect behavior monitoring&lt;/li&gt;
&lt;li&gt;Lack of unique value per page in a series&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each page must offer substantive unique value beyond keyword targeting&lt;/li&gt;
&lt;li&gt;Location-specific pages must include genuinely location-specific content&lt;/li&gt;
&lt;li&gt;Don't create variations targeting query stems that resolve to the same intent&lt;/li&gt;
&lt;li&gt;Consolidate query variations into single comprehensive pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Programmatic SEO consideration&lt;/strong&gt;: Programmatic city pages (such as those covering 4,715 city/service combinations) are not automatically doorway pages. They're doorway pages when they're thin and offer no location-specific value. They're legitimate when each page offers genuinely useful location-specific information — local team contact, local pricing variations, local case studies, local testimonials, local regulatory considerations, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.3 Hacked Content
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Content placed on a site without permission, typically through security vulnerabilities, that's used for spam, phishing, or malware distribution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Injected pages selling unrelated products (pharmaceuticals, gambling)&lt;/li&gt;
&lt;li&gt;Hidden content (cloaked) only visible to search engines&lt;/li&gt;
&lt;li&gt;Redirected pages sending users to malicious destinations&lt;/li&gt;
&lt;li&gt;Modified existing pages with injected spam content&lt;/li&gt;
&lt;li&gt;Created admin accounts using compromised credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google security systems flag known hack patterns&lt;/li&gt;
&lt;li&gt;Search Console issues "Hacked" warning&lt;/li&gt;
&lt;li&gt;Sudden appearance of pages on unfamiliar topics&lt;/li&gt;
&lt;li&gt;Server logs show unusual activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep all software (CMS, plugins, themes, server stack) current&lt;/li&gt;
&lt;li&gt;Use 2FA on all admin accounts&lt;/li&gt;
&lt;li&gt;Strong unique passwords (password manager)&lt;/li&gt;
&lt;li&gt;Limit admin account count&lt;/li&gt;
&lt;li&gt;Regular security scanning (Wordfence, Sucuri, Patchstack for WordPress; equivalent for other stacks)&lt;/li&gt;
&lt;li&gt;Web Application Firewall (Cloudflare, Sucuri, Wordfence)&lt;/li&gt;
&lt;li&gt;File integrity monitoring&lt;/li&gt;
&lt;li&gt;Intrusion detection on server level&lt;/li&gt;
&lt;li&gt;Off-site backups for rapid recovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Response if hacked&lt;/strong&gt;: See Section 10.5.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.4 Hidden Text and Links
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Text or links placed in a way that human users can't see but search engines can read.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;White text on white background&lt;/li&gt;
&lt;li&gt;Text positioned off-screen (text-indent: -9999px)&lt;/li&gt;
&lt;li&gt;Text behind images&lt;/li&gt;
&lt;li&gt;Tiny font sizes (1px font, 0px line-height)&lt;/li&gt;
&lt;li&gt;Display:none or visibility:hidden on text containing keywords&lt;/li&gt;
&lt;li&gt;Hiding text with CSS that's recoverable by crawlers&lt;/li&gt;
&lt;li&gt;Links in characters like commas or single periods&lt;/li&gt;
&lt;li&gt;1×1 pixel images linking to other sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google rendering identifies hidden content&lt;/li&gt;
&lt;li&gt;Comparison of rendered vs HTML content reveals hidden elements&lt;/li&gt;
&lt;li&gt;Pattern recognition on common hiding techniques&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All text on the page should be visible to users&lt;/li&gt;
&lt;li&gt;Don't use CSS to hide content for ranking purposes&lt;/li&gt;
&lt;li&gt;Legitimate cases where content is hidden until user interaction (accordions, tabs, collapsible sections) are acceptable but content should still be visible/accessible upon interaction&lt;/li&gt;
&lt;li&gt;Modal/popup content acceptable when triggered by user action&lt;/li&gt;
&lt;li&gt;Skip-to-content links acceptable if standard accessibility pattern&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code pattern (legitimate progressive disclosure)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;details&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;Click to expand&lt;span class="nt"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Content visible after click. This is acceptable — user can access.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/details&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Code pattern (spam)&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;&lt;span class="nc"&gt;.hidden&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"hidden"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Keyword stuffed text invisible to users but indexed by search engines.
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4.5 Keyword Stuffing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Loading pages with keywords or numbers in attempts to manipulate ranking, especially when it harms user experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lists of phone numbers without substantive value&lt;/li&gt;
&lt;li&gt;Blocks of text listing cities or regions where the page wants to appear&lt;/li&gt;
&lt;li&gt;Repeating same words or phrases unnaturally&lt;/li&gt;
&lt;li&gt;Hidden keyword lists in meta tags or alt text&lt;/li&gt;
&lt;li&gt;Stuffing alt attributes with keyword variations rather than describing images&lt;/li&gt;
&lt;li&gt;Awkward sentences padded with keyword variations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keyword density relative to surrounding context&lt;/li&gt;
&lt;li&gt;Unnatural phrasing patterns&lt;/li&gt;
&lt;li&gt;Disproportionate keyword frequency&lt;/li&gt;
&lt;li&gt;Patterns that match known stuffing approaches&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use keywords naturally in service of communication&lt;/li&gt;
&lt;li&gt;Alt attributes describe images, don't list keywords&lt;/li&gt;
&lt;li&gt;Meta descriptions describe content, don't pack keywords&lt;/li&gt;
&lt;li&gt;Don't list cities/regions/services as plain text blocks&lt;/li&gt;
&lt;li&gt;Vary language naturally; let topic-relevant terms appear organically&lt;/li&gt;
&lt;li&gt;Write for humans first; if it reads awkwardly, it's stuffed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Word count consideration&lt;/strong&gt;: Stuffing is about pattern, not absolute frequency. A long article on a specific topic will naturally include the topic term frequently — that's fine. A short article repeating the same phrase 30 times is stuffing.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.6 Link Schemes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Links intended to manipulate ranking that aren't editorial in nature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Buying or selling links for ranking&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Purchasing dofollow links&lt;/li&gt;
&lt;li&gt;Selling dofollow links&lt;/li&gt;
&lt;li&gt;Trading goods or services for links&lt;/li&gt;
&lt;li&gt;Sending free products in exchange for links without rel="sponsored"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Excessive link exchanges&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Link to us, we'll link to you" reciprocal arrangements&lt;/li&gt;
&lt;li&gt;Triangular link schemes (A→B→C→A)&lt;/li&gt;
&lt;li&gt;Link exchange directories purpose-built for SEO&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Large-scale article marketing or guest posting with optimized anchor text&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Guest posts where the primary purpose is dropping a link&lt;/li&gt;
&lt;li&gt;Optimized anchor text in guest content&lt;/li&gt;
&lt;li&gt;Single-author guest posting on dozens of sites&lt;/li&gt;
&lt;li&gt;Guest posts with author bios containing manipulated anchor text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Automated link building&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using software to create links across forums, blog comments, profiles&lt;/li&gt;
&lt;li&gt;Paid services that generate links at scale&lt;/li&gt;
&lt;li&gt;Link injection through hacked sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Forum signatures and comments with optimized anchor text&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strategic forum participation primarily for link drops&lt;/li&gt;
&lt;li&gt;Blog comment links with money-anchor text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;PBNs (Private Blog Networks)&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Network of sites primarily existing to link to a money site&lt;/li&gt;
&lt;li&gt;Often built on expired domains&lt;/li&gt;
&lt;li&gt;Often interlinked in patterns that reveal coordination&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backlink profile analysis showing unnatural patterns&lt;/li&gt;
&lt;li&gt;Anchor text distribution analysis&lt;/li&gt;
&lt;li&gt;Velocity analysis (sudden link spikes)&lt;/li&gt;
&lt;li&gt;Link source quality signals&lt;/li&gt;
&lt;li&gt;Pattern matching against known PBN footprints&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Earn links through valuable content, not solicitation&lt;/li&gt;
&lt;li&gt;Mark sponsored/paid links with rel="sponsored"&lt;/li&gt;
&lt;li&gt;Mark guest post author bio links with rel="ugc" or rel="nofollow" if unrelated to content&lt;/li&gt;
&lt;li&gt;Never participate in link exchanges for SEO purposes&lt;/li&gt;
&lt;li&gt;Never purchase links for ranking&lt;/li&gt;
&lt;li&gt;Never use link building services that promise dofollow links at volume&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If unnatural inbound links are discovered&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disavow via Google's Disavow Tool&lt;/li&gt;
&lt;li&gt;Document disavow file in Search Console&lt;/li&gt;
&lt;li&gt;File reconsideration request if manual action issued&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.7 Machine-Generated Traffic
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Automated queries or bot traffic to Google or to a site that doesn't reflect real user behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sending automated queries to Google (rank checking at high volume)&lt;/li&gt;
&lt;li&gt;Bot-driven traffic to a site to manipulate engagement signals&lt;/li&gt;
&lt;li&gt;Click manipulation services purchasing bot clicks on search results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pattern analysis of query and click behavior&lt;/li&gt;
&lt;li&gt;Unusual session patterns&lt;/li&gt;
&lt;li&gt;Click-through patterns not matching organic behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Google's official APIs for any automated query needs&lt;/li&gt;
&lt;li&gt;Don't use rank-tracking services that send unauthorized queries to Google (most reputable services use their own indexes)&lt;/li&gt;
&lt;li&gt;Never use traffic generation services&lt;/li&gt;
&lt;li&gt;Never use click-bot services&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.8 Malware and Malicious Behaviors
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Software that harms users — viruses, trojans, ransomware, unwanted software, drive-by downloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Direct malware distribution&lt;/li&gt;
&lt;li&gt;Misleading downloads (claiming to be one thing, actually another)&lt;/li&gt;
&lt;li&gt;Software that modifies browser settings without consent&lt;/li&gt;
&lt;li&gt;Drive-by downloads triggered by visiting a page&lt;/li&gt;
&lt;li&gt;Sites distributing pirated software with bundled malware&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google Safe Browsing scans&lt;/li&gt;
&lt;li&gt;Detected malware triggers Search Console alerts and search result warnings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All downloads must accurately describe what's being downloaded&lt;/li&gt;
&lt;li&gt;No bundled software users haven't consented to&lt;/li&gt;
&lt;li&gt;No browser modification scripts&lt;/li&gt;
&lt;li&gt;Maintain site security to prevent malware injection&lt;/li&gt;
&lt;li&gt;Verify all third-party scripts and ads&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.9 Misleading Functionality
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Sites that don't work as advertised — fake login forms, fake software, fake services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pretending to be a brand the site isn't (phishing)&lt;/li&gt;
&lt;li&gt;Promising functionality the site doesn't deliver&lt;/li&gt;
&lt;li&gt;Fake "free PDF generator" or similar tools that don't work&lt;/li&gt;
&lt;li&gt;Bait-and-switch products or services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sites must accurately represent themselves and their function&lt;/li&gt;
&lt;li&gt;Promised features must work&lt;/li&gt;
&lt;li&gt;Brand impersonation prohibited&lt;/li&gt;
&lt;li&gt;Deceptive product descriptions prohibited&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.10 Scaled Content Abuse (Added March 2024)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Producing many pages whose primary purpose is search ranking manipulation rather than helping users — regardless of whether the content was created by AI, humans, or both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is one of the most actively enforced policies in 2025-2026.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-generated articles published at high volume with minimal review&lt;/li&gt;
&lt;li&gt;Content farms producing hundreds or thousands of articles per month&lt;/li&gt;
&lt;li&gt;Spinning existing content into many variations&lt;/li&gt;
&lt;li&gt;Programmatic page generation without genuine per-page value&lt;/li&gt;
&lt;li&gt;Templated content with minor variations to target keyword variations&lt;/li&gt;
&lt;li&gt;"AI in, content out" workflows with no editorial layer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Critical clarification&lt;/strong&gt;: AI use isn't automatically scaled content abuse. The violation is &lt;strong&gt;scale + low value + ranking primary purpose&lt;/strong&gt;. AI can be used responsibly as a research and drafting assistant for content that adds genuine value. AI cannot be used to mass-produce content that exists primarily to occupy SERP space.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pattern recognition across publication volume&lt;/li&gt;
&lt;li&gt;Content originality and value analysis&lt;/li&gt;
&lt;li&gt;Engagement signals indicating low user satisfaction&lt;/li&gt;
&lt;li&gt;Linguistic patterns common to AI generation when not edited&lt;/li&gt;
&lt;li&gt;Site-wide content quality distribution&lt;/li&gt;
&lt;li&gt;Rate of publication relative to organizational capacity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The December 2024 core update specifically targeted scaled content abuse patterns. Many content farms saw 40-80% organic traffic loss. The pattern continues — sites publishing high-volume AI content with minimal review face increasing risk through 2026.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Publication volume should be proportional to genuine editorial capacity&lt;/li&gt;
&lt;li&gt;Every published article must add genuine value beyond what's already available&lt;/li&gt;
&lt;li&gt;AI-assisted content requires meaningful human review and editing&lt;/li&gt;
&lt;li&gt;Establish editorial review process: research → AI-assisted draft → expert revision → fact-check → publish&lt;/li&gt;
&lt;li&gt;Disclose AI use per E-E-A-T framework Section 4.4.6&lt;/li&gt;
&lt;li&gt;Maintain author accountability — real bylines, real responsibility for accuracy&lt;/li&gt;
&lt;li&gt;Apply Information Gain principles per &lt;code&gt;framework-infogain.md&lt;/code&gt; — every article must contribute novelty&lt;/li&gt;
&lt;li&gt;Apply HCS principles per &lt;code&gt;framework-hcs.md&lt;/code&gt; — content for users, not for search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quantitative guideline&lt;/strong&gt;: There's no fixed "publish less than X articles per month" rule. The relevant ratio is editorial capacity to publication volume. A team of 1 reviewing 5 AI-assisted articles per month is reasonable. A team of 1 publishing 100 AI articles per month is not. A team of 20 with rigorous editorial workflow can publish more without violation. Google's systems evaluate the quality outcome, not the input method.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.11 Site Reputation Abuse (Added March 2024)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Third-party content published on a host site primarily to take advantage of the host's existing ranking signals, where the third-party content has little oversight from the host site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parasite SEO arrangements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Major news sites hosting "coupon code" subdirectories run by third parties&lt;/li&gt;
&lt;li&gt;Established sites leasing subdomains to gambling, crypto, supplement marketers&lt;/li&gt;
&lt;li&gt;Educational sites carrying commercial review sections operated by external SEO firms&lt;/li&gt;
&lt;li&gt;Government or non-profit sites hosting commercial content for revenue&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Common host targets&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;News publications with high domain authority&lt;/li&gt;
&lt;li&gt;Educational institutions (.edu)&lt;/li&gt;
&lt;li&gt;Government sites (.gov)&lt;/li&gt;
&lt;li&gt;Long-established commercial sites with strong ranking signals&lt;/li&gt;
&lt;li&gt;Wikipedia-adjacent properties&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The May 2024 spam update aggressively enforced this policy. Many high-profile examples of parasite SEO arrangements were de-ranked. Enforcement continues actively through 2026.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subdomain or subfolder content disconnected from main site purpose&lt;/li&gt;
&lt;li&gt;Content quality and topic mismatch with host site&lt;/li&gt;
&lt;li&gt;Editorial oversight gaps (different bylines, different editorial standards, different design patterns)&lt;/li&gt;
&lt;li&gt;Pattern of similar parasite arrangements across multiple host sites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;For host sites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don't lease subdomains or subfolders to third parties for content unrelated to your site's purpose&lt;/li&gt;
&lt;li&gt;All content under your domain should be editorially controlled by your organization&lt;/li&gt;
&lt;li&gt;If accepting sponsored content, treat as such with proper disclosure (rel="sponsored")&lt;/li&gt;
&lt;li&gt;Affiliate content should be created under your editorial standards&lt;/li&gt;
&lt;li&gt;Brand partnerships should be clearly disclosed and editorially vetted&lt;/li&gt;
&lt;li&gt;Coupon/deals sections, if present, should be operated under main editorial oversight&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For sites attempting to use parasite SEO:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Don't. The strategy is documented and enforced.&lt;/li&gt;
&lt;li&gt;Build authority on your own domain&lt;/li&gt;
&lt;li&gt;Use legitimate guest contribution to other sites with rel="sponsored" or rel="ugc" where appropriate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Edge cases&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Press releases distributed via wire services&lt;/strong&gt;: Acceptable when properly attributed and not optimized solely for ranking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job listings, classified ads&lt;/strong&gt;: Acceptable when relevant to host site purpose&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Forum content from real community members&lt;/strong&gt;: Acceptable with moderation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guest articles&lt;/strong&gt;: Acceptable when editorially vetted and contributing genuine value&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Affiliate review sections&lt;/strong&gt;: Risk depends on editorial control — content created and vetted by host editorial team is acceptable; content provided by affiliate partners and published with minimal review is parasite SEO&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Specific test for site reputation abuse&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is the content created by the host site's editorial team? If yes, not parasite SEO.&lt;/li&gt;
&lt;li&gt;Is the content created externally but rigorously edited by the host's team to its standards? Probably acceptable.&lt;/li&gt;
&lt;li&gt;Is the content created externally and published with minimal host editorial involvement, primarily for ranking benefit? Likely site reputation abuse.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  4.12 Expired Domain Abuse (Added March 2024)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Acquiring expired domains with prior authority and repurposing them with content unrelated to the prior site's purpose, primarily to leverage inherited ranking signals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Buying expired domain previously used by a non-profit, repurposing for commercial content&lt;/li&gt;
&lt;li&gt;Buying expired domain previously a small business site, repurposing as a content site on unrelated topic&lt;/li&gt;
&lt;li&gt;Acquiring multiple expired domains to build PBN&lt;/li&gt;
&lt;li&gt;Building content sites on expired domains that have nothing to do with original purpose&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wayback Machine analysis showing dramatic content shifts&lt;/li&gt;
&lt;li&gt;Backlink profile inconsistency with current site purpose&lt;/li&gt;
&lt;li&gt;Patterns matching known expired domain reseller markets&lt;/li&gt;
&lt;li&gt;Sudden ranking improvements without commensurate content quality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;If acquiring an expired domain:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continue the original site's purpose if at all possible&lt;/li&gt;
&lt;li&gt;If different purpose, build genuinely from scratch and don't expect inherited ranking benefits&lt;/li&gt;
&lt;li&gt;Submit reconsideration request if needed clarifying domain purpose change&lt;/li&gt;
&lt;li&gt;Be prepared for ranking signals to be re-evaluated post-acquisition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If domain history is unclear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wayback Machine review reveals prior content&lt;/li&gt;
&lt;li&gt;Major content shifts justify Google's re-evaluation&lt;/li&gt;
&lt;li&gt;Disavow inherited backlinks if they're spammy&lt;/li&gt;
&lt;li&gt;Build new authority from current activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best practice&lt;/strong&gt;: Build on new domains for new businesses. The "buying an aged domain for SEO benefit" strategy is now actively penalized. The domain age signal that this strategy targeted has been re-weighted to require continuity of purpose.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.13 Scraped Content
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Content republished from other sources without adding meaningful value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-generated scraping of RSS feeds republished as own content&lt;/li&gt;
&lt;li&gt;Content "spinning" — taking original content and using software to substitute synonyms&lt;/li&gt;
&lt;li&gt;Republishing other sites' content with minor modifications&lt;/li&gt;
&lt;li&gt;Aggregator pages with snippets but no substantial value add&lt;/li&gt;
&lt;li&gt;Content "rewriting" services that produce technically-different but substantively-identical content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Distinction from legitimate aggregation&lt;/strong&gt;: Aggregation that adds substantial value (curation, expert commentary, synthesis) is acceptable. Aggregation that adds nothing beyond republishing is scraping.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Content similarity matching against original sources&lt;/li&gt;
&lt;li&gt;Pattern recognition on spinning techniques&lt;/li&gt;
&lt;li&gt;Originality analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All content should be substantively original to the publishing site&lt;/li&gt;
&lt;li&gt;Quotes and excerpts permitted with attribution&lt;/li&gt;
&lt;li&gt;Curated lists permitted with substantial original commentary&lt;/li&gt;
&lt;li&gt;Syndication agreements permitted when properly canonicalized to original&lt;/li&gt;
&lt;li&gt;Synthesis across sources permitted when synthesis itself is the contribution&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.14 Sneaky Redirects
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Redirects that send users to a different destination than they expected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User clicks search result expecting one type of content, redirected to commercial offer&lt;/li&gt;
&lt;li&gt;Mobile users redirected to different content than desktop users expecting the same page&lt;/li&gt;
&lt;li&gt;Redirects from one search result to entirely unrelated destination&lt;/li&gt;
&lt;li&gt;JavaScript redirects that mask the destination&lt;/li&gt;
&lt;li&gt;Conditional redirects based on referrer (only redirect when from Google)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mobile vs desktop content comparison&lt;/li&gt;
&lt;li&gt;User-experience signals (bounce rate, behavior)&lt;/li&gt;
&lt;li&gt;Crawl path analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redirects must lead to content matching what the search snippet promised&lt;/li&gt;
&lt;li&gt;Mobile and desktop should reach equivalent content for the same URL&lt;/li&gt;
&lt;li&gt;Use 301/302 redirects appropriately, not JavaScript redirects to mask destinations&lt;/li&gt;
&lt;li&gt;Don't redirect users based on referrer for ranking manipulation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.15 Spammy Automatically-Generated Content
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Content produced by automated systems primarily for ranking, without value to users. Largely subsumed by the broader Scaled Content Abuse policy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Markov chain generated text&lt;/li&gt;
&lt;li&gt;Translated text without human review&lt;/li&gt;
&lt;li&gt;Automatically combined content from multiple sources&lt;/li&gt;
&lt;li&gt;Automatically-created content stitching together database content with templates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This older policy has been broadened into Scaled Content Abuse (Section 4.10). The narrow technical definition of "automatically generated" is now less relevant than the broader "content created at scale primarily for ranking." Same defensive patterns apply.&lt;/p&gt;

&lt;h3&gt;
  
  
  4.16 Thin Affiliate Pages
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Affiliate marketing pages with little original content beyond the affiliate offers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product review pages that just describe what the product's manufacturer says&lt;/li&gt;
&lt;li&gt;Comparison pages with no actual testing or evaluation&lt;/li&gt;
&lt;li&gt;"Top 10" lists ranked by affiliate commission rather than user benefit&lt;/li&gt;
&lt;li&gt;Pages with no value beyond the affiliate links&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Distinction from legitimate affiliate content&lt;/strong&gt;: Affiliate marketing isn't prohibited. Thin affiliate content is. The standard: would this page be valuable even without the affiliate links? If not, it's thin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Affiliate content must add substantial value beyond the affiliate program&lt;/li&gt;
&lt;li&gt;Real product testing or experience documented&lt;/li&gt;
&lt;li&gt;Evaluation criteria honest and useful&lt;/li&gt;
&lt;li&gt;Recommendations based on user benefit, not commission rate&lt;/li&gt;
&lt;li&gt;Affiliate disclosure prominent (FTC requirement and quality signal)&lt;/li&gt;
&lt;li&gt;Use rel="sponsored" on affiliate links&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4.17 User-Generated Spam
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Spam content posted by third parties on a site, often through comments, forums, or open user-content systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comment spam with promotional links&lt;/li&gt;
&lt;li&gt;Profile pages created solely to host links&lt;/li&gt;
&lt;li&gt;Forum signatures with money-anchor links&lt;/li&gt;
&lt;li&gt;Review spam (fake reviews, paid reviews)&lt;/li&gt;
&lt;li&gt;Marketplace listings designed for SEO rather than genuine commerce&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Detection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pattern recognition on common spam content&lt;/li&gt;
&lt;li&gt;Volume and velocity of UGC posting&lt;/li&gt;
&lt;li&gt;Author signal analysis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Avoidance requirements&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;For sites with UGC:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement moderation (pre-publication ideally, post-publication minimum)&lt;/li&gt;
&lt;li&gt;Require account creation with verification&lt;/li&gt;
&lt;li&gt;Use rel="ugc" on links from user-generated content&lt;/li&gt;
&lt;li&gt;Implement spam filters (Akismet for WordPress, etc.)&lt;/li&gt;
&lt;li&gt;Manual review of high-volume posters&lt;/li&gt;
&lt;li&gt;Remove spam content promptly when discovered&lt;/li&gt;
&lt;li&gt;Don't allow comments to remain on old posts indefinitely if not moderated&lt;/li&gt;
&lt;li&gt;Consider closing comments on older posts if moderation isn't sustainable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If site is hit by user-generated spam manual action:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Audit all UGC for spam patterns&lt;/li&gt;
&lt;li&gt;Remove confirmed spam&lt;/li&gt;
&lt;li&gt;Strengthen moderation processes&lt;/li&gt;
&lt;li&gt;File reconsideration request demonstrating remediation&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. Special Focus: The Three Policies Added March 2024
&lt;/h2&gt;

&lt;p&gt;The three new spam policies introduced in March 2024 represent the most active enforcement areas in 2025-2026. Most penalties issued through this period fall into one of these three categories.&lt;/p&gt;

&lt;h3&gt;
  
  
  5.1 Scaled Content Abuse — Defensive Implementation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Audit current state&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Scaled content abuse audit&lt;/span&gt;
&lt;span class="na"&gt;publication_volume_per_month&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;authors_per_published_article_average&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;review_time_per_article_hours&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;ai_assisted_articles_per_month&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;ai_unassisted_articles_per_month&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="na"&gt;content_outsourcing_volume&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;

&lt;span class="c1"&gt;# Honesty check&lt;/span&gt;
&lt;span class="na"&gt;publishing_at_capacity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# Are we publishing more than we can genuinely review?&lt;/span&gt;
&lt;span class="na"&gt;each_article_adds_genuine_value&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# Honest answer&lt;/span&gt;
&lt;span class="na"&gt;review_process_is_substantive&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# Honest answer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Risk assessment&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;Risk Level&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;10 articles/month, expert authors, comprehensive review&lt;/td&gt;
&lt;td&gt;Very Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10-50/month, mix of human and AI-assisted, full editorial review&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;50-200/month, primarily AI-assisted, light editorial review&lt;/td&gt;
&lt;td&gt;Medium-High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt;200/month, primarily AI-generated, minimal review&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt;50/month, single editor reviewing all, no expert input&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Defensive structural patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Editorial capacity matched to volume&lt;/strong&gt;: If team can rigorously review N articles per month, publication volume should not exceed N (with margin)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documented editorial process&lt;/strong&gt;: Research → Outline → Draft (AI-assisted or not) → Expert review → Fact-check → Edit → Publish&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Author accountability&lt;/strong&gt;: Real bylines, real Person schema with credentials, real responsibility for accuracy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-article value gating&lt;/strong&gt;: Pre-publish check requiring articulation of what the article adds (Information Gain framework)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI use disclosure&lt;/strong&gt;: Site-wide policy + per-article disclosure when applicable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality monitoring&lt;/strong&gt;: Track engagement metrics; remove or significantly improve underperforming content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Topical focus discipline&lt;/strong&gt;: Don't publish on topics outside genuine site authority&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;If currently exceeding safe patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Stop publishing AI content immediately&lt;/strong&gt; until audit complete&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit existing AI content&lt;/strong&gt; — identify articles with insufficient value&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove or significantly improve&lt;/strong&gt; identified articles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Restructure publication cadence&lt;/strong&gt; to match genuine editorial capacity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document new process&lt;/strong&gt; for any reconsideration needs&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5.2 Site Reputation Abuse — Defensive Implementation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Audit current state&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Site reputation abuse audit&lt;/span&gt;
&lt;span class="na"&gt;hosts_third_party_subdomain_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;subdomain_third_parties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;  &lt;span class="c1"&gt;# List with editorial control level&lt;/span&gt;

&lt;span class="na"&gt;hosts_third_party_subfolder_content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;subfolder_third_parties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;  &lt;span class="c1"&gt;# List with editorial control level&lt;/span&gt;

&lt;span class="na"&gt;allows_external_publishing_arrangements&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;external_arrangement_details&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[]&lt;/span&gt;  &lt;span class="c1"&gt;# Description and editorial control level&lt;/span&gt;

&lt;span class="na"&gt;editorial_control_over_all_subdomains&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# "full", "partial", "none"&lt;/span&gt;
&lt;span class="na"&gt;editorial_control_over_all_subfolders&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Acceptable arrangements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sponsored content&lt;/strong&gt;: Clearly disclosed, rel="sponsored", produced or rigorously vetted by host editorial&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guest contributions&lt;/strong&gt;: Vetted by host editorial team, fits topical focus&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Affiliate partnerships&lt;/strong&gt;: Content created by host team, with affiliate links properly disclosed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coupon/deals&lt;/strong&gt;: Operated by host team or under direct host editorial supervision&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Press releases&lt;/strong&gt;: Through proper PR/wire mechanisms with proper attribution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job listings&lt;/strong&gt;: Relevant to host site purpose, properly structured&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Unacceptable arrangements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Subdomain leased to third party for content unrelated to host purpose&lt;/li&gt;
&lt;li&gt;Subfolder where third party publishes with minimal host editorial involvement&lt;/li&gt;
&lt;li&gt;Coupon section run entirely by external SEO agency&lt;/li&gt;
&lt;li&gt;Casino/gambling content on educational or news sites&lt;/li&gt;
&lt;li&gt;Supplement marketing on health information sites&lt;/li&gt;
&lt;li&gt;Any "we'll pay you to host our content" arrangement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Defensive structural patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;All content under main domain editorially controlled by main organization&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subdomains used for legitimate technical separation&lt;/strong&gt; (status.example.com, blog.example.com when run by same team) not for third-party content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editorial standards applied uniformly&lt;/strong&gt; across all site content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sponsored content distinctly marked&lt;/strong&gt; with rel="sponsored" and visible disclosure&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Third-party content prohibited&lt;/strong&gt; unless rigorously vetted&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;If currently has parasite SEO arrangement&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Terminate the arrangement&lt;/strong&gt; — no remediation works while it's active&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remove or migrate the third-party content&lt;/strong&gt; off the host domain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;301 redirect to third party's own domain&lt;/strong&gt; if appropriate (with proper communication)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document termination&lt;/strong&gt; for any reconsideration request&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audit broader site for similar patterns&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  5.3 Expired Domain Abuse — Defensive Implementation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Audit current state&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Expired domain abuse audit&lt;/span&gt;
&lt;span class="na"&gt;domain_acquired_from_someone_else&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;acquisition_date&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;prior_owner_known&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;prior_site_purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;

&lt;span class="na"&gt;current_site_purpose&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="na"&gt;purpose_continuity_with_prior&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# "same", "related", "unrelated", "completely_different"&lt;/span&gt;

&lt;span class="na"&gt;wayback_machine_review_completed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;inherited_backlinks_audited&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="na"&gt;problematic_inherited_backlinks_disavowed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Risk assessment&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pattern&lt;/th&gt;
&lt;th&gt;Risk Level&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Domain registered from scratch, never previously used&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acquired domain, continuing original purpose&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acquired domain, related but evolved purpose&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acquired domain, completely different purpose&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multiple acquired domains in same network&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acquired domain with documented prior ranking, repurposed&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Defensive structural patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;For new businesses, use new domains&lt;/strong&gt; — don't acquire aged domains for SEO benefit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For business name acquisitions, focus on the brand value&lt;/strong&gt; not the SEO equity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If acquiring expired domain, evaluate continuity carefully&lt;/strong&gt; — substantial purpose continuity is the safe path&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If purpose changes substantially&lt;/strong&gt;, treat as new domain — don't expect inherited ranking benefits&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit inherited backlink profile&lt;/strong&gt; — disavow toxic backlinks immediately&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Wayback Machine review&lt;/strong&gt; — document the prior site for context&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;If domain has expired domain abuse risk&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Wayback Machine audit&lt;/strong&gt; — what was the prior content?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backlink audit&lt;/strong&gt; — what does the inherited link profile look like?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disavow toxic backlinks&lt;/strong&gt; through Google Search Console&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make domain change explicit&lt;/strong&gt; — About page acknowledges the change with substantive purpose explanation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build current authority through current work&lt;/strong&gt; — don't rely on inherited signals&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be prepared for slow ranking initially&lt;/strong&gt; — Google will re-evaluate&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  6. Defensive Site Architecture
&lt;/h2&gt;

&lt;p&gt;Beyond avoiding specific violations, structural patterns reduce risk of accidental violations.&lt;/p&gt;

&lt;h3&gt;
  
  
  6.1 Content Publishing Workflow
&lt;/h3&gt;

&lt;p&gt;A workflow that prevents scaled content abuse and thin content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Topic identification
  → "Why are we covering this?" gate
  → "What can we contribute?" gate (Information Gain)
  → If yes to both, proceed

Research
  → Primary sources gathered
  → Subject matter expert input

Drafting
  → AI-assisted or human-written (either acceptable)
  → Draft completed by named author

Expert review
  → Subject matter expert reviews accuracy
  → Reviewer takes professional responsibility
  → Reviewer signs off with name and credentials

Fact-checking
  → Every factual claim verified against primary source
  → Citations verified to actually support claims
  → Statistics double-checked

Editorial review
  → Quality assessment
  → Information Gain confirmation
  → Style and tone

Pre-publication check
  → Author byline with credentials present
  → Reviewer credit if YMYL
  → Disclosures present (AI use, affiliate, sponsored)
  → Schema valid
  → Internal links appropriate
  → Original imagery

Publication
  → Real bylines with author accountability
  → AI use disclosed if applicable
  → Refresh schedule set
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.2 Link Acquisition Policy
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# {{BUSINESS_NAME}} Link Acquisition Policy&lt;/span&gt;

&lt;span class="gu"&gt;## What We Do&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Earn links through valuable content
&lt;span class="p"&gt;-&lt;/span&gt; Cite primary sources in our content (creating natural inbound interest)
&lt;span class="p"&gt;-&lt;/span&gt; Participate in industry communities authentically
&lt;span class="p"&gt;-&lt;/span&gt; Build relationships with relevant publications

&lt;span class="gu"&gt;## What We Don't Do&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Buy or sell links for ranking purposes
&lt;span class="p"&gt;-&lt;/span&gt; Participate in link exchange schemes
&lt;span class="p"&gt;-&lt;/span&gt; Use link building services that promise volume
&lt;span class="p"&gt;-&lt;/span&gt; Stuff guest post bylines with optimized anchor text
&lt;span class="p"&gt;-&lt;/span&gt; Manipulate forum signatures or comment links
&lt;span class="p"&gt;-&lt;/span&gt; Operate or participate in PBNs

&lt;span class="gu"&gt;## Sponsored Content&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Sponsored relationships disclosed with rel="sponsored"
&lt;span class="p"&gt;-&lt;/span&gt; Sponsored content visibly marked
&lt;span class="p"&gt;-&lt;/span&gt; Editorial integrity maintained

&lt;span class="gu"&gt;## Affiliate Links&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; All affiliate links use rel="sponsored"
&lt;span class="p"&gt;-&lt;/span&gt; Affiliate disclosure present on all affiliate content
&lt;span class="p"&gt;-&lt;/span&gt; Affiliate recommendations based on user benefit, not commission

&lt;span class="gu"&gt;## When We Discover Toxic Inbound Links&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Document via backlink audit
&lt;span class="p"&gt;-&lt;/span&gt; Disavow through Google Search Console
&lt;span class="p"&gt;-&lt;/span&gt; Update Disavow file as needed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.3 Third-Party Content Review Process
&lt;/h3&gt;

&lt;p&gt;If the site allows any external content:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Third-Party Content Review Process&lt;/span&gt;

&lt;span class="gu"&gt;## What We Accept&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Guest contributions from credentialed experts on our topical focus areas
&lt;span class="p"&gt;-&lt;/span&gt; Sponsored content clearly identified as such
&lt;span class="p"&gt;-&lt;/span&gt; User-generated content through approved channels

&lt;span class="gu"&gt;## What We Don't Accept&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Subdomain or subfolder leasing
&lt;span class="p"&gt;-&lt;/span&gt; Content from external SEO agencies
&lt;span class="p"&gt;-&lt;/span&gt; Content disconnected from our editorial focus
&lt;span class="p"&gt;-&lt;/span&gt; Content with manipulated anchor text

&lt;span class="gu"&gt;## Vetting Process&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; Author/contributor identity verified
&lt;span class="p"&gt;2.&lt;/span&gt; Content topic fits our editorial focus
&lt;span class="p"&gt;3.&lt;/span&gt; Quality matches our standards
&lt;span class="p"&gt;4.&lt;/span&gt; Editorial review by our team
&lt;span class="p"&gt;5.&lt;/span&gt; Fact-checking through our process
&lt;span class="p"&gt;6.&lt;/span&gt; Disclosure requirements met
&lt;span class="p"&gt;7.&lt;/span&gt; Schema and metadata applied per our standards
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.4 AI Content Policy
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# {{BUSINESS_NAME}} AI Content Policy&lt;/span&gt;

&lt;span class="gu"&gt;## How We Use AI&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Research assistance and source gathering
&lt;span class="p"&gt;-&lt;/span&gt; First-draft generation reviewed by humans
&lt;span class="p"&gt;-&lt;/span&gt; Grammar and style editing
&lt;span class="p"&gt;-&lt;/span&gt; Outline and structure assistance

&lt;span class="gu"&gt;## How We Don't Use AI&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Mass-producing articles for SEO
&lt;span class="p"&gt;-&lt;/span&gt; Publishing AI content without expert review
&lt;span class="p"&gt;-&lt;/span&gt; Generating fabricated quotes, statistics, or experiences
&lt;span class="p"&gt;-&lt;/span&gt; Replacing the need for genuine subject matter expertise

&lt;span class="gu"&gt;## Editorial Standards for AI-Assisted Content&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Every AI-assisted article reviewed by named subject matter expert
&lt;span class="p"&gt;-&lt;/span&gt; Reviewer takes professional responsibility
&lt;span class="p"&gt;-&lt;/span&gt; All factual claims verified against primary sources
&lt;span class="p"&gt;-&lt;/span&gt; AI use disclosed per article when applicable
&lt;span class="p"&gt;-&lt;/span&gt; Same quality bar as human-written content

&lt;span class="gu"&gt;## Volume Discipline&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; Publication volume matches editorial capacity
&lt;span class="p"&gt;-&lt;/span&gt; We don't publish more than we can rigorously review
&lt;span class="p"&gt;-&lt;/span&gt; Quality over quantity is the principle
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.5 Security Posture
&lt;/h3&gt;

&lt;p&gt;Documented at &lt;code&gt;/admin/security-posture.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Security Posture&lt;/span&gt;

&lt;span class="gu"&gt;## Current Configuration&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; 2FA enabled on all admin accounts
&lt;span class="p"&gt;-&lt;/span&gt; Strong unique passwords (password manager required)
&lt;span class="p"&gt;-&lt;/span&gt; Limited admin account count
&lt;span class="p"&gt;-&lt;/span&gt; Web Application Firewall active (Cloudflare)
&lt;span class="p"&gt;-&lt;/span&gt; File integrity monitoring (Wordfence/equivalent)
&lt;span class="p"&gt;-&lt;/span&gt; Daily off-site backups
&lt;span class="p"&gt;-&lt;/span&gt; Quarterly security audit

&lt;span class="gu"&gt;## Monitoring&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Search Console for "Hacked" warnings
&lt;span class="p"&gt;-&lt;/span&gt; Server logs reviewed weekly for unusual activity
&lt;span class="p"&gt;-&lt;/span&gt; Malware scanning weekly
&lt;span class="p"&gt;-&lt;/span&gt; SSL certificate expiration monitoring

&lt;span class="gu"&gt;## Incident Response&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Hacked content discovered → Section 10.5 protocol
&lt;span class="p"&gt;-&lt;/span&gt; Credential compromise → password rotation across all accounts
&lt;span class="p"&gt;-&lt;/span&gt; Successful intrusion → forensic analysis required before remediation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7. Red Flags and Early Warning Signs
&lt;/h2&gt;

&lt;p&gt;Patterns that suggest spam policy violation risk before formal penalty.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.1 Content Red Flags
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Publication volume increasing without staffing increase&lt;/li&gt;
&lt;li&gt;AI content disclosure conversations being avoided&lt;/li&gt;
&lt;li&gt;Pressure to publish "just to have content" on topics&lt;/li&gt;
&lt;li&gt;Articles published that the team hasn't read in full&lt;/li&gt;
&lt;li&gt;Topical drift into areas outside genuine expertise&lt;/li&gt;
&lt;li&gt;Word count targets driving content padding&lt;/li&gt;
&lt;li&gt;Refresh dates being updated without content updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7.2 Linking Red Flags
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sudden inbound link velocity increases&lt;/li&gt;
&lt;li&gt;Inbound links from sites with unrelated topics&lt;/li&gt;
&lt;li&gt;Inbound links with optimized anchor text patterns&lt;/li&gt;
&lt;li&gt;Outbound link targets the team can't explain&lt;/li&gt;
&lt;li&gt;"Link building" budget line items&lt;/li&gt;
&lt;li&gt;Email outreach offers for "guaranteed dofollow links"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7.3 Architecture Red Flags
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Subdomain or subfolder activity not familiar to main team&lt;/li&gt;
&lt;li&gt;Pages indexed that the team didn't create&lt;/li&gt;
&lt;li&gt;Geographic content variations beyond legitimate localization&lt;/li&gt;
&lt;li&gt;Server log entries showing crawl patterns to unknown URLs&lt;/li&gt;
&lt;li&gt;File system changes the team didn't make&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7.4 Search Console Red Flags
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Manual action notifications (immediate priority)&lt;/li&gt;
&lt;li&gt;Security issue notifications&lt;/li&gt;
&lt;li&gt;Sudden indexing decreases without explanation&lt;/li&gt;
&lt;li&gt;Sudden indexing increases without explanation&lt;/li&gt;
&lt;li&gt;"Hacked" warnings&lt;/li&gt;
&lt;li&gt;Coverage report errors increasing&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7.5 Traffic Pattern Red Flags
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sudden traffic loss without identified core update&lt;/li&gt;
&lt;li&gt;Specific page sections losing traffic while others stable&lt;/li&gt;
&lt;li&gt;Branded query traffic dropping (suggests manual action)&lt;/li&gt;
&lt;li&gt;Sudden traffic gains that seem too good to be true (often precede manipulation detection)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  8. Stack-Specific Spam Policy Considerations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  8.1 WordPress
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;High-risk patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plugins generating content automatically&lt;/li&gt;
&lt;li&gt;Themes with hidden links to plugin developer&lt;/li&gt;
&lt;li&gt;Comment moderation off by default&lt;/li&gt;
&lt;li&gt;Outdated plugins creating security vulnerabilities&lt;/li&gt;
&lt;li&gt;"SEO" plugins that recommend stuffing keywords or hiding text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Defensive practices&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Akismet or similar comment spam filtering&lt;/li&gt;
&lt;li&gt;Wordfence or equivalent security&lt;/li&gt;
&lt;li&gt;Content publishing workflow plugins (Editorial Calendar, PublishPress)&lt;/li&gt;
&lt;li&gt;Schema validation through Rank Math or Yoast&lt;/li&gt;
&lt;li&gt;Regular plugin and theme updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.2 Programmatic SEO Sites (Next.js, custom)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;High-risk patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;City pages or category pages with templated content lacking unique per-page value&lt;/li&gt;
&lt;li&gt;Database-driven pages with insufficient editorial layer&lt;/li&gt;
&lt;li&gt;Faceted navigation creating thousands of low-value URLs&lt;/li&gt;
&lt;li&gt;Auto-generated pages from third-party data feeds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Defensive practices&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Per-page minimum content threshold enforced at build time&lt;/li&gt;
&lt;li&gt;Per-page unique value validation&lt;/li&gt;
&lt;li&gt;Robots.txt or noindex on pages below quality threshold&lt;/li&gt;
&lt;li&gt;Editorial review of programmatic page templates&lt;/li&gt;
&lt;li&gt;Genuinely location-specific or category-specific content per page&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.3 E-commerce Platforms (Shopify, WooCommerce, custom)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;High-risk patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-generated product description from manufacturer feeds&lt;/li&gt;
&lt;li&gt;Manufacturer review content republished without value-add&lt;/li&gt;
&lt;li&gt;Faceted navigation creating duplicate content URLs&lt;/li&gt;
&lt;li&gt;Affiliate review sites disguised as e-commerce&lt;/li&gt;
&lt;li&gt;Fake or incentivized reviews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Defensive practices&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Original product descriptions per product (or properly canonicalized to manufacturer)&lt;/li&gt;
&lt;li&gt;Genuine customer reviews with verification&lt;/li&gt;
&lt;li&gt;Faceted URLs properly handled with canonicals or noindex&lt;/li&gt;
&lt;li&gt;Clear distinction between affiliate and direct sales&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8.4 News and Media Sites
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;High-risk patterns&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coupon or deals subdirectories operated by third parties (parasite SEO risk)&lt;/li&gt;
&lt;li&gt;Sponsored content not clearly marked&lt;/li&gt;
&lt;li&gt;Aggregated wire content republished without value-add&lt;/li&gt;
&lt;li&gt;AI-generated breaking news without verification&lt;/li&gt;
&lt;li&gt;Programmatic local pages with thin content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Defensive practices&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All editorial sections under direct editorial control&lt;/li&gt;
&lt;li&gt;Sponsored content clearly marked and disclosed&lt;/li&gt;
&lt;li&gt;AI use restricted to editorial assistance, not authoritative content&lt;/li&gt;
&lt;li&gt;Local journalism backed by genuine local presence&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  9. Cross-Reference to the 14-Tier Framework
&lt;/h2&gt;

&lt;p&gt;Spam Policies compliance interacts with multiple tiers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tier 1 SSO&lt;/strong&gt; — Site Security Optimization prevents hacked content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 1 GCO&lt;/strong&gt; — Google Compliance Optimization includes spam policies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 2 OBL&lt;/strong&gt; — Outbound Link strategies must follow link scheme policies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 2 IBL&lt;/strong&gt; — Inbound Link management must follow link scheme policies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 3 LLMO&lt;/strong&gt; — AI use must follow scaled content abuse policies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tier 6 OCO&lt;/strong&gt; — Original Content Optimization is the inverse of scraped/scaled abuse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Spam Policies compliance is a &lt;strong&gt;gate&lt;/strong&gt; — sites failing here can't benefit from optimization in any other tier.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Detection, Response, and Recovery
&lt;/h2&gt;

&lt;h3&gt;
  
  
  10.1 Manual Action Detection
&lt;/h3&gt;

&lt;p&gt;Check Search Console at &lt;code&gt;Search Console &amp;gt; Security &amp;amp; Manual Actions &amp;gt; Manual actions&lt;/code&gt; weekly.&lt;/p&gt;

&lt;p&gt;When a manual action appears:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read the description carefully&lt;/li&gt;
&lt;li&gt;Note whether it's site-wide or partial&lt;/li&gt;
&lt;li&gt;Document the action type and date&lt;/li&gt;
&lt;li&gt;Begin immediate investigation per Section 10.3&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.2 Algorithmic Spam Update Detection
&lt;/h3&gt;

&lt;p&gt;Use the same protocol as core update detection (see &lt;code&gt;framework-coreupdates.md&lt;/code&gt; Section 4):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Monitor SERP volatility trackers&lt;/li&gt;
&lt;li&gt;Watch for Google announcements about spam updates&lt;/li&gt;
&lt;li&gt;Compare site performance to industry signals&lt;/li&gt;
&lt;li&gt;72-hour hold rule before reactive action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a spam update appears to be active:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Audit site against spam policies (Sections 4-5)&lt;/li&gt;
&lt;li&gt;Identify likely violation pattern&lt;/li&gt;
&lt;li&gt;Begin remediation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.3 Manual Action Response Protocol
&lt;/h3&gt;

&lt;p&gt;When manual action received:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Day 1&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read action description thoroughly&lt;/li&gt;
&lt;li&gt;Identify what triggered it&lt;/li&gt;
&lt;li&gt;Document current state for "before" reference&lt;/li&gt;
&lt;li&gt;Begin remediation immediately&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Days 1-7&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Comprehensive site audit per relevant Section 4 policy&lt;/li&gt;
&lt;li&gt;Identify all violating content/patterns&lt;/li&gt;
&lt;li&gt;Remediate or remove&lt;/li&gt;
&lt;li&gt;Document every remediation action with dates&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Days 7-14&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verify remediation is complete&lt;/li&gt;
&lt;li&gt;Audit for any missed instances&lt;/li&gt;
&lt;li&gt;Strengthen processes to prevent recurrence&lt;/li&gt;
&lt;li&gt;Prepare reconsideration request&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Reconsideration request structure&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Reconsideration Request — {{ACTION_TYPE}}&lt;/span&gt;

&lt;span class="gu"&gt;## Manual Action Details&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Action type: {{TYPE}}
&lt;span class="p"&gt;-&lt;/span&gt; Notification date: {{DATE}}
&lt;span class="p"&gt;-&lt;/span&gt; Affected pages/sections: {{SCOPE}}

&lt;span class="gu"&gt;## What Caused the Violation&lt;/span&gt;
{{HONEST_DESCRIPTION_OF_THE_PATTERN}}

&lt;span class="gu"&gt;## What We Have Done to Fix It&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; {{REMEDIATION_ACTION_1_WITH_DATE}}
&lt;span class="p"&gt;2.&lt;/span&gt; {{REMEDIATION_ACTION_2_WITH_DATE}}
&lt;span class="p"&gt;3.&lt;/span&gt; {{REMEDIATION_ACTION_3_WITH_DATE}}

&lt;span class="gu"&gt;## Evidence of Remediation&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; {{EVIDENCE_TYPE_1}}: {{LINK_OR_DESCRIPTION}}
&lt;span class="p"&gt;-&lt;/span&gt; {{EVIDENCE_TYPE_2}}: {{LINK_OR_DESCRIPTION}}

&lt;span class="gu"&gt;## Steps We Have Taken to Prevent Recurrence&lt;/span&gt;
&lt;span class="p"&gt;1.&lt;/span&gt; {{PROCESS_CHANGE_1}}
&lt;span class="p"&gt;2.&lt;/span&gt; {{PROCESS_CHANGE_2}}
&lt;span class="p"&gt;3.&lt;/span&gt; {{POLICY_DOCUMENT_LINK}}

&lt;span class="gu"&gt;## Acknowledgment&lt;/span&gt;
We acknowledge the violation, understand why our prior practices violated Google's policies, and are committed to maintaining compliance going forward.

Submitted by: {{NAME}}
Date: {{DATE}}
Search Console verified property: {{DOMAIN}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Submit through Search Console &amp;gt; Manual actions &amp;gt; Request a review.&lt;/p&gt;

&lt;p&gt;Response timeline: Typically days to weeks. Sometimes longer for complex cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.4 Reconsideration Request Best Practices
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Be honest about the violation&lt;/strong&gt;: Google's reviewers know what happened. Trying to deny or minimize is counterproductive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Show specific remediation&lt;/strong&gt;: Concrete actions with dates, not vague statements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Demonstrate understanding&lt;/strong&gt;: Show you understand why the practice was prohibited.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Provide evidence&lt;/strong&gt;: Links to changed pages, screenshots of removed content, documentation of process changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't promise; demonstrate&lt;/strong&gt;: "We have removed 247 articles" is better than "We will remove low-quality articles."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Address root cause&lt;/strong&gt;: Process changes, not just symptom remediation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be patient&lt;/strong&gt;: Multiple rounds of review possible. Don't keep filing requests during review periods.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10.5 Hacked Content Response Protocol
&lt;/h3&gt;

&lt;p&gt;When hacked content is detected:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hour 1&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Take site offline if compromise is severe (better than serving malware to users)&lt;/li&gt;
&lt;li&gt;Document the compromise (screenshots, server log copies)&lt;/li&gt;
&lt;li&gt;Notify hosting provider if applicable&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Hours 1-24&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Forensic analysis — how did they get in?&lt;/li&gt;
&lt;li&gt;Identify all compromised files and pages&lt;/li&gt;
&lt;li&gt;Restore from clean backup if available (verified pre-compromise)&lt;/li&gt;
&lt;li&gt;Apply security patches that addressed the vulnerability&lt;/li&gt;
&lt;li&gt;Rotate all credentials (passwords, API keys, SSH keys)&lt;/li&gt;
&lt;li&gt;Add 2FA to all admin accounts if not already&lt;/li&gt;
&lt;li&gt;Review user accounts; remove unauthorized accounts&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Days 1-7&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Comprehensive site scan for residual compromise&lt;/li&gt;
&lt;li&gt;Submit hacked content notice in Search Console&lt;/li&gt;
&lt;li&gt;Request review once cleaned&lt;/li&gt;
&lt;li&gt;Strengthen security posture per Section 6.5&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Long-term&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Document the incident&lt;/li&gt;
&lt;li&gt;Review security practices&lt;/li&gt;
&lt;li&gt;Implement monitoring to detect future compromises faster&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  10.6 Link Penalty Response
&lt;/h3&gt;

&lt;p&gt;For unnatural links to your site:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Comprehensive backlink audit&lt;/li&gt;
&lt;li&gt;Identify toxic links (spammy domains, manipulated anchor text, link farms)&lt;/li&gt;
&lt;li&gt;Attempt outreach to remove (often unsuccessful at scale)&lt;/li&gt;
&lt;li&gt;Disavow remaining toxic links via Google Search Console Disavow Tool&lt;/li&gt;
&lt;li&gt;Document the disavow file for any reconsideration request&lt;/li&gt;
&lt;li&gt;File reconsideration if manual action&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For unnatural links from your site:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Audit all outbound links&lt;/li&gt;
&lt;li&gt;Add rel="nofollow" or rel="sponsored" where appropriate&lt;/li&gt;
&lt;li&gt;Remove links acquired through link schemes&lt;/li&gt;
&lt;li&gt;Document remediation&lt;/li&gt;
&lt;li&gt;File reconsideration&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  11. Audit Mode
&lt;/h2&gt;

&lt;h3&gt;
  
  
  11.1 Comprehensive Spam Policy Audit
&lt;/h3&gt;

&lt;p&gt;Score the site against every documented policy:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Policy Area&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SP1&lt;/td&gt;
&lt;td&gt;Cloaking&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP2&lt;/td&gt;
&lt;td&gt;Doorway Pages&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP3&lt;/td&gt;
&lt;td&gt;Hacked Content&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP4&lt;/td&gt;
&lt;td&gt;Hidden Text and Links&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP5&lt;/td&gt;
&lt;td&gt;Keyword Stuffing&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP6&lt;/td&gt;
&lt;td&gt;Link Schemes (inbound)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP7&lt;/td&gt;
&lt;td&gt;Link Schemes (outbound)&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP8&lt;/td&gt;
&lt;td&gt;Machine-Generated Traffic&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP9&lt;/td&gt;
&lt;td&gt;Malware and Malicious Behaviors&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP10&lt;/td&gt;
&lt;td&gt;Misleading Functionality&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP11&lt;/td&gt;
&lt;td&gt;Scaled Content Abuse&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP12&lt;/td&gt;
&lt;td&gt;Site Reputation Abuse&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP13&lt;/td&gt;
&lt;td&gt;Expired Domain Abuse&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP14&lt;/td&gt;
&lt;td&gt;Scraped Content&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP15&lt;/td&gt;
&lt;td&gt;Sneaky Redirects&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP16&lt;/td&gt;
&lt;td&gt;Spammy Auto-Generated Content&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP17&lt;/td&gt;
&lt;td&gt;Thin Affiliate Pages&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SP18&lt;/td&gt;
&lt;td&gt;User-Generated Spam&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 18 policies. World-class compliance: 18/18 with zero risks identified.&lt;/p&gt;

&lt;p&gt;A site failing any single policy is at substantial risk regardless of other strengths.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.2 Defensive Infrastructure Audit
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;#&lt;/th&gt;
&lt;th&gt;Criterion&lt;/th&gt;
&lt;th&gt;Pass/Fail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DI1&lt;/td&gt;
&lt;td&gt;Content publishing workflow documented and enforced&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DI2&lt;/td&gt;
&lt;td&gt;Link acquisition policy documented&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DI3&lt;/td&gt;
&lt;td&gt;Third-party content review process exists if applicable&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DI4&lt;/td&gt;
&lt;td&gt;AI content policy documented&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DI5&lt;/td&gt;
&lt;td&gt;Security posture documented and current&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DI6&lt;/td&gt;
&lt;td&gt;Quarterly spam audit performed&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DI7&lt;/td&gt;
&lt;td&gt;Backlink profile audited within last 6 months&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DI8&lt;/td&gt;
&lt;td&gt;UGC moderation active if applicable&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DI9&lt;/td&gt;
&lt;td&gt;Editorial capacity matched to publication volume&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DI10&lt;/td&gt;
&lt;td&gt;Author accountability infrastructure in place&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Score: 10. World-class: 10/10.&lt;/p&gt;




&lt;h2&gt;
  
  
  12. Maintenance Schedule
&lt;/h2&gt;

&lt;h3&gt;
  
  
  12.1 Daily
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Monitor Search Console for new manual actions&lt;/li&gt;
&lt;li&gt;Watch for security warnings&lt;/li&gt;
&lt;li&gt;Spam alert monitoring on user-generated content&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12.2 Weekly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Review server logs for unusual patterns&lt;/li&gt;
&lt;li&gt;Check for new comment spam or UGC spam&lt;/li&gt;
&lt;li&gt;Monitor SERP volatility for spam update signals&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12.3 Monthly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Backlink profile review for unnatural patterns&lt;/li&gt;
&lt;li&gt;Sample content audit for scaled content patterns&lt;/li&gt;
&lt;li&gt;Outbound link audit&lt;/li&gt;
&lt;li&gt;Disavow file review&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12.4 Quarterly
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Full spam policy compliance audit&lt;/li&gt;
&lt;li&gt;Security audit&lt;/li&gt;
&lt;li&gt;Defensive infrastructure audit&lt;/li&gt;
&lt;li&gt;Process documentation review and refresh&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  12.5 Annually
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Comprehensive review against current spam policies (policies evolve)&lt;/li&gt;
&lt;li&gt;Strategic compliance posture assessment&lt;/li&gt;
&lt;li&gt;Update internal policies for any changes&lt;/li&gt;
&lt;li&gt;Reconsideration request review for sites with manual action history&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  13. Common Mistakes &amp;amp; Anti-Patterns
&lt;/h2&gt;

&lt;h3&gt;
  
  
  13.1 Treating Spam Policies as Optional
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Following SEO advice that violates spam policies because "everyone does it."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Penalties happen. Recovery is hard. The "everyone does it" sites disappear regularly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Treat spam policies as bright lines. Don't cross them regardless of competitive pressure.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.2 AI Content Strategy Ignoring Scaled Content Abuse
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: "We can publish 100 AI articles per month for cheap." Mass production with minimal review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Active enforcement target. Detection improving rapidly. Penalty severity high.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Editorial capacity matched to volume. Quality over quantity. Real review process.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.3 "Renting" Authority Through Parasite SEO
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Buying space on high-authority site to rank for commercial queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Site reputation abuse policy targets exactly this. Both host site and parasite content suffer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Build authority on own domain. No parasite SEO arrangements.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.4 Aged Domain Acquisitions for SEO
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Buying expired domains with prior authority to skip the authority-building process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Expired domain abuse policy. Re-evaluation removes the inherited authority.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Build on new domains. Earn authority through current work.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.5 Programmatic SEO Without Per-Page Value
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Generating thousands of city/category pages with templated content lacking unique value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Doorway pages plus thin content. Multiple policy risks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Programmatic pages must have genuine per-page value. Local content must be genuinely local.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.6 Ignoring Manual Actions
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Manual action received, ignored or addressed slowly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Penalties compound. Reconsideration becomes harder over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Manual actions are top priority. Stop other work; address immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.7 Assuming Algorithmic Demotion Isn't Spam-Related
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Traffic loss assumed to be core update; spam policy violation never investigated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Misdiagnosis. Spam-policy-related demotion requires different remediation than core update response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Check spam policies first when traffic loss occurs. Manual action notification doesn't always accompany algorithmic demotion.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.8 Defensive Disavow Without Backlink Audit
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Disavowing all backlinks indiscriminately "to be safe."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Disavowing legitimate authoritative links damages rankings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Audit-driven disavow. Only disavow demonstrably toxic links.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.9 No Quarterly Audit Cadence
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Spam compliance treated as one-time setup, never revisited.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Sites drift. New violations creep in. Policies evolve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Quarterly audits per Section 12.&lt;/p&gt;

&lt;h3&gt;
  
  
  13.10 Reconsideration Requests Without Real Remediation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Filing reconsideration request with vague claims and no concrete remediation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it fails&lt;/strong&gt;: Reviewers see this constantly. Request denied. Future requests get stricter scrutiny.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix&lt;/strong&gt;: Concrete remediation, documented evidence, real process changes. Then file.&lt;/p&gt;




&lt;h2&gt;
  
  
  14. Implementation/Audit Report Templates
&lt;/h2&gt;

&lt;h3&gt;
  
  
  14.1 Spam Policy Implementation Report Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Spam Policies Framework Implementation Report&lt;/span&gt;

&lt;span class="gs"&gt;**Site**&lt;/span&gt;: {{BUSINESS_NAME}}
&lt;span class="gs"&gt;**Implementation Date**&lt;/span&gt;: {{TODAY}}

&lt;span class="gu"&gt;## Comprehensive Audit Results&lt;/span&gt;
{{TABLE_OF_18_POLICIES_WITH_FINDINGS}}

&lt;span class="gu"&gt;## Critical Issues Identified and Remediated&lt;/span&gt;
{{LIST}}

&lt;span class="gu"&gt;## Defensive Infrastructure Installed&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Content publishing workflow: {{STATUS}}
&lt;span class="p"&gt;-&lt;/span&gt; Link acquisition policy: {{STATUS}}
&lt;span class="p"&gt;-&lt;/span&gt; Third-party content process: {{STATUS}}
&lt;span class="p"&gt;-&lt;/span&gt; AI content policy: {{STATUS}}
&lt;span class="p"&gt;-&lt;/span&gt; Security posture documentation: {{STATUS}}

&lt;span class="gu"&gt;## Process Changes Implemented&lt;/span&gt;
{{LIST_WITH_DATES}}

&lt;span class="gu"&gt;## Items Requiring Ongoing Monitoring&lt;/span&gt;
{{LIST}}

&lt;span class="gu"&gt;## Sign-Off&lt;/span&gt;
Implementation complete: {{DATE}}
Implementer: {{NAME}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  14.2 Spam Policy Audit Report Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Spam Policies Audit Report&lt;/span&gt;

&lt;span class="gs"&gt;**Site**&lt;/span&gt;: {{BUSINESS_NAME}}
&lt;span class="gs"&gt;**Audit Date**&lt;/span&gt;: {{TODAY}}

&lt;span class="gu"&gt;## Executive Summary&lt;/span&gt;
{{ASSESSMENT}}

&lt;span class="gu"&gt;## Compliance Status&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Policies in compliance: {{X}}/18
&lt;span class="p"&gt;-&lt;/span&gt; Critical violations identified: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; High-risk patterns identified: {{COUNT}}
&lt;span class="p"&gt;-&lt;/span&gt; Defensive infrastructure score: {{X}}/10

&lt;span class="gu"&gt;## Per-Policy Findings&lt;/span&gt;
{{DETAILED_PER_POLICY_FINDINGS}}

&lt;span class="gu"&gt;## Critical Issues Requiring Immediate Action&lt;/span&gt;
{{LIST_WITH_REMEDIATION_PLANS}}

&lt;span class="gu"&gt;## Risk Patterns Identified&lt;/span&gt;
{{LIST}}

&lt;span class="gu"&gt;## Defensive Infrastructure Gaps&lt;/span&gt;
{{LIST}}

&lt;span class="gu"&gt;## Recommended Remediation Order&lt;/span&gt;
{{PRIORITIZED_LIST_WITH_TIMELINES}}

&lt;span class="gu"&gt;## Manual Action Status&lt;/span&gt;
{{NONE / ACTIVE_ACTION_TYPE / HISTORICAL_ACTIONS}}

&lt;span class="gu"&gt;## Sign-Off&lt;/span&gt;
Audit complete: {{DATE}}
Auditor: {{NAME}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  14.3 Manual Action Reconsideration Request Template
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Reconsideration Request — {{ACTION_TYPE}}&lt;/span&gt;

&lt;span class="gu"&gt;## Manual Action Acknowledgment&lt;/span&gt;

We received a manual action notification on {{DATE}} for {{ACTION_TYPE}}. We acknowledge the violation and have completed remediation.

&lt;span class="gu"&gt;## What Caused the Violation&lt;/span&gt;

{{HONEST_AND_SPECIFIC_DESCRIPTION_OF_WHAT_HAPPENED_INCLUDING_WHY_IT_HAPPENED}}

&lt;span class="gu"&gt;## Specific Remediation Actions&lt;/span&gt;

&lt;span class="gu"&gt;### {{REMEDIATION_AREA_1}}&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; {{DATE}}: {{ACTION_TAKEN}}
&lt;span class="p"&gt;-&lt;/span&gt; {{DATE}}: {{ACTION_TAKEN}}
&lt;span class="p"&gt;-&lt;/span&gt; Evidence: {{LINK_OR_DESCRIPTION}}

&lt;span class="gu"&gt;### {{REMEDIATION_AREA_2}}&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; {{DATE}}: {{ACTION_TAKEN}}
&lt;span class="p"&gt;-&lt;/span&gt; Evidence: {{LINK_OR_DESCRIPTION}}

&lt;span class="gu"&gt;## Process Changes to Prevent Recurrence&lt;/span&gt;
&lt;span class="p"&gt;
1.&lt;/span&gt; {{NEW_POLICY_OR_PROCESS}}: {{LINK_TO_DOCUMENTED_POLICY}}
&lt;span class="p"&gt;2.&lt;/span&gt; {{NEW_POLICY_OR_PROCESS}}: {{LINK_TO_DOCUMENTED_POLICY}}
&lt;span class="p"&gt;3.&lt;/span&gt; {{NEW_POLICY_OR_PROCESS}}: {{LINK_TO_DOCUMENTED_POLICY}}

&lt;span class="gu"&gt;## Supporting Evidence&lt;/span&gt;
&lt;span class="p"&gt;
-&lt;/span&gt; {{EVIDENCE_DOC_1}}: {{LINK}}
&lt;span class="p"&gt;-&lt;/span&gt; {{EVIDENCE_DOC_2}}: {{LINK}}
&lt;span class="p"&gt;-&lt;/span&gt; {{EVIDENCE_DOC_3}}: {{LINK}}

&lt;span class="gu"&gt;## Commitment Going Forward&lt;/span&gt;

We understand why our prior practices violated Google's spam policies. We have implemented systematic changes to prevent recurrence. We are committed to maintaining policy compliance and serving users with high-quality content.
&lt;span class="p"&gt;
---&lt;/span&gt;
Submitted by: {{NAME}}
Title: {{TITLE}}
Date: {{DATE}}
Search Console verified property: {{DOMAIN}}
Contact: {{EMAIL}}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  End of Framework Document
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Document version&lt;/strong&gt;: 1.0&lt;br&gt;
&lt;strong&gt;Last updated&lt;/strong&gt;: 2026-04-29&lt;br&gt;
&lt;strong&gt;Maintained by&lt;/strong&gt;: ThatDeveloperGuy&lt;/p&gt;

&lt;p&gt;Spam policies are the defensive half of search visibility. The frameworks that focus on quality (E-E-A-T, HCS, YMYL, Information Gain) tell you how to earn rankings. This framework tells you how not to lose them. A site that scores perfectly on quality frameworks but violates spam policies will be penalized regardless. A site that maintains spam policy compliance but lacks quality won't rank well but won't be removed.&lt;/p&gt;

&lt;p&gt;The 2024-2026 spam policy expansion — scaled content abuse, site reputation abuse, expired domain abuse — represents Google's most aggressive anti-manipulation enforcement in years. Sites that haven't audited against these new policies are at risk regardless of historical compliance. The work in this framework is defensive but essential.&lt;/p&gt;

&lt;p&gt;Compliance is a continuous practice, not a one-time setup. Quarterly audits per Section 12 are the minimum. Sites with growth, new content patterns, new partnerships, or new authors require more frequent review. The cost of a penalty — both ranking damage and remediation work — is dramatically higher than the cost of compliance.&lt;/p&gt;

&lt;p&gt;Companion documents in this library:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;framework-eeat.md&lt;/code&gt; — Foundational E-E-A-T (the quality counterpart to spam policies)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-ymyl.md&lt;/code&gt; — Your Money or Your Life elevated standards&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-hcs.md&lt;/code&gt; — Helpful Content System&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-sqrg.md&lt;/code&gt; — Search Quality Rater Guidelines&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-coreupdates.md&lt;/code&gt; — Google Core Updates&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-infogain.md&lt;/code&gt; — Information Gain&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-entitysalience.md&lt;/code&gt; — Entity Salience&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-knowledgegraph.md&lt;/code&gt; — Knowledge Graph&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;framework-aicitations.md&lt;/code&gt; — AI Citations&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  About this framework library
&lt;/h2&gt;

&lt;p&gt;This article is the Dev.to republish of a framework reference document from ThatDevPro's SEO + AI engineering library. &lt;strong&gt;Canonical source: &lt;a href="https://www.thatdevpro.com/insights/framework-spampolicies/" rel="noopener noreferrer"&gt;https://www.thatdevpro.com/insights/framework-spampolicies/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ThatDevPro is an SDVOSB-certified veteran-owned web + AI engineering studio operating from Cassville, Missouri. The studio runs the full &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;14-tier Engine Optimization&lt;/a&gt; stack and ships open-source tooling for AI citation engineering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Companion 14-tier Engine Optimization stack&lt;/strong&gt; (each tier is its own article):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-1-foundation/" rel="noopener noreferrer"&gt;Tier 1 — Foundation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-2-search-visibility/" rel="noopener noreferrer"&gt;Tier 2 — Search Visibility&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-3-ai-domination/" rel="noopener noreferrer"&gt;Tier 3 — AI Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-4-entity-and-authority/" rel="noopener noreferrer"&gt;Tier 4 — Entity and Authority&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-5-local-domination/" rel="noopener noreferrer"&gt;Tier 5 — Local Domination&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-6-content-and-multimedia/" rel="noopener noreferrer"&gt;Tier 6 — Content and Multimedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-7-social-and-community/" rel="noopener noreferrer"&gt;Tier 7 — Social and Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-8-data-analytics-conversion/" rel="noopener noreferrer"&gt;Tier 8 — Data, Analytics, Conversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-9-monitoring-and-intelligence/" rel="noopener noreferrer"&gt;Tier 9 — Monitoring and Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-10-workflow-and-operations/" rel="noopener noreferrer"&gt;Tier 10 — Workflow and Operations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-11-marketplace-and-retail/" rel="noopener noreferrer"&gt;Tier 11 — Marketplace and Retail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-12-international/" rel="noopener noreferrer"&gt;Tier 12 — International&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.thatdevpro.com/insights/seo-tier-14-advanced-and-immersive/" rel="noopener noreferrer"&gt;Tier 14 — Advanced and Immersive&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Need this framework implemented on your site? &lt;a href="https://www.thatdevpro.com/services/engine-optimization/" rel="noopener noreferrer"&gt;See the Engine Optimization service&lt;/a&gt; or hire through &lt;a href="https://www.thatdevpro.com/contact/" rel="noopener noreferrer"&gt;ThatDevPro contact&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>googleseo</category>
      <category>spam</category>
      <category>compliance</category>
    </item>
  </channel>
</rss>
