<?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>DEV Community: Apogee Watcher</title>
    <description>The latest articles on DEV Community by Apogee Watcher (@apogeewatcher).</description>
    <link>https://dev.to/apogeewatcher</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3769723%2Fa33f1555-0cd4-4f44-b524-a9608ed39a2c.png</url>
      <title>DEV Community: Apogee Watcher</title>
      <link>https://dev.to/apogeewatcher</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/apogeewatcher"/>
    <language>en</language>
    <item>
      <title>European tech sovereignty in 2026: a trend map for developers and agencies</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Fri, 14 Aug 2026 17:00:35 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/european-tech-sovereignty-in-2026-a-trend-map-for-developers-and-agencies-4g5k</link>
      <guid>https://dev.to/apogeewatcher/european-tech-sovereignty-in-2026-a-trend-map-for-developers-and-agencies-4g5k</guid>
      <description>&lt;p&gt;European clients used to ask whether you host in Frankfurt. In 2026 they ask whether the model was trained in Europe, which bots may fetch their pricing page, and whether the assistant integration meets a security questionnaire you have never seen before. None of that replaces Core Web Vitals work. It sits beside it. Agencies need a trend map that fits on one whiteboard: compute, data, models, distribution policy, standards, and measurement. Not EU policy advocacy. A practical picture of what changed and what web teams still control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Compute: EuroHPC and the training stack behind institutional models
&lt;/h2&gt;

&lt;p&gt;Sovereignty conversations often start with where GPUs live. The European High Performance Computing Joint Undertaking (EuroHPC) gives public programmes access to machines most companies will not buy outright. DG Translation’s EU Institutional LLM work ran on MeluXina, Leonardo, and MareNostrum 5 while continuing pre-training open Mistral weights on Euramis data. You will not provision MareNostrum for a client blog. You should know why EU buyers mention it: they want proof that strategic AI capacity exists inside the bloc, not only rented API tokens.&lt;/p&gt;

&lt;p&gt;For agencies, the useful thread is procurement language. RFPs may ask where fine-tuning happens, whether inference can stay in EU regions, and which subprocessors touch client text. Your answer is usually layered: CMS and site hosting in EU, analytics configured with residency options, third-party AI features documented with data-flow diagrams. Apogee Watcher monitoring runs on a separate track from model training: scheduled PageSpeed tests do not care which continent trained a summariser, but they do prove each locale’s URLs remain fast enough for crawlers you still want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data and models: Language Data Space and multilingual LLMs
&lt;/h2&gt;

&lt;p&gt;Training data is the second pillar. Common Crawl skews toward English and high-volume languages; DG Translation cites Latvian at about 0.09% of that corpus. The EU Institutional LLM programme responds with institutional text, human-reviewed benchmarks like EU MMLU, and model weights distributed to EU-based legal entities via the European Language Data Space. We unpacked the multilingual angle in &lt;a href="https://apogeewatcher.hashnode.dev/eu-institutional-llm-multilingual-digital-language-extinction?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-eu-tech-sovereignty-trend-map" rel="noopener noreferrer"&gt;When Latvian is 0.09% of Common Crawl&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Agencies should separate three client questions: (1) Can we host data in the EU? (2) Can we use a model trained with EU language balance? (3) Are our public pages good enough for any model or bot to quote accurately? The first two are vendor and legal conversations. The third is still HTML, hreflang, performance, and monitoring. Do not let a sovereign model quietly stand in for a broken Slovak checkout URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Distribution policy: Search, Agent, and Training bots
&lt;/h2&gt;

&lt;p&gt;Publishers are no longer choosing only “allow Googlebot.” Cloudflare’s taxonomy splits AI-related crawlers into Search, Agent, and Training categories, with different defaults and fees on some plans. We wrote how that affects monitoring in &lt;a href="https://apogeewatcher.hashnode.dev/cloudflare-ai-bot-taxonomy-search-agent-training-monitoring?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-eu-tech-sovereignty-trend-map" rel="noopener noreferrer"&gt;Search, Agent, Training: what Cloudflare's AI bot taxonomy means for PageSpeed monitoring&lt;/a&gt;. EU media groups and public broadcasters are part of the same pressure: control who trains on your content, who cites it in answers, and who drives agent traffic.&lt;/p&gt;

&lt;p&gt;Web teams should document bot policy per client: which user-agents are allowed, which are paywalled, and how that interacts with CDN settings. Then verify reality in logs. A policy that blocks training crawlers but leaves Agent fetch unrestricted sends mixed signals. Pair policy with performance so allowed bots get 200 responses within budget, not timeout errors on localised paths.&lt;/p&gt;

&lt;h2&gt;
  
  
  Standards: AIUC-1 and agent accountability
&lt;/h2&gt;

&lt;p&gt;Assistant access introduced a new review lane. &lt;a href="https://aiuc-1.com" rel="noopener noreferrer"&gt;AIUC-1&lt;/a&gt; is a published standard for AI agents across privacy, security, safety, reliability, accountability, and societal risk. It is not a replacement for GDPR or SOC 2, but enterprise buyers will use it as a checklist when your product connects to ChatGPT or Claude. Our read for SaaS teams is in &lt;a href="https://apogeewatcher.hashnode.dev/aiuc-1-ai-agent-standard-saas-assistant-access?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-eu-tech-sovereignty-trend-map" rel="noopener noreferrer"&gt;AIUC-1: what the first AI agent standard means before you ship assistant access&lt;/a&gt;, alongside our MCP pieces on &lt;a href="https://apogeewatcher.hashnode.dev/saas-mcp-secure-ai-assistant-user-data?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-eu-tech-sovereignty-trend-map" rel="noopener noreferrer"&gt;secure assistant access to user data&lt;/a&gt; and &lt;a href="https://apogeewatcher.hashnode.dev/mcp-versus-api-assistant-integration?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-eu-tech-sovereignty-trend-map" rel="noopener noreferrer"&gt;MCP versus API&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;EU clients may combine sovereignty questions (“where does inference run?”) with agent questions (“what can the model delete?”). Answer with roles, scopes, and audit logs, not with model marketing names. A Frankfurt region flag does not answer whether &lt;code&gt;delete_site&lt;/code&gt; is available to a Viewer role through an MCP host.&lt;/p&gt;

&lt;h2&gt;
  
  
  Measurement: AI visibility and performance per locale
&lt;/h2&gt;

&lt;p&gt;Sovereignty without measurement is a slide deck without numbers. Agencies still need to know whether pages are crawled, indexed, and fast in each market. Our Watcher guide &lt;a href="https://apogeewatcher.com/blog/why-ai-crawlers-need-fast-crawlable-pages-and-how-to-stay-ready?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-eu-tech-sovereignty-trend-map" rel="noopener noreferrer"&gt;Why AI crawlers need fast, crawlable pages&lt;/a&gt; ties crawl readiness to performance basics. &lt;a href="https://apogeewatcher.com/blog/ai-search-visibility-agencies-measure-first?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-eu-tech-sovereignty-trend-map" rel="noopener noreferrer"&gt;Are we visible in ChatGPT? What agencies can measure first&lt;/a&gt; adds log and Search Console habits before you trust vendor dashboards.&lt;/p&gt;

&lt;p&gt;EU MMLU and similar benchmarks matter when you evaluate models for internal workflows. They do not replace hreflang QA or per-URL Lighthouse history. Apogee Watcher is built for the second layer: scheduled lab and field-oriented checks across portfolios so a regression on &lt;code&gt;/de/pricing&lt;/code&gt; shows up even when English looks fine.&lt;/p&gt;

&lt;h2&gt;
  
  
  How agencies can use this trend map in client conversations
&lt;/h2&gt;

&lt;p&gt;Use the six blocks as a checklist slide, not a lecture. Each row is a question a client already asks in procurement or QBR; your lane is what the agency can own without pretending to run EuroHPC. Leave blank cells only when you have checked the account and the answer is genuinely out of scope:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Block&lt;/th&gt;
&lt;th&gt;Client question&lt;/th&gt;
&lt;th&gt;Your lane&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Compute&lt;/td&gt;
&lt;td&gt;Where does training or inference run?&lt;/td&gt;
&lt;td&gt;Document vendors; do not fake on-prem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data / models&lt;/td&gt;
&lt;td&gt;Do we have EU languages covered?&lt;/td&gt;
&lt;td&gt;Point to institutional options; keep human review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Distribution&lt;/td&gt;
&lt;td&gt;Who may crawl us?&lt;/td&gt;
&lt;td&gt;CDN bot policy + log verification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standards&lt;/td&gt;
&lt;td&gt;Is your assistant safe?&lt;/td&gt;
&lt;td&gt;Scopes, roles, audit trail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Measurement&lt;/td&gt;
&lt;td&gt;Are we visible and fast?&lt;/td&gt;
&lt;td&gt;Monitoring, crawl checks, CWV budgets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Publishing&lt;/td&gt;
&lt;td&gt;Is content quotable?&lt;/td&gt;
&lt;td&gt;Semantic HTML, hreflang, stable URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Layer new requirements on existing retainers. Performance monitoring, alert policies, and accessibility fixes still fund the retainer. Sovereign AI requests become change orders with explicit scope: data-flow review, locale evals, bot policy updates, not a vague “AI transformation.”&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do on an EU client account this month
&lt;/h2&gt;

&lt;p&gt;Pick one account with multilingual pages and one account asking about AI assistants. For multilingual, export priority URLs per locale and run monitoring on each, not only English. For assistants, list tools and roles before you demo MCP. For both, read CDN bot settings and compare to marketing’s stated AI policy.&lt;/p&gt;

&lt;p&gt;Update the QBR deck with one sentence per block above. If a block is “not applicable,” say so explicitly. Clients prefer an honest N/A to a hand wave. On Monday, draw the six blocks on a whiteboard and mark which owner in your agency holds each (SEO, engineering, legal, account management). No single role covers the full map. Your monitoring stack is how you prove the web layer still works while model and policy decisions move through procurement.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What does European tech sovereignty mean for a web agency in 2026?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is a bundle of buyer questions about where compute runs, which models were trained on EU data, who may crawl public pages, and whether assistant integrations pass security review. Agencies answer with documentation, bot policy, and measurable web performance. You are not expected to operate EuroHPC or draft EU regulation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does EU hosting alone satisfy digital sovereignty requirements?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Usually not. Hosting in Frankfurt or Dublin covers one layer. Buyers also ask about model training geography, subprocessors, crawler policy, and assistant scopes. Treat hosting as necessary context in a layered answer, not the whole story.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does tech sovereignty relate to Core Web Vitals and PageSpeed monitoring?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;They are adjacent, not interchangeable. Sovereignty programmes decide where data and models live. Core Web Vitals and scheduled PageSpeed monitoring prove each locale’s URLs stay fast and crawlable for bots you still allow. A sovereign model does not fix a timeout on &lt;code&gt;/sk/pricing&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where should agencies start if a client mentions the EU Tech Sovereignty package?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use the six-block map in the table above. Pick compute and data for legal/vendor threads, distribution and standards for engineering, measurement and publishing for SEO and delivery. Schedule monitoring per locale before you promise multilingual AI visibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://digital-strategy.ec.europa.eu/en/policies/eu-tech-sovereignty" rel="noopener noreferrer"&gt;Strengthening Europe's Tech Sovereignty&lt;/a&gt; (European Commission)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.eurohpc-ju.europa.eu/ai-factories_en" rel="noopener noreferrer"&gt;AI Factories&lt;/a&gt; (EuroHPC Joint Undertaking)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://translation.ec.europa.eu/language-data-and-ai-using-ai-break-down-language-barriers/eu-institutional-llm-prevent-digital-language-extinction_en" rel="noopener noreferrer"&gt;An EU Institutional LLM to prevent digital language extinction&lt;/a&gt; (DG Translation)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://blog.cloudflare.com/content-independence-day-ai-options/" rel="noopener noreferrer"&gt;Content Independence Day: AI options for publishers&lt;/a&gt; (Cloudflare)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aiuc-1.com" rel="noopener noreferrer"&gt;AIUC-1&lt;/a&gt; (Artificial Intelligence Underwriting Company standard)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apogeewatcher.com/blog/why-ai-crawlers-need-fast-crawlable-pages-and-how-to-stay-ready" rel="noopener noreferrer"&gt;Why AI crawlers need fast, crawlable pages&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apogeewatcher.com/blog/ai-search-visibility-agencies-measure-first" rel="noopener noreferrer"&gt;Are we visible in ChatGPT? What agencies can measure first&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>seo</category>
      <category>agency</category>
    </item>
    <item>
      <title>When Latvian is 0.09% of Common Crawl: what the EU Institutional LLM is for</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Thu, 13 Aug 2026 21:42:03 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/when-latvian-is-009-of-common-crawl-what-the-eu-institutional-llm-is-for-ae6</link>
      <guid>https://dev.to/apogeewatcher/when-latvian-is-009-of-common-crawl-what-the-eu-institutional-llm-is-for-ae6</guid>
      <description>&lt;p&gt;A client site ships in six EU languages. Marketing runs every string through a proprietary LLM for tone checks. Latvian copy comes back fluent and slightly wrong: formal where the brand is plain, and vague on product terms the model rarely saw during training. Nobody lied about multilingual support. The training data did. DG Translation’s &lt;a href="https://translation.ec.europa.eu/language-data-and-ai-using-ai-break-down-language-barriers/eu-institutional-llm-prevent-digital-language-extinction_en" rel="noopener noreferrer"&gt;EU Institutional LLM programme&lt;/a&gt; names the skew plainly: in Common Crawl, Latvian is about 0.09% of the dataset, Irish about 0.07%, Maltese about 0.03%. The least-represented half of EU official languages add up to roughly 2.4%. Global models are not neutral on language; they mirror what was crawled.&lt;/p&gt;

&lt;p&gt;The Commission’s response is institutional, not consumer-facing hype. Engineers are continuing pre-training of European open models (Mistral Mixtral 8x7B and 8x22B) on Euramis, the multilingual corpus from EU institutions, using EuroHPC supercomputers including MeluXina, Leonardo, and MareNostrum 5. The goal is an EU Institutional LLM with better coverage of all 24 official languages, tuned for public-sector use cases, with models available to EU-based legal entities through the European Language Data Space. That is a different bet from “pick the biggest US model and hope fine-tuning fixes Lithuanian.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Common Crawl under-represents EU languages
&lt;/h2&gt;

&lt;p&gt;Common Crawl is convenient because it is huge and open. It is not balanced. Web publishing volume, historical crawl bias, and English as a lingua franca concentrate tokens in a handful of languages. For low-resource EU languages, the model’s prior is thin even when your site is impeccable. Fine prompts help at the margin. They do not replace missing institutional vocabulary in legal, procurement, and public-health contexts.&lt;/p&gt;

&lt;p&gt;DG Translation also calls out quality, copyright safety, transparency, and bias as reasons proprietary crawls are risky for public administrations. Agencies serving EU clients hit the same wall on a smaller scale: you can localise UI strings and hreflang tags correctly and still lose nuance in generated summaries, chat widgets, and internal knowledge tools trained on English-heavy corpora. The failure mode is quiet; the page looks translated, but procurement language, liability clauses, and product names drift toward English defaults the model saw more often.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Euramis and EuroHPC change in the training story
&lt;/h2&gt;

&lt;p&gt;Euramis is not a marketing blog scrape. It is a large, curated multilingual archive of EU institutional text, aligned with quality standards and, per the Commission, free of copyright infringements in the training pipeline described publicly. EuroHPC supplies compute at a scale most teams will never run themselves. The published results are directional but striking: on an EU institutional benchmark, the adapted model beat its Mistral base across tested languages, with Irish nearly quadrupling its score, Estonian up almost 80%, Greek nearly doubling, and Latvian and Lithuanian gaining on the order of 70–75%.&lt;/p&gt;

&lt;p&gt;That does not mean your WordPress plugin should download v1 tomorrow and replace human reviewers. It does mean European public-sector and NGO buyers now have a documented path to models trained with EU language balance as a stated requirement, not an afterthought. The instruct-tuned variant is meant for administration workflows; eSummary already runs on the model for multilingual summarisation inside the Commission’s tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  EU MMLU and why English-only benchmarks mislead
&lt;/h2&gt;

&lt;p&gt;Building the model is half the problem. Measuring it fairly is the other. Most multilingual benchmarks rely heavily on machine translation of English exams. DG Translation released &lt;a href="https://translation.ec.europa.eu/language-data-and-ai-using-ai-break-down-language-barriers/eu-institutional-llm-prevent-digital-language-extinction_en" rel="noopener noreferrer"&gt;EU MMLU&lt;/a&gt;, adapted from MMLU with human translation and revision through the European Master’s in Translation network, covering subjects from law and economics to public affairs. Sixteen languages are available now, with more planned toward full EU coverage.&lt;/p&gt;

&lt;p&gt;For web teams, the lesson is operational: if you evaluate a model on English-only QA sets, you will ship confident dashboards and embarrassed Latvian FAQs. When you compare vendors or open weights for a multilingual client, ask which benchmark languages match the client’s markets, not which leaderboard screenshot looked best on Twitter. If EU MMLU (or an equivalent human-translated set) does not cover those markets yet, treat vendor “multilingual” claims as provisional until you spot-check real pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  What agencies should do with multilingual sites while models catch up
&lt;/h2&gt;

&lt;p&gt;Institutional LLMs complement, not replace, your publishing stack. You still need correct hreflang, stable URLs, crawlable HTML, and performance that keeps bots willing to fetch every locale. AI Overviews and other answer engines already change how clicks arrive; low-quality localised pages lose twice. Our Watcher guide on &lt;a href="https://apogeewatcher.com/blog/ai-overviews-are-killing-clicks-what-the-data-shows-and-how-to-respond?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-eu-institutional-llm" rel="noopener noreferrer"&gt;AI Overviews and CTR&lt;/a&gt; covers the traffic side. Pair that with locale-level monitoring: a fast English homepage does not excuse a Slovak product page that times out.&lt;/p&gt;

&lt;p&gt;For AI visibility measurement across markets, start with crawl and index signals per language rather than one aggregate score. &lt;a href="https://apogeewatcher.com/blog/ai-search-visibility-agencies-measure-first?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-eu-institutional-llm" rel="noopener noreferrer"&gt;Are we visible in ChatGPT? What agencies can measure first&lt;/a&gt; outlines logs, Search Console slices, and performance checks you can run before you trust a vendor’s “multilingual AI” badge. A single portfolio average hides a slow &lt;code&gt;/lv/&lt;/code&gt; product page behind a healthy English homepage.&lt;/p&gt;

&lt;p&gt;Apogee Watcher schedules PageSpeed tests per URL. Treat each locale’s priority templates as scheduled URLs in their own right, not as alternate links you check once after launch. Institutional models may improve summarisation and translation assist inside EU workflows; they do not fix broken hreflang or missing &lt;code&gt;lang&lt;/code&gt; attributes on the open web.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the EU Institutional LLM fits a wider sovereignty map
&lt;/h2&gt;

&lt;p&gt;Compute on EuroHPC, weights in the Language Data Space, benchmarks like EU MMLU, and production tools like eSummary are pieces of the same story: Europe building AI capacity that matches its linguistic reality. We map the wider trend lines for developers and agencies in &lt;a href="https://apogeewatcher.hashnode.dev/eu-tech-sovereignty-trend-map-2026?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-eu-institutional-llm" rel="noopener noreferrer"&gt;European tech sovereignty in 2026&lt;/a&gt; (Hashnode #33). Read that companion when you need a single slide for a client QBR; read this one when they ask why their Baltic microsite still sounds generic in ChatGPT.&lt;/p&gt;

&lt;p&gt;Layer, do not rip and replace: keep your CMS, your analytics, and your monitoring. Add sovereign models where procurement requires EU-hosted options. Keep human reviewers on anything customer-facing until EU MMLU scores exist for your client’s languages and you have spot-checked real pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to check on a multilingual client site this week
&lt;/h2&gt;

&lt;p&gt;List priority URLs per locale (home, pricing, contact, top three articles). For each, verify &lt;code&gt;lang&lt;/code&gt;, hreflang reciprocals, and a manual read of the H1 (not machine-translated title tags alone). Run PageSpeed or scheduled monitoring per URL, not only on &lt;code&gt;/en/&lt;/code&gt;. If the client uses AI assist for copy, log which model and which training claims the vendor makes; ask for per-language evals, not a single English MMLU screenshot.&lt;/p&gt;

&lt;p&gt;When DG Translation publishes updated model weights, check whether your client’s sector can access them under Language Data Space rules. Public sites still live on the open web; institutional models do not remove the need for crawlable, fast, well-structured HTML. Keep the publishing checklist even if the summariser improves: bots and answer engines still fetch what you ship.&lt;/p&gt;

&lt;p&gt;On Monday, pick one low-resource EU locale the client cares about and compare a human-edited paragraph with the same paragraph passed through their default LLM. The gap you see is the digital language skew problem in miniature. The EU Institutional LLM is one institutional answer. Your monitoring and publishing discipline is the part agencies still own.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>AIUC-1: what the first AI agent standard means before you ship assistant access</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Wed, 12 Aug 2026 11:20:28 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/aiuc-1-what-the-first-ai-agent-standard-means-before-you-ship-assistant-access-59aa</link>
      <guid>https://dev.to/apogeewatcher/aiuc-1-what-the-first-ai-agent-standard-means-before-you-ship-assistant-access-59aa</guid>
      <description>&lt;p&gt;The demo works. ChatGPT lists three tools, calls one, and returns a tidy summary from your staging tenant. The product manager asks when it ships. Engineering asks what happens when the model calls &lt;code&gt;delete_site&lt;/code&gt; on the wrong organisation. Legal asks where prompts, tool arguments, and responses are logged. Nobody has a shared checklist yet. That gap is why &lt;a href="https://aiuc-1.com" rel="noopener noreferrer"&gt;AIUC-1&lt;/a&gt; matters even if you never pursue formal certification. The Artificial Intelligence Underwriting Company published a readable standard for AI agents across six domains: data and privacy, security, safety, reliability, accountability, and societal risk. Contributors include Stanford, MIT, MITRE, the Cloud Security Alliance, and Google Cloud. For SaaS teams sketching MCP servers or OAuth connections to ChatGPT and Claude, AIUC-1 is a useful pre-flight read, not a substitute for your own threat model.&lt;/p&gt;

&lt;p&gt;We wrote the companion pieces on &lt;a href="https://apogeewatcher.hashnode.dev/saas-mcp-secure-ai-assistant-user-data?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-aiuc-1-ai-agent-standard" rel="noopener noreferrer"&gt;MCP for SaaS and secure assistant access&lt;/a&gt; and &lt;a href="https://apogeewatcher.hashnode.dev/mcp-versus-api-assistant-integration?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-aiuc-1-ai-agent-standard" rel="noopener noreferrer"&gt;MCP versus REST APIs&lt;/a&gt; from the integration side: scopes, tenant isolation, tool catalogues, and when HTTP should stay the automation path. AIUC-1 sits one layer above implementation detail. It asks whether your agent design is insurable in principle: can you explain who may act, on whose data, with what logging, and what happens when the model misfires?&lt;/p&gt;

&lt;h2&gt;
  
  
  What AIUC-1 covers that generic AI policies skip
&lt;/h2&gt;

&lt;p&gt;Most internal “responsible AI” slides stop at model choice and prompt hygiene. AIUC-1 is agent-shaped. It assumes software can take actions on behalf of a user, call external systems, retain context across turns, and fail in ways that look like product bugs but behave like security incidents. The six domains are deliberately operational:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data and privacy:&lt;/strong&gt; what the agent may read, store, and replay; retention; user consent; cross-tenant boundaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security:&lt;/strong&gt; authentication to your product, authorisation per tool, secret handling, supply-chain risk in tool implementations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety:&lt;/strong&gt; harmful or disallowed outputs and actions, especially when write tools exist.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability:&lt;/strong&gt; uptime, timeouts, idempotency, and graceful degradation when the host or model is unavailable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accountability:&lt;/strong&gt; audit trails, human override, incident response, and clear ownership when an automated action causes damage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Societal risk:&lt;/strong&gt; broader harms that may be rare for a B2B monitoring tool but still belong in enterprise procurement questionnaires.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that replaces your SOC 2 narrative or GDPR records of processing. It gives procurement and security reviewers a shared vocabulary when the sales deck says “we added AI.”&lt;/p&gt;

&lt;h2&gt;
  
  
  How AIUC-1 maps to MCP and assistant access planning
&lt;/h2&gt;

&lt;p&gt;Model Context Protocol does not magically solve accountability. It standardises how a host discovers tools, passes arguments, and returns results. Your MCP server still decides which tools exist, which OAuth scopes unlock them, and whether a given user may invoke a write path. AIUC-1’s privacy and security sections read like an expanded version of the questions we already ask internally before any assistant demo: default read-only tools, explicit confirmation for destructive actions, per-organisation revocation, and logs that tie a tool call back to a human account.&lt;/p&gt;

&lt;p&gt;Reliability is the domain engineers underestimate. Assistants are multi-turn and slow compared with REST. A tool that works in a happy-path demo may time out in production when the portfolio has four hundred URLs. Account for partial failures: if &lt;code&gt;list_sites&lt;/code&gt; succeeds but &lt;code&gt;fetch_latest_run&lt;/code&gt; fails mid-batch, the user should see which items completed, not a hallucinated table. Accountability means you can answer, next Monday, which assistant session triggered a budget change, not only which human logged into the admin panel.&lt;/p&gt;

&lt;p&gt;Safety for a PageSpeed monitoring product is narrower than for a general agent platform, but it is not zero. A mis-scoped tool that exports another tenant’s URLs is a safety and privacy incident even if nobody got phished. Societal risk may be a short section in your internal memo (“we do not offer open-ended web browsing; tools are read-biased and tenant-scoped”). Still write it down. Reviewers notice when the box is empty.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which AIUC-1 questions belong in your access-control design
&lt;/h2&gt;

&lt;p&gt;Team permissions inside your product are the floor under any assistant layer. If your admin panel already distinguishes Admin, Manager, and Viewer roles per organisation, assistant tools should respect the same boundaries, not invent a parallel permission model that drifts over time. Our Watcher guide on &lt;a href="https://apogeewatcher.com/blog/product-spotlight-team-roles-and-access-control?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-aiuc-1-ai-agent-standard" rel="noopener noreferrer"&gt;team roles and access control&lt;/a&gt; walks through who may change sites, budgets, and invites versus who may only read dashboards. Map each proposed MCP tool to those roles before you name it in a host catalogue.&lt;/p&gt;

&lt;p&gt;A practical worksheet for a first assistant release:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List every tool the host may call. Mark each read or write.&lt;/li&gt;
&lt;li&gt;For each tool, name the role gate (Admin only, Manager+, any member).&lt;/li&gt;
&lt;li&gt;Define retention for prompts, arguments, responses, and errors.&lt;/li&gt;
&lt;li&gt;Specify revocation: what happens when a user disconnects the host or an admin suspends their account.&lt;/li&gt;
&lt;li&gt;Run one failure drill: wrong tenant ID, expired token, model timeout.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;AIUC-1 is not a pass/fail badge for that worksheet. It is a structured reminder that insurers and enterprise buyers will ask these questions anyway.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AIUC-1 does not tell you about AI search visibility
&lt;/h2&gt;

&lt;p&gt;Standards for agents and standards for being cited in ChatGPT are related but not identical. AIUC-1 helps you ship assistant access without obvious negligence. It does not measure whether your marketing pages are crawlable, fast enough for bot budgets, or structured so summarisers quote the right section. Agencies asking “are we visible in ChatGPT?” still need crawl logs, Search Console checks, and performance baselines. See &lt;a href="https://apogeewatcher.com/blog/ai-search-visibility-agencies-measure-first?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-aiuc-1-ai-agent-standard" rel="noopener noreferrer"&gt;Are we visible in ChatGPT? What agencies can measure first&lt;/a&gt; for that measurement lane. Layer the two programmes: responsible agent access for customers who connect your product to a host, and crawl-friendly publishing for prospects who have not signed up yet.&lt;/p&gt;

&lt;p&gt;Apogee Watcher is not AIUC-1 certified. None of the above is legal or insurance advice. We use the standard as a reading list while MCP integration remains in planning and early development. If your roadmap includes assistant tools this quarter, read AIUC-1 alongside your OAuth design and keep HTTP automation on the paths that already work.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use AIUC-1 in a sprint review without boiling the ocean
&lt;/h2&gt;

&lt;p&gt;Do not assign “comply with AIUC-1” as a single ticket. Pick one domain per sprint while assistant access is still experimental. Sprint one: privacy and security (scopes, tenant isolation, secrets). Sprint two: reliability and accountability (timeouts, audit logs, admin kill switch). Sprint three: safety review on any write tool you still want. Societal risk gets a one-page memo for leadership unless your buyers are public sector.&lt;/p&gt;

&lt;p&gt;Bring legal and security into the MCP demo earlier than feels comfortable. Show them the tool list, not the magic prompt. When someone asks for a ship date, answer with the worksheet above, not with a model name. The standard is public on &lt;a href="https://aiuc-1.com" rel="noopener noreferrer"&gt;aiuc-1.com&lt;/a&gt;; your implementation notes should be public inside the company at minimum.&lt;/p&gt;

&lt;p&gt;On Monday, open the AIUC-1 table of contents next to your draft tool catalogue. Highlight every row where your answer is still “TBD.” Those rows are your real blockers, not the logo on the ChatGPT connector screen.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>programming</category>
      <category>backend</category>
    </item>
    <item>
      <title>Give agents tools, not a scraped DOM: WebMCP on the page</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Tue, 11 Aug 2026 17:20:34 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/give-agents-tools-not-a-scraped-dom-webmcp-on-the-page-3b6</link>
      <guid>https://dev.to/apogeewatcher/give-agents-tools-not-a-scraped-dom-webmcp-on-the-page-3b6</guid>
      <description>&lt;p&gt;If you have watched an assistant try to book a slot, fill a form, or click through a checkout by guessing which button is which, you already know the failure mode. The agent scrapes the DOM, walks the accessibility tree, or reads a screenshot. It is brittle, slow, easy to break with a redesign, and open to prompt injection when untrusted page text is treated as instruction. Sarah Drasner's &lt;a href="https://webmcp-demo-sdras.netlify.app/" rel="noopener noreferrer"&gt;WebMCP demo&lt;/a&gt; states the alternative directly: give agents tools, not a scraped DOM.&lt;/p&gt;

&lt;p&gt;WebMCP is a browser-side proposal (a W3C Web Machine Learning Community Group draft) that lets a page register structured tools an agent can call directly. The shape looks familiar if you have seen server-side Model Context Protocol tools: a name, a description, a JSON Schema for inputs, and an execute path. The difference is where it runs. The contract lives on the page, in the user's origin and session, through &lt;code&gt;document.modelContext.registerTool&lt;/code&gt;, rather than on a remote MCP server you connect to ChatGPT or Claude. That distinction matters for product teams. Our companion pieces on &lt;a href="https://apogeewatcher.hashnode.dev/saas-mcp-secure-ai-assistant-user-data?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-webmcp-tools-not-dom" rel="noopener noreferrer"&gt;server MCP for SaaS&lt;/a&gt; and &lt;a href="https://apogeewatcher.hashnode.dev/mcp-versus-api-assistant-integration?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-webmcp-tools-not-dom" rel="noopener noreferrer"&gt;MCP versus REST APIs&lt;/a&gt; cover the backend and assistant-integration side; the sections below cover the page-level contract, and how it overlaps with Core Web Vitals and lab monitoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  What WebMCP tools replace when agents stop scraping the DOM
&lt;/h2&gt;

&lt;p&gt;Scraping asks the agent to reverse-engineer your UI. WebMCP asks your site to declare what it can do. In the imperative path, JavaScript registers tools such as &lt;code&gt;getAvailability&lt;/code&gt; or &lt;code&gt;bookSlot&lt;/code&gt; with a schema and an execute function. In the declarative path, a form can expose the same capability with attributes like &lt;code&gt;toolname&lt;/code&gt; and &lt;code&gt;toolparamdescription&lt;/code&gt;, so a booking flow becomes a tool without a separate registration script. The browser (or a WebMCP-aware extension today) collects those tools and presents them to the user's agent with origin scope and permission still in the loop.&lt;/p&gt;

&lt;p&gt;Structured arguments replace "find the date field, then the submit button, then hope the layout did not shift." The agent supplies &lt;code&gt;date&lt;/code&gt;, &lt;code&gt;time&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, and &lt;code&gt;email&lt;/code&gt; against a contract; your code books the slot. You spend fewer tokens, see fewer wrong clicks, and keep a clearer security boundary than treating the entire DOM as readable instruction text. The proposal is still early (Chrome has run origin-trial style support; API names have already moved once from &lt;code&gt;navigator.modelContext&lt;/code&gt; toward &lt;code&gt;document.modelContext&lt;/code&gt;), so treat production adoption as deliberate research, not a mandate to rewrite every form this quarter.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why CLS still matters for agentic browsing with WebMCP
&lt;/h2&gt;

&lt;p&gt;Even when tools exist, agents that fall back to UI targeting still care about geometry. Lighthouse's experimental Agentic Browsing work already calls out Cumulative Layout Shift for that reason: if ads, late images, or injected banners move the layout between "identify the control" and "activate it," the action fails. WebMCP reduces how often agents need coordinate guessing for declared actions, but it does not remove CLS as a product risk. Humans still see the page, fallback paths and incomplete tool coverage still scrape, and late layout shifts still break trust in both cases.&lt;/p&gt;

&lt;p&gt;Ship clearer tool contracts where assistants should act. Keep treating CLS budgets as stability requirements for humans and for any automation that still uses the visual tree. Do not assume a green WebMCP registration list means you can ignore field CLS on conversion URLs. In our experience, teams that only demo tool registration and skip layout stability rediscover the scrape path the first time a marketing banner ships late.&lt;/p&gt;

&lt;h2&gt;
  
  
  Page WebMCP versus server MCP versus a single Lighthouse Agentic Browsing run
&lt;/h2&gt;

&lt;p&gt;Server MCP (the assistant integration pattern) is about giving ChatGPT, Claude, or similar secure, scoped access to your product data and actions over a protocol your backend owns. Page WebMCP is about declaring what this document can do while the user is on it. Confusing the two leads to the wrong roadmap: you either spend sprint time on page tools when the assistant needed an authenticated API, or you skip page contracts and leave agents scraping booking widgets indefinitely.&lt;/p&gt;

&lt;p&gt;Lab audits are a third concern. Chrome's Lighthouse Agentic Browsing category can observe WebMCP registration and related readiness checks, with fractional pass ratios rather than a familiar 0–100 Performance blend. That is useful hygiene. It is not the same as continuous PageSpeed monitoring for regressions clients feel. We unpacked scoring, audits, and what to prioritise in &lt;a href="https://apogeewatcher.com/blog/lighthouse-agentic-browsing-scoring?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-webmcp-tools-not-dom" rel="noopener noreferrer"&gt;Lighthouse Agentic Browsing: how to rank in chatbots&lt;/a&gt; on the Watcher blog. Use that guide for the audit list and scoring model; use the split above when you decide whether to expose tools on the page at all.&lt;/p&gt;

&lt;p&gt;Spot Lighthouse runs still suffer the same schedule problem as any manual PageSpeed check. A green Agentic Browsing pass on Tuesday does not prove the registration timing, CLS trend, or tool schema still hold on Thursday after a marketing tag ships. For why scheduled monitoring beats occasional lab screenshots once the novelty fades, see &lt;a href="https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-webmcp-tools-not-dom" rel="noopener noreferrer"&gt;PageSpeed Insights versus automated monitoring&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How agencies can prepare client sites for WebMCP before it is everywhere
&lt;/h2&gt;

&lt;p&gt;You do not need every browser shipping WebMCP tomorrow to prepare. Start with the flows assistants are most likely to break: booking, account lookup, simple commerce actions, and support triage forms. For each flow, write the tool contract on paper first: name, description, required fields, read-only versus state-changing. That exercise alone exposes forms that only make sense to a human who can see the surrounding copy.&lt;/p&gt;

&lt;p&gt;Where you can experiment (Canary, extension, or feature-detected &lt;code&gt;document.modelContext&lt;/code&gt;), register a read-only discovery tool and one write tool behind clear confirmation. Prefer feature detection so unsupported browsers stay quiet. Keep schemas strict; vague free-text fields recreate scraping ambiguity inside JSON. Pair the experiment with the CLS and accessibility work you already bill for: semantic labels and stable layout help humans, assistive technology, and any agent that still walks the tree when tools are missing.&lt;/p&gt;

&lt;p&gt;Apogee Watcher stays on the monitoring side of the webperf work. We schedule lab and field-oriented PageSpeed checks across client portfolios so regressions show up before the next demo. WebMCP and Agentic Browsing audits are inputs you may add to that programme as browser support spreads. They do not replace budgets on LCP, INP, and CLS, and they do not replace a clear explanation to the client about what you are measuring.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to test WebMCP on one client URL without dropping CLS monitoring
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://webmcp-demo-sdras.netlify.app/" rel="noopener noreferrer"&gt;WebMCP demo&lt;/a&gt; once with a WebMCP-aware inspector: count the tools, call one, break a schema on purpose, and compare that path with clicking through the booking UI. Then pick one client conversion URL and decide whether the next sprint should expose a tool, fix CLS that would break a fallback scrape, or both. Keep lab Agentic Browsing checks labelled experimental in client reports until standards settle. Keep continuous monitoring on the Core Web Vitals that already predict user pain.&lt;/p&gt;

&lt;p&gt;For audit-level detail on Lighthouse Agentic Browsing, start with our &lt;a href="https://apogeewatcher.com/blog/lighthouse-agentic-browsing-scoring?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-webmcp-tools-not-dom" rel="noopener noreferrer"&gt;Watcher guide on agentic browsing scoring&lt;/a&gt;. If your team still relies on occasional PageSpeed Insights pastes, read &lt;a href="https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-webmcp-tools-not-dom" rel="noopener noreferrer"&gt;when manual checks are not enough&lt;/a&gt; and put schedules and budgets around the URLs that matter. Layer the two: use Watcher for continuous PageSpeed history, and treat WebMCP plus Agentic Browsing audits as optional lab hygiene until browser support is ordinary.&lt;/p&gt;

</description>
      <category>webperf</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>ai</category>
    </item>
    <item>
      <title>How agencies sell Core Web Vitals monitoring to procurement</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Mon, 10 Aug 2026 14:09:40 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/how-agencies-sell-core-web-vitals-monitoring-to-procurement-4pe</link>
      <guid>https://dev.to/apogeewatcher/how-agencies-sell-core-web-vitals-monitoring-to-procurement-4pe</guid>
      <description>&lt;p&gt;A performance retainer died in procurement last month because the SOW said "improve LCP and INP." The buyer asked what line of the P&amp;amp;L that touched, and the answers split: engineering had charts, marketing had Search Console exports. The work was sound, but the label was wrong, and nobody had one sentence finance could paste into the business case spreadsheet. Latency is a line item, and procurement rarely approves a budget row written in metric acronyms. What follows is how we translate web performance into budget language agencies can defend: the words procurement recognises, the metrics we still measure underneath, and where monitoring earns a recurring row instead of a one-off project fee.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why procurement rarely budgets for latency or Core Web Vitals
&lt;/h2&gt;

&lt;p&gt;CFO-facing decks talk about revenue at risk, cost of acquisition, infrastructure efficiency, and compliance exposure. Milliseconds appear, if at all, in an appendix engineers nod through. That is not ignorance. Finance models stable categories, so "site speed" reads like a marketing preference unless you tie it to the row procurement already owns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Conversion and basket size&lt;/strong&gt; when sessions stall at checkout or signup.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paid media efficiency&lt;/strong&gt; when slow landers burn clicks that never become productive visits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support load&lt;/strong&gt; when broken flows generate tickets that could have been prevented.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO competitiveness&lt;/strong&gt; when rankings cluster around similar content quality.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of those is already a category somebody budgets for. The win is making performance work fundable by stating which category moves when LCP or INP drifts, and by showing the thresholds and URL sets that back the claim. For the data-backed revenue story, our Watcher write-up on &lt;a href="https://apogeewatcher.com/blog/real-cost-poor-web-performance-data-driven-analysis?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-agencies-sell-cwv-monitoring-procurement" rel="noopener noreferrer"&gt;the real cost of poor web performance&lt;/a&gt; collects the evidence in one place. On Hashnode we keep the same procurement conversation, but we name the line item first and show the instrumentation underneath.&lt;/p&gt;

&lt;h2&gt;
  
  
  What procurement asks for instead of Core Web Vitals
&lt;/h2&gt;

&lt;p&gt;RFP language we see repeatedly maps to performance, even when the word webperf never appears. Procurement might say "reduce checkout friction" or "protect organic traffic," but the evaluation path still points at LCP, INP, and CLS where the funnel breaks. Below we translate those phrases into what we measure, so engineering keeps precision and procurement keeps ownership. This table is the shared glossary for both teams.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Procurement phrase&lt;/th&gt;
&lt;th&gt;What they are really buying&lt;/th&gt;
&lt;th&gt;What we measure&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;"Reduce checkout friction"&lt;/td&gt;
&lt;td&gt;Fewer abandoned sessions at payment&lt;/td&gt;
&lt;td&gt;INP, CLS on checkout templates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Improve mobile experience"&lt;/td&gt;
&lt;td&gt;Lower bounce on paid and organic mobile landers&lt;/td&gt;
&lt;td&gt;LCP, INP by device class&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"De-risk the replatform"&lt;/td&gt;
&lt;td&gt;Confidence that releases do not silently regress key URLs&lt;/td&gt;
&lt;td&gt;Budgets + alerts on template sets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;"Protect organic traffic"&lt;/td&gt;
&lt;td&gt;Defence when competitors match content quality&lt;/td&gt;
&lt;td&gt;CWV field trends + Search Console&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The trick is not to hide Core Web Vitals. It is to show them as the instrumentation behind the phrase procurement already approved. When we use one line in the budget meeting, the dashboard still charts LCP, INP, and CLS so nobody has to reinvent a glossary for every renewal. When a client asks whether speed affects rankings, we send the SEO evidence separately and keep the meeting line focused.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apogeewatcher.com/blog/how-core-web-vitals-impact-seo-rankings-what-the-data-shows?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-agencies-sell-cwv-monitoring-procurement" rel="noopener noreferrer"&gt;How Core Web Vitals impact SEO rankings&lt;/a&gt; explains what Google has actually said and where CWV act as a tiebreaker rather than a magic lever. In practice we use one line: protecting organic visibility in competitive SERPs where content parity is high. The monitoring dashboard continues to chart LCP, INP, and CLS, with Search Console acting as supporting evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to translate LCP and INP into a fundable budget line
&lt;/h2&gt;

&lt;p&gt;We use a three-part structure in SOWs and renewal decks, because procurement needs a naming layer and engineering needs measurable thresholds. It keeps the meeting language stable while the technical appendix stays precise. Use this structure when you translate performance work into a fundable operating expense.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Name the business outcome, not the metric.&lt;/strong&gt;&lt;br&gt;
"Checkout responsiveness on mobile" beats "INP remediation". "Hero load stability on pricing" beats "LCP task force". The metric appears in the appendix that engineering signs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Attach a threshold and a consequence.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Finance understands guardrails. Example: if mobile checkout INP exceeds the agreed budget for two consecutive weekly field periods, the agency escalates to a named owner within one business day. That is operational risk management, which procurement already funds in other domains.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Price monitoring as insurance, not as lab runs.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A quarterly PageSpeed audit is a project. Continuous monitoring on the URLs that carry revenue or leads is an operating expense, closer to uptime checks than to a redesign. Multi-tenant tooling matters here because agencies need one queue across client sites, not a separate spreadsheet per brand.&lt;/p&gt;

&lt;p&gt;None of this requires inventing ROI multiples in the room. It requires consistency: the same URLs, the same thresholds, the same alert path month after month so drift is visible before it becomes a QBR surprise. The work stops feeling like a debate and starts behaving like operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to pitch web performance to SEO and revenue teams in one budget
&lt;/h2&gt;

&lt;p&gt;Procurement often splits "SEO" and "conversion" into different cost centres, even when the user journey mixes both. Performance work sits between them because speed affects how quickly pages become usable for first-time visitors and how reliably search sends qualified traffic. The job is to choose naming that matches the cost centre in the room, while keeping the measurable instrumentation consistent across renewals.&lt;/p&gt;

&lt;p&gt;Use SEO when the client competes on crowded head terms and content quality is table stakes. CWV become the tiebreaker story: when two pages are otherwise comparable, the faster experience wins more often. Use revenue language when paid or direct traffic dominates and the first screen must earn the next click.&lt;/p&gt;

&lt;p&gt;In practice we put both on one slide with two columns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Organic risk:&lt;/strong&gt; share of revenue from search × competitive SERP density × CWV pass rate on money templates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conversion risk:&lt;/strong&gt; session volume on key landers × observed drop-off when lab or field signals cross budget.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You do not need perfect attribution to justify monitoring. You need a plausible range and a plan to narrow it with your own analytics once baselines exist. In our experience, finance teams accept monitoring as insurance when the URL set is explicit and the reporting cadence is predictable.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to include in a web performance monitoring budget line
&lt;/h2&gt;

&lt;p&gt;When latency finally gets a line item, we scope it like any other managed service:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;URL set:&lt;/strong&gt; homepage, top landers, checkout or signup, and any template that changed last sprint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence:&lt;/strong&gt; field-aligned checks often enough to catch regressions before the monthly report.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ownership:&lt;/strong&gt; who receives alerts, who acknowledges, who files the ticket.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evidence:&lt;/strong&gt; exports the client can forward to finance without re-explaining the metric glossary.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last point is why we still publish deep dives on the Watcher blog and keep Hashnode posts opinionated. Procurement approves the category, engineers need the how-to elsewhere, and the monitoring dashboard provides the shared proof during renewals. The result is less debate and more signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next step: rename the work until procurement recognises the line item
&lt;/h2&gt;

&lt;p&gt;If your performance pitch stalls in procurement, rename the work until it matches a row finance already understands. Latency is real cost, SEO defence, and conversion insurance. Core Web Vitals are how you prove the policy is working.&lt;/p&gt;

&lt;p&gt;Start with one template set, one threshold, and one alert path so you can baseline quickly. Expand the URL list after the first month proves the line item was not vanity spend and the alert path behaves predictably. Keep ownership and evidence consistent so renewals stay boring in the best possible way.&lt;/p&gt;

&lt;p&gt;When you need the full data picture behind the business case, read &lt;a href="https://apogeewatcher.com/blog/real-cost-poor-web-performance-data-driven-analysis?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-agencies-sell-cwv-monitoring-procurement" rel="noopener noreferrer"&gt;the real cost of poor web performance&lt;/a&gt;. When the room pivots to rankings, use &lt;a href="https://apogeewatcher.com/blog/how-core-web-vitals-impact-seo-rankings-what-the-data-shows?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-agencies-sell-cwv-monitoring-procurement" rel="noopener noreferrer"&gt;how CWV impact SEO&lt;/a&gt; for the evidence-led answer. Then put monitoring on the URLs where those arguments actually matter.&lt;/p&gt;

</description>
      <category>webperf</category>
      <category>corewebvitals</category>
      <category>agency</category>
      <category>seo</category>
    </item>
    <item>
      <title>We built MailOps for our own Modoboa servers. Now it is a product</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Sun, 09 Aug 2026 15:03:57 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/we-built-mailops-for-our-own-modoboa-servers-now-it-is-a-product-1ld1</link>
      <guid>https://dev.to/apogeewatcher/we-built-mailops-for-our-own-modoboa-servers-now-it-is-a-product-1ld1</guid>
      <description>&lt;p&gt;The bounce arrived on a Friday. The Modoboa message log showed &lt;code&gt;rejected&lt;/code&gt;, the recipient's provider mentioned DMARC, and three of us were still correlating DNS records in a browser tab, Postfix logs on the server, and a domain-level SPF check that said everything looked fine.&lt;/p&gt;

&lt;p&gt;That was not a Modoboa failure. Modoboa is a solid mail administration stack for self-hosted email. The gap was operational: host health, mailbox estate, and delivery diagnostics lived outside the admin screens we opened every day. We built &lt;a href="https://apogee.lu/mailops.html" rel="noopener noreferrer"&gt;Apogee MailOps for Modoboa&lt;/a&gt; to close that gap for our own servers first. Then we offered it as a product because the same Friday pattern kept repeating for other Modoboa operators.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Apogee runs self-hosted Modoboa mail
&lt;/h2&gt;

&lt;p&gt;We host company mail on Modoboa because we want domains, accounts, quotas, and message history under our control without renting a mailbox product that treats deliverability as a black box. Modoboa gives us Postfix, Dovecot, Rspamd, and a web administration layer that non-mail specialists can use for everyday account work. That choice trades convenience for responsibility: when delivery fails, nobody files a ticket with a SaaS vendor. Someone on our team reads SMTP responses, checks authentication records, and decides whether the problem is DNS, reputation, mailbox state, or capacity on the host.&lt;/p&gt;

&lt;p&gt;Self-hosted mail server management is workable when administration and operations share one environment. It is painful when every diagnostic step starts in a different tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which Modoboa administration tasks still needed SSH, logs, and DNS tabs
&lt;/h2&gt;

&lt;p&gt;Modoboa already covers domains and accounts, quota controls, traffic statistics, audit trails, a message log, DNS authentication checks at domain level, and IMAP migration workflows. For day-to-day mail hosting those features are enough to run a server.&lt;/p&gt;

&lt;p&gt;What it does not consolidate is the administrator question set we repeat under pressure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the host out of CPU, disk, or RAM, or is Postfix the process starving?&lt;/li&gt;
&lt;li&gt;Which mailboxes still hold gigabytes of mail but have not been opened in months?&lt;/li&gt;
&lt;li&gt;Does this specific failed message fail SPF, DKIM, or DMARC for the sending IP and selector that actually sent it?&lt;/li&gt;
&lt;li&gt;Did migration finish for the accounts we thought we moved last quarter?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vanilla Modoboa can answer pieces of those questions if you open the right module, SSH into the server, or export logs. Under incident time that becomes a scavenger hunt. SPF, DKIM, and DMARC troubleshooting for email delivery is especially brittle at domain-level checks alone: a record can look valid in DNS while the outbound path uses a different IP or a stale DKIM selector.&lt;/p&gt;

&lt;p&gt;We were not looking for a second mail panel. We wanted operational intelligence inside the Modoboa administration environment we already trusted.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we built the internal MailOps loop on Modoboa
&lt;/h2&gt;

&lt;p&gt;The first internal version was narrow: a server health view that showed CPU, load, memory, network, and filesystem usage without opening a separate monitoring product, plus a mail-stack status strip for Postfix, Dovecot, Rspamd, Nginx, PostgreSQL, Redis, and the supporting services Modoboa depends on.&lt;/p&gt;

&lt;p&gt;That alone saved the "is it the mail server or the host?" debate on busy afternoons. The next layer added estate visibility: domains, account counts, actual mail storage, bounce counts, and migration state in one server-level summary instead of five screens.&lt;/p&gt;

&lt;p&gt;Mailbox operations followed naturally. Modoboa shows quota percentages against configured limits. We needed actual mailbox size and message counts in account listings, a stale-mailbox report that combined size, mail presence, and last-login date, and migration status surfaced in ordinary account views rather than only inside the migration workflow.&lt;/p&gt;

&lt;p&gt;Delivery diagnostics were the last internal milestone. We extended the message log with route and next-hop context, then tied SPF, DKIM, and DMARC evaluation to the failed delivery attempt: sending IP, relevant DKIM record, and the SMTP failure text together. The goal was remediation guidance we could recheck after a DNS change, not another red icon with no next step.&lt;/p&gt;

&lt;p&gt;We ran that stack on our own Modoboa servers for months before we treated it as a product. Internal tools earn trust when they survive real incidents, not demo week.&lt;/p&gt;

&lt;h2&gt;
  
  
  When we productised MailOps instead of folding it into Watcher
&lt;/h2&gt;

&lt;p&gt;Apogee Watcher is our multi-tenant PageSpeed monitoring product. Mail server operations are adjacent to performance work for agencies, but they are not the same job. Watcher answers whether client sites meet Core Web Vitals budgets across a portfolio. MailOps answers whether our mail host is healthy, which mailboxes consume storage, and why a message bounced.&lt;/p&gt;

&lt;p&gt;Merging those into one SKU would confuse buyers and blur the "layer, don't replace" rule we use across Apogee products. Agencies might need Watcher without self-hosted mail. Modoboa operators might need MailOps without PageSpeed monitoring. Shipping MailOps as a Modoboa extension with a permanent license and an optional complete-server deployment path keeps each product honest about what it owns.&lt;/p&gt;

&lt;p&gt;The productisation decision was closer to operations economics than feature envy. We had already paid the maintenance cost of an internal ops layer. Licensing MailOps funds ongoing fixes inside the Modoboa ecosystem without pretending every Apogee customer runs the same stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modoboa versus MailOps: what each layer owns
&lt;/h2&gt;

&lt;p&gt;MailOps is designed to complement Modoboa, not replace its core administration features.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Vanilla Modoboa&lt;/th&gt;
&lt;th&gt;MailOps adds&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Host and service health&lt;/td&gt;
&lt;td&gt;No integrated CPU, RAM, load, network, disk, or mail-stack dashboard&lt;/td&gt;
&lt;td&gt;Server Health view with operating-system and mail-service status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mail traffic&lt;/td&gt;
&lt;td&gt;Native statistics and graphs&lt;/td&gt;
&lt;td&gt;Concise sent, received, and bounced activity beside estate health&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Message history&lt;/td&gt;
&lt;td&gt;Core transaction log (queue ID, status, sender, recipient)&lt;/td&gt;
&lt;td&gt;Route and next-hop context, failure analysis, actionable diagnostics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SPF / DKIM / DMARC&lt;/td&gt;
&lt;td&gt;Domain-level DNS authentication checks&lt;/td&gt;
&lt;td&gt;Evaluation against the actual delivery attempt and sending path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mailbox usage&lt;/td&gt;
&lt;td&gt;Quota limits and percentage usage&lt;/td&gt;
&lt;td&gt;Actual mailbox size and message counts in listings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain estate&lt;/td&gt;
&lt;td&gt;Per-domain configuration&lt;/td&gt;
&lt;td&gt;Account count and used mail storage beside each domain&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inactive mailboxes&lt;/td&gt;
&lt;td&gt;Last-login data in separate workflows&lt;/td&gt;
&lt;td&gt;Stale-mailbox report for accounts that still hold mail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IMAP migration&lt;/td&gt;
&lt;td&gt;Dedicated migration workflow&lt;/td&gt;
&lt;td&gt;Persistent migration-state visibility in normal account views&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you are evaluating Modoboa mail server administration today, treat MailOps as an operations extension for host health, mailbox estate, and bounce diagnosis. If you are evaluating PageSpeed monitoring, treat Watcher as the portfolio monitoring layer for Core Web Vitals and lab history. Different surfaces, different on-call stories, and no reason to merge them into one login.&lt;/p&gt;

&lt;h2&gt;
  
  
  How MailOps sits beside Apogee Watcher without duplicating monitoring
&lt;/h2&gt;

&lt;p&gt;We use the same "layer, don't replace" instinct for internal tooling that we recommend for client-facing monitoring. Build or buy a focused product for the loop that repeats, then connect it to the stack you already operate instead of rip-and-replacing working tools.&lt;/p&gt;

&lt;p&gt;For agencies scaling client coverage without hiring a monitoring specialist for every new domain, that pattern shows up clearly in &lt;a href="https://apogeewatcher.com/blog/scaling-without-headcount?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-mailops-modoboa-origin" rel="noopener noreferrer"&gt;Scaling Without Headcount&lt;/a&gt;. Automate the loops that grow with every site: scheduled tests, alerts, and client-ready reports rather than another internal dashboard maintained between billable calls.&lt;/p&gt;

&lt;p&gt;The build-versus-buy question appears again when an internal ops tool becomes a permanent job. We wrote the agency framing for PageSpeed monitoring in &lt;a href="https://apogeewatcher.com/blog/lighthouse-ci-vs-managed-monitoring-build-vs-buy-agencies?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-mailops-modoboa-origin" rel="noopener noreferrer"&gt;Lighthouse CI versus managed monitoring: build versus buy for agencies&lt;/a&gt;. MailOps is our answer on the mail side: we built the Modoboa ops layer because we lived in that console daily, then productised it so the maintenance bill is explicit. Watcher is our answer on the web performance side for teams that do not want to operate a multi-tenant monitoring system themselves.&lt;/p&gt;

&lt;p&gt;Nothing in MailOps watches LCP, INP, or CrUX field data. Nothing in Watcher diagnoses Postfix queue backlogs or DMARC alignment for a bounced invoice. Keeping that boundary clear is how we avoid a product that tries to be "everything Apogee does" in one login.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does MailOps replace Modoboa?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. MailOps extends Modoboa with server observability, mailbox operations intelligence, and delivery diagnostics. Domains, accounts, quotas, and native Modoboa workflows stay in Modoboa. You still manage mail hosting in Modoboa; MailOps adds the operational views we wanted inside that same console.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does MailOps replace Apogee Watcher or other server monitoring tools?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. MailOps focuses on mail-server operations inside the Modoboa administration environment. Watcher focuses on PageSpeed and Core Web Vitals monitoring across client websites. You can run separate host monitoring alongside both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does MailOps help with SPF, DKIM, and DMARC troubleshooting?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It evaluates authentication in the context of the failed delivery: sending IP, relevant DKIM selector, SMTP response, and DNS records together, then suggests corrective actions you can verify after configuration changes. Domain-level checks alone often miss path-specific failures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who is MailOps for?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modoboa administrators who self-host mail and want host health, mailbox estate visibility, and bounce diagnosis without constantly switching to SSH, spreadsheets, and external dashboards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is MailOps sold?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A permanent MailOps v1 license for one Modoboa server, or a complete new-server deployment that installs Modoboa and MailOps with handover. Details and pricing are on &lt;a href="https://apogee.lu/mailops.html" rel="noopener noreferrer"&gt;Apogee MailOps for Modoboa&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we would ship first on a new Modoboa mail server
&lt;/h2&gt;

&lt;p&gt;If we started from scratch on Modoboa today, we would still self-host mail for the control it gives us. We would also budget an ops extension early, before the third Friday bounce investigation that sends three people to three tools.&lt;/p&gt;

&lt;p&gt;Productising internal tooling is not automatic. It made sense here because the audience already existed, the maintenance surface was real, and the boundary with Watcher was clear. If your team is building internal ops layers for stacks you operate daily, write down which incidents the tool must survive before you call it a product. That gate kept MailOps smaller and more honest than another "platform" slide.&lt;/p&gt;

&lt;p&gt;For Modoboa operators, &lt;a href="https://apogee.lu/mailops.html" rel="noopener noreferrer"&gt;Apogee MailOps for Modoboa&lt;/a&gt; is the public home for features, licensing, and deployment options. For agency PageSpeed monitoring on the web side, start with &lt;a href="https://apogeewatcher.com/blog/scaling-without-headcount?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-mailops-modoboa-origin" rel="noopener noreferrer"&gt;Scaling Without Headcount&lt;/a&gt; or the &lt;a href="https://apogeewatcher.com/blog?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-mailops-modoboa-origin" rel="noopener noreferrer"&gt;Watcher blog index&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://apogee.lu/mailops.html" rel="noopener noreferrer"&gt;Apogee MailOps for Modoboa&lt;/a&gt; (product page)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://modoboa.org/" rel="noopener noreferrer"&gt;Modoboa, Open Source Email Server&lt;/a&gt; (official project)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://modoboa.org/en/features/" rel="noopener noreferrer"&gt;Modoboa features&lt;/a&gt; (native administration scope)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.cloudflare.com/learning/email-security/dmarc-dkim-spf/" rel="noopener noreferrer"&gt;What are DMARC, DKIM, and SPF?&lt;/a&gt; (Cloudflare Learning Center)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apogeewatcher.com/blog/scaling-without-headcount" rel="noopener noreferrer"&gt;Scaling Without Headcount&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apogeewatcher.com/blog/lighthouse-ci-vs-managed-monitoring-build-vs-buy-agencies" rel="noopener noreferrer"&gt;Lighthouse CI versus managed monitoring: build versus buy for agencies&lt;/a&gt; (Apogee Watcher)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>backend</category>
      <category>monitoring</category>
      <category>agency</category>
    </item>
    <item>
      <title>Which accessibility fixes show up in Core Web Vitals dashboards?</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Sun, 09 Aug 2026 11:34:08 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/which-accessibility-fixes-show-up-in-core-web-vitals-dashboards-3egd</link>
      <guid>https://dev.to/apogeewatcher/which-accessibility-fixes-show-up-in-core-web-vitals-dashboards-3egd</guid>
      <description>&lt;p&gt;The client closed the accessibility audit with a green checklist and a flat Core Web Vitals chart. Engineering fixed missing labels, colour contrast on three components, and a landmark order issue that never touched Largest Contentful Paint, Interaction to Next Paint, or Cumulative Layout Shift. Two sprints later, keyboard users still complained about laggy menus, and field INP on the account page had drifted from "Good" to "Needs improvement" without anyone naming an accessibility ticket in the regression notes.&lt;/p&gt;

&lt;p&gt;That split is routine. Accessibility work and Core Web Vitals monitoring answer different questions unless you choose fixes that move both. Some improvements are essential for compliance and never appear on a PageSpeed or CrUX dashboard. Others, especially around keyboard responsiveness and layout-stable focus, show up in the same charts executives already read. Agencies need both lists, not a single backlog sorted only by audit severity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do accessibility audits and Core Web Vitals dashboards tell different stories?
&lt;/h2&gt;

&lt;p&gt;Accessibility audits score conformance: labels, contrast, operable controls, predictable focus order. Core Web Vitals dashboards score field or lab timing on three metrics Google uses for page experience: LCP for loading, INP for responsiveness after load, CLS for layout stability during the session.&lt;/p&gt;

&lt;p&gt;A perfect audit can leave INP poor if main-thread JavaScript still blocks &lt;code&gt;keydown&lt;/code&gt; handlers. A green LCP on a hero image can still mean a screen reader waits on an empty shell until hydration finishes. The teams celebrate different wins because the instruments measure different surfaces.&lt;/p&gt;

&lt;p&gt;We use a simple sorting question after every audit export: will this fix change LCP, INP, or CLS on the URLs we monitor on a schedule? If yes, it goes on the performance board with a before-and-after run. If no, it stays on the accessibility board with its own verification. Both boards matter; merging them without criteria produces either ignored audit items or ignored chart regressions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which keyboard and interaction fixes move INP on monitoring dashboards?
&lt;/h2&gt;

&lt;p&gt;INP replaced First Input Delay because real sessions include many interactions, not only the first tap. Keyboard navigation generates a stream of small events: Tab to move focus, Enter to activate, typing into fields, opening menus. Heavy main-thread work delays the paint that follows each step, and that delay is what INP captures.&lt;/p&gt;

&lt;p&gt;Fixes we have seen move INP on monitored URLs without waiting for the next quarterly audit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Breaking up long tasks so focus and typing get a turn on the main thread.&lt;/li&gt;
&lt;li&gt;Deferring non-critical JavaScript so the page responds to keyboard input before analytics and personalisation finish loading.&lt;/li&gt;
&lt;li&gt;Replacing synchronous validation on every &lt;code&gt;input&lt;/code&gt; event with debounced or idle-time checks.&lt;/li&gt;
&lt;li&gt;Fixing custom components that attach expensive handlers to &lt;code&gt;keydown&lt;/code&gt; for global shortcuts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pointer-only testing hides most of this. A 200 ms delay after a click can feel acceptable once; the same delay after every Tab keypress feels broken because it repeats across the whole flow. If your monitoring tool stores only aggregate INP, add lab runs that walk a keyboard path through checkout or account settings after deploys that touch interaction code.&lt;/p&gt;

&lt;p&gt;Our longer write-up on &lt;a href="https://apogeewatcher.com/blog/accessibility-core-web-vitals?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-accessibility-fixes-cwv-dashboards" rel="noopener noreferrer"&gt;accessibility and Core Web Vitals&lt;/a&gt; goes deeper on keyboard paths, Event Timing metadata, and INP segmentation. For metric definitions and thresholds, start with &lt;a href="https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-accessibility-fixes-cwv-dashboards" rel="noopener noreferrer"&gt;what Core Web Vitals measure in 2026&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which focus and layout fixes show up as CLS improvements?
&lt;/h2&gt;

&lt;p&gt;CLS is often explained with late-loading ads and images without dimensions. Focus management contributes too, and those shifts punish keyboard and screen reader users first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus rings that change layout on &lt;code&gt;:focus&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;WCAG requires a visible focus indicator. Teams sometimes add a border or extra padding only on focus to make the ring obvious. That changes element size and can register as layout shift, especially on dense navigation bars where many items receive focus in sequence.&lt;/p&gt;

&lt;p&gt;Switching to &lt;code&gt;outline&lt;/code&gt; or &lt;code&gt;box-shadow&lt;/code&gt; for focus styles usually satisfies visibility without moving layout. We have watched CLS on template dashboards calm down after removing border-based focus treatments on header links, with no change to the hero LCP element.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus moves that scroll unstable pages
&lt;/h3&gt;

&lt;p&gt;When focus lands on an offscreen control, the browser scrolls it into view. If fonts, images, or banners are still settling, that scroll combines with shifts and disorients keyboard users. Fixing image dimensions, reserving space for ads, and stabilising cookie banners reduces CLS for everyone and makes focus navigation predictable.&lt;/p&gt;

&lt;p&gt;Monitoring tip: when CLS regresses, inspect shift attribution if your tool provides it. "Focus-related" jumps often trace to modals, sticky headers, or late-inserted consent UI rather than the product grid clients ask about first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which accessibility improvements help LCP without changing the hero image?
&lt;/h2&gt;

&lt;p&gt;LCP is usually a large image or text block in the viewport. Accessibility work rarely swaps that element directly, but it can change when primary content is available to assistive technology, which correlates with perceived readiness.&lt;/p&gt;

&lt;p&gt;Fixes that sometimes improve LCP or its practical cousin "time until main content is usable":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Server-rendering the primary heading and key controls instead of waiting for client hydration.&lt;/li&gt;
&lt;li&gt;Removing skeleton screens that paint quickly but delay semantic content in the DOM.&lt;/li&gt;
&lt;li&gt;Ensuring font loading strategy does not block text LCP with invisible text periods that reflow after load.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are not substitutes for image optimisation. They align "largest content" with "meaningful content" so a green LCP score is not lying to non-visual users. Track LCP element type in lab runs when accessibility refactors touch rendering strategy, not only when marketing changes the hero asset.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which accessibility fixes never appear on a Core Web Vitals dashboard?
&lt;/h2&gt;

&lt;p&gt;Some work is non-negotiable and invisible to the three metrics. Plan for it explicitly so clients do not ask why the chart stayed flat after a two-week audit sprint.&lt;/p&gt;

&lt;p&gt;Examples that rarely move LCP, INP, or CLS on monitored URLs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accurate alternative text and accessible names on decorative versus informative images.&lt;/li&gt;
&lt;li&gt;Colour contrast on text that was already stable in layout.&lt;/li&gt;
&lt;li&gt;Correct heading hierarchy and landmark regions when DOM order was already fixed.&lt;/li&gt;
&lt;li&gt;Captions and transcripts for media (essential for access, unrelated to vitals timing).&lt;/li&gt;
&lt;li&gt;Error messages that were always present but poorly associated with fields (fix the association, not the paint timing).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That list is not an argument to deprioritise audit findings. It is an argument against using Core Web Vitals alone as proof of accessibility progress. Report audit closure and chart movement separately in client updates.&lt;/p&gt;

&lt;h2&gt;
  
  
  How should agencies monitor accessibility-related fixes alongside Core Web Vitals?
&lt;/h2&gt;

&lt;p&gt;We keep scheduled PageSpeed-style runs on the templates named in the retainer, mobile and desktop where field data already splits. After any deploy tagged "accessibility" or "interaction", we add one keyboard walk lab on the same URLs before the weekly report goes out.&lt;/p&gt;

&lt;p&gt;Practical monitoring habits:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fix category&lt;/th&gt;
&lt;th&gt;What to watch on dashboards&lt;/th&gt;
&lt;th&gt;What to verify outside CWV&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Keyboard menus, modals, forms&lt;/td&gt;
&lt;td&gt;INP on affected URLs; lab keyboard path after deploy&lt;/td&gt;
&lt;td&gt;Focus trap behaviour, screen reader announcements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Focus visible / focus order&lt;/td&gt;
&lt;td&gt;CLS on nav-heavy templates&lt;/td&gt;
&lt;td&gt;Manual tab order through loading states&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rendering and hydration&lt;/td&gt;
&lt;td&gt;LCP element type and value&lt;/td&gt;
&lt;td&gt;Screen reader readout on first meaningful content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contrast, labels, landmarks&lt;/td&gt;
&lt;td&gt;Usually flat on vitals charts&lt;/td&gt;
&lt;td&gt;Audit retest or automated a11y scan&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use the same URL groups you already report for Core Web Vitals. Adding a parallel "accessibility URL list" that only contains the homepage duplicates effort and hides regressions on account or checkout flows where keyboard latency actually hurts.&lt;/p&gt;

&lt;p&gt;Budget thresholds should match the performance policy document, not a second spreadsheet invented for the audit vendor. When INP or CLS crosses budget after an accessibility release, the regression owner is the team that shipped the interaction change, even if the original ticket said "WCAG".&lt;/p&gt;

&lt;h2&gt;
  
  
  Next step: tag one audit fix with the Core Web Vital it should move
&lt;/h2&gt;

&lt;p&gt;Open the last accessibility export for a live client. Pick three open items. For each, write which metric should change if the fix works: LCP, INP, CLS, or none. Put the metric-linked items on this week's deploy verification list with a scheduled lab run on the URLs where that metric is already charted.&lt;/p&gt;

&lt;p&gt;If every item lands in "none", your monitoring scope is probably too narrow, not your audit. Expand templates on the watch list before you tell the sponsor that Core Web Vitals prove accessibility health.&lt;/p&gt;

&lt;p&gt;For the full crosswalk between assistive-tech UX and continuous monitoring, read &lt;a href="https://apogeewatcher.com/blog/accessibility-core-web-vitals?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-accessibility-fixes-cwv-dashboards" rel="noopener noreferrer"&gt;Accessibility and Core Web Vitals: the overlooked UX wins&lt;/a&gt;. For syllabus-level definitions of LCP, INP, and CLS, use &lt;a href="https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-accessibility-fixes-cwv-dashboards" rel="noopener noreferrer"&gt;What Are Core Web Vitals? A Practical Guide for 2026&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Fixes that show up on dashboards earn a place in performance retainers. Fixes that do not still ship; they just need a different line on the report.&lt;/p&gt;

</description>
      <category>webperf</category>
      <category>corewebvitals</category>
      <category>a11y</category>
      <category>seo</category>
    </item>
    <item>
      <title>When Lighthouse CI maintenance in CI/CD pipelines becomes a second job</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Sat, 08 Aug 2026 21:21:39 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/when-lighthouse-ci-maintenance-in-cicd-pipelines-becomes-a-second-job-347c</link>
      <guid>https://dev.to/apogeewatcher/when-lighthouse-ci-maintenance-in-cicd-pipelines-becomes-a-second-job-347c</guid>
      <description>&lt;p&gt;The Slack thread started with a screenshot of a green GitHub Actions run. By the third reply someone had pasted a Lighthouse JSON artefact, a link to a Chrome release note, and a question nobody wanted to own: "Which client repository still pins Lighthouse 10?"&lt;/p&gt;

&lt;p&gt;That is the week Lighthouse CI stopped being a merge gate and became a second job. The pipeline still passed and the portfolio still needed evidence, but the difference was who paid in hours: the developer shipping a feature, or the one person who inherited every &lt;code&gt;lighthouserc&lt;/code&gt; file across client repositories.&lt;/p&gt;

&lt;h2&gt;
  
  
  When does Lighthouse CI maintenance outgrow a CI/CD pipeline?
&lt;/h2&gt;

&lt;p&gt;Lighthouse CI earns its place early. You wire assertions on a preview URL, block a CLS regression, and the team trusts the red build. The cost is front-loaded configuration, not ongoing calendar time.&lt;/p&gt;

&lt;p&gt;The shift happens when success creates obligations a CI/CD pipeline was never designed to carry:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every new client repository needs a copied workflow, pinned Chrome, and preview URL rules that match their host.&lt;/li&gt;
&lt;li&gt;Assertions need tuning after flaky LCP on cold runners, so thresholds loosen until they barely catch real regressions.&lt;/li&gt;
&lt;li&gt;Account managers ask for client-ready reports, and the only export is a CI/CD artefact someone must turn into slides.&lt;/li&gt;
&lt;li&gt;Production URLs outside the two preview paths regress while the job stays green.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point you are not "running Lighthouse CI in a pipeline." You are operating a small internal product: version pins, runner hygiene, assertion policy, and reporting glue. For a single product team that can be fine. For an agency portfolio it competes with billable delivery.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you know Lighthouse CI in CI/CD became an unpaid side role?
&lt;/h2&gt;

&lt;p&gt;We treat these as signals to shrink CI/CD scope or add a managed monitoring layer, not as moral failure. Teams hit them around five to fifteen client sites, sometimes sooner when preview hosts differ wildly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Flaky Lighthouse CI runs on GitHub Actions
&lt;/h3&gt;

&lt;p&gt;Engineers merge after the third "Re-run failed jobs" click because INP moved six points on a shared runner. When the gate is noise, people route around it.&lt;/p&gt;

&lt;h3&gt;
  
  
  @lhci/cli and Lighthouse version drift across repositories
&lt;/h3&gt;

&lt;p&gt;One repository uses &lt;code&gt;@lhci/cli&lt;/code&gt; 0.13, another 0.14, Lighthouse 11 on one client and 10 on another. Nobody can say which assertion set is authoritative without opening six pull requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preview URL versus production: green CI/CD, red PageSpeed Insights
&lt;/h3&gt;

&lt;p&gt;The CI/CD job guards &lt;code&gt;/&lt;/code&gt; on a Netlify preview while production serves &lt;code&gt;/checkout&lt;/code&gt; from a different CDN rule. Sponsors see red on PageSpeed Insights; developers point at a green pipeline run and both sides are partially right.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lighthouse CI artefacts instead of client-ready performance reports
&lt;/h3&gt;

&lt;p&gt;Monthly retainers need a short narrative: which URLs broke budget, when, and what changed. If the answer lives in downloaded JSON and a manual chart, someone is doing monitoring work outside the pipeline, unpaid.&lt;/p&gt;

&lt;h3&gt;
  
  
  One engineer as the default Lighthouse CI maintainer
&lt;/h3&gt;

&lt;p&gt;One senior developer becomes "the Lighthouse person," fixes workflows between client calls, and resents every Chrome update. That is a job description, not a YAML tweak.&lt;/p&gt;

&lt;p&gt;If three or more patterns sound familiar, Lighthouse CI is already a second job. The fix is not deleting the pipeline check. It is deciding which hours belong in merge protection and which belong in scheduled monitoring with client-ready output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which performance budget checks should Lighthouse CI enforce in CI/CD?
&lt;/h2&gt;

&lt;p&gt;We keep the CI/CD slice thin on purpose. Merge protection should answer a narrow question: did this candidate build break budgets on the one or two preview URLs we trust for this repository?&lt;/p&gt;

&lt;p&gt;Keep as errors when the check is stable and the developer on the pull request can fix the cause:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CLS on in-scope templates where layout is the likely regression.&lt;/li&gt;
&lt;li&gt;Bundle or script byte ceilings when the build exposes an artefact.&lt;/li&gt;
&lt;li&gt;Total blocking time or main-thread proxies when the change touches JavaScript entry points.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Warn, do not block, when preview parity is weak: cold CDN LCP, ads on staging, INP without enough repetitions to trust a median.&lt;/p&gt;

&lt;p&gt;Do not ask CI/CD to replace production monitoring: field CrUX exports, full sitemap crawls, rank proxies, or every revenue template on every docs-only commit. Those checks belong on a schedule against production URLs, with alerts that account managers can forward.&lt;/p&gt;

&lt;p&gt;The wiring patterns, assertion keys, and GitHub Actions sketch live in our step-by-step guide: &lt;a href="https://apogeewatcher.com/blog/how-to-set-up-performance-budgets-in-ci-cd-pipelines?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-lighthouse-ci-cicd-second-job" rel="noopener noreferrer"&gt;How to set up performance budgets in CI/CD pipelines&lt;/a&gt;. Use that guide to implement a small gate; use the criteria above to decide how small.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lighthouse CI versus managed monitoring: why agencies hit build-versus-buy pressure early
&lt;/h2&gt;

&lt;p&gt;Lighthouse CI is open source and runner-native, which makes it the default first step. Managed PageSpeed monitoring adds invoice line items, which makes teams delay the decision until the hidden invoice arrives: senior hours spent keeping workflows honest.&lt;/p&gt;

&lt;p&gt;The build path scales poorly across repositories because CI/CD is repository-centric and agencies are portfolio-centric. Copying configuration per client multiplies drift. Preview URL changes when a client moves hosts. Authentication on staging breaks collection until someone scripts login. Each exception lands on the same maintainer.&lt;/p&gt;

&lt;p&gt;The buy path trades some control for repetition: scheduled lab runs across many URLs, history, thresholds shared with client reports, and alerts when production templates cross budget. It does not replace merge gates on preview; it absorbs the work a pipeline should never have carried: full URL lists, post-deploy cadence, and evidence sponsors can read without terminal access.&lt;/p&gt;

&lt;p&gt;We wrote the comparison for agency leads evaluating that trade explicitly: &lt;a href="https://apogeewatcher.com/blog/lighthouse-ci-vs-managed-monitoring-build-vs-buy-agencies?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-lighthouse-ci-cicd-second-job" rel="noopener noreferrer"&gt;Lighthouse CI versus managed monitoring: build versus buy for agencies&lt;/a&gt;. The headline question is not "free versus paid." It is whether your team wants to operate monitoring infrastructure or operate client sites.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to shrink Lighthouse CI scope in CI/CD pipelines without losing merge protection
&lt;/h2&gt;

&lt;p&gt;When CI/CD became a second job for us, the recovery plan had four moves. None required removing Lighthouse from the pipeline entirely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Limit Lighthouse CI to two preview URLs per client repository
&lt;/h3&gt;

&lt;p&gt;Two preview paths maximum on small retainers: homepage plus one revenue or app-shell template agreed in the statement of work. Everything else lives in scheduled monitoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  One performance budget document for CI/CD gates and client reports
&lt;/h3&gt;

&lt;p&gt;Copy numbers from the same budget document monitoring uses. If CI/CD gates and the client report disagree on thresholds, engineers ignore both.&lt;/p&gt;

&lt;h3&gt;
  
  
  Demote flaky LCP to warnings; keep CLS and bundle size as errors
&lt;/h3&gt;

&lt;p&gt;Demote flaky LCP to warnings until preview matches production behaviour on paper. Keep CLS and bundle ceilings as errors people act on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Document pre-merge CI/CD versus post-deploy monitoring in the README
&lt;/h3&gt;

&lt;p&gt;CI/CD answers pre-merge; monitoring answers post-deploy. Write that split in the repository README so account teams stop asking the pipeline to prove checkout on Friday's release.&lt;/p&gt;

&lt;p&gt;Layer managed monitoring beside the CI/CD job rather than inflating YAML until every pull request waits ten minutes on Chrome. Multi-tenant monitors exist precisely because portfolio evidence does not belong inside each client's GitHub Actions bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lighthouse CI in CI/CD versus scheduled PageSpeed monitoring: agency split for one repository
&lt;/h2&gt;

&lt;p&gt;For a typical agency client on a modern JavaScript stack, we aim for under ten minutes of CI/CD web performance time and zero manual JSON exports per month.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Phase&lt;/th&gt;
&lt;th&gt;Tooling&lt;/th&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pre-merge&lt;/td&gt;
&lt;td&gt;Lighthouse CI plus one bundle guard&lt;/td&gt;
&lt;td&gt;Did this branch regress CLS or script weight on the two preview URLs in scope?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Post-deploy&lt;/td&gt;
&lt;td&gt;Scheduled PageSpeed monitoring&lt;/td&gt;
&lt;td&gt;Are production templates still inside budget on the cadence we promised?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reporting&lt;/td&gt;
&lt;td&gt;Monitoring product export&lt;/td&gt;
&lt;td&gt;What do we send the sponsor without opening a terminal?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Green in CI/CD and red in the Friday report means the split failed, not that someone lied. Either preview parity is wrong, the URL list in monitoring is right and the pipeline was too narrow, or the regression shipped through a path CI/CD never watched. All three are operational fixes, not reasons to add a fourth Lighthouse run on every push.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audit Lighthouse CI maintenance before you copy the workflow to another client
&lt;/h2&gt;

&lt;p&gt;Pick the client repository where the CI/CD job failed most often last quarter. Answer honestly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Who last updated &lt;code&gt;lighthouserc&lt;/code&gt; and the Chrome pin?&lt;/li&gt;
&lt;li&gt;How many hours went to flaky re-runs versus feature work?&lt;/li&gt;
&lt;li&gt;Which production URL regressed while the pipeline stayed green?&lt;/li&gt;
&lt;li&gt;What did the sponsor receive that was not a raw artefact?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the maintainer has a name and the sponsor answer is "a screenshot from PageSpeed Insights," you already have a second job. Implement the thin CI/CD template from &lt;a href="https://apogeewatcher.com/blog/how-to-set-up-performance-budgets-in-ci-cd-pipelines?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-lighthouse-ci-cicd-second-job" rel="noopener noreferrer"&gt;performance budgets in CI/CD pipelines&lt;/a&gt;, then read &lt;a href="https://apogeewatcher.com/blog/lighthouse-ci-vs-managed-monitoring-build-vs-buy-agencies?utm_source=hashnode&amp;amp;utm_medium=referral&amp;amp;utm_campaign=hashnode-lighthouse-ci-cicd-second-job" rel="noopener noreferrer"&gt;Lighthouse CI versus managed monitoring&lt;/a&gt; before copying the workflow into client seven.&lt;/p&gt;

&lt;p&gt;Merge gates should block merges you would roll back. Everything else belongs on a schedule, with owners, on the full URL list the retainer names.&lt;/p&gt;

</description>
      <category>webperf</category>
      <category>cicd</category>
      <category>lighthouse</category>
      <category>agency</category>
    </item>
    <item>
      <title>When PageSpeed Insights Shows No CLS or INP for Your URL</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Thu, 06 Aug 2026 15:51:27 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/when-pagespeed-insights-shows-no-cls-or-inp-for-your-url-5703</link>
      <guid>https://dev.to/apogeewatcher/when-pagespeed-insights-shows-no-cls-or-inp-for-your-url-5703</guid>
      <description>&lt;p&gt;You paste a client URL into PageSpeed Insights and the lab block looks fine: Largest Contentful Paint, Total Blocking Time, even a Cumulative Layout Shift score from Lighthouse. Scroll to the field section and Interaction to Next Paint (INP) or CLS is simply absent. Not red, not amber, just missing. The account manager asks whether the page fails Core Web Vitals. You are not looking at a broken test. You are looking at a Chrome User Experience Report (CrUX) eligibility gap, and it is one of the most common sources of confusion in agency reporting.&lt;/p&gt;

&lt;p&gt;PageSpeed Insights merges two data sources on one screen. Lab numbers are synthetic: Lighthouse runs on demand with a fixed device profile. Field numbers come from CrUX, a 28-day rolling sample of real Chrome users. Google only publishes a field metric when enough opted-in sessions meet privacy and quality thresholds for that origin, URL, device class, and metric. When the sample is too thin, PSI shows no data for that metric even though lab CLS or INP is right there. That split is normal on low-traffic pages, new launches, long-tail templates, and some desktop-only views. The fix is not to rerun the test until a number appears. The fix is to know which layer you are reading, follow a short decision tree, and fall back to scheduled lab monitoring where field data cannot exist yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why PageSpeed Insights sometimes shows no CLS or INP field data
&lt;/h2&gt;

&lt;p&gt;CrUX is not a census of every visit. Google aggregates performance from a subset of Chrome users who have opted in to sharing statistics. Before a metric appears in PageSpeed Insights field data, the URL or origin needs enough recent sessions in that collection period. If the count falls below Google's threshold, the metric is withheld rather than shown with misleading precision.&lt;/p&gt;

&lt;p&gt;Several situations trigger a missing field row:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Insufficient sample size&lt;/strong&gt; for the specific URL, especially on blog posts, campaign landers, and localised paths that get far fewer sessions than the homepage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Origin-level data only&lt;/strong&gt;, where CrUX has enough traffic for &lt;code&gt;example.com&lt;/code&gt; but not for &lt;code&gt;example.com/pricing/enterprise&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metric-specific gaps&lt;/strong&gt;, where LCP field data exists but CLS or INP does not, because each metric has its own eligibility within the same report.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form factor splits&lt;/strong&gt;, where mobile field INP is published but desktop INP is not, or the reverse, because phone and desktop traffic are reported separately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New or recently changed URLs&lt;/strong&gt; that have not yet accumulated four weeks of blended field history in the rolling window described in &lt;a href="https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window" rel="noopener noreferrer"&gt;why your Core Web Vitals fix is not in CrUX yet&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these mean the page is fast or slow in the eyes of Google Search. They mean Google does not have enough field evidence to print a percentile for that slice. Search Console may still group the URL with origin-level status when URL-level field data is missing, which is another reason teams misread a single PageSpeed Insights screenshot as the full story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lab CLS and INP vs missing CrUX field data on the same URL
&lt;/h2&gt;

&lt;p&gt;The most confusing PSI screen is lab green beside an empty field row. Lighthouse always calculates lab CLS from the layout shifts it observes during the synthetic load. Lab interactivity is proxied through Total Blocking Time and related audits; INP itself is a field metric, so PSI does not show a field INP value when CrUX has no sample, even if lab TBT looks acceptable.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lab (Lighthouse in PageSpeed Insights)&lt;/th&gt;
&lt;th&gt;Field (CrUX in PageSpeed Insights)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Source&lt;/td&gt;
&lt;td&gt;One controlled run you triggered&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLS&lt;/td&gt;
&lt;td&gt;Always calculated for that run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INP&lt;/td&gt;
&lt;td&gt;Not a lab Core Web Vital; use TBT as a lab signal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Template QA, deploy checks, before/after on priority URLs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Missing data meaning&lt;/td&gt;
&lt;td&gt;N/A (rerun always produces lab output)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Treat the two blocks as complementary. Lab answers whether today's build looks clean on a representative device profile. Field answers whether enough real users experienced that quality over the past month. A missing field CLS or INP row does not invalidate lab work; it limits what you can claim about population-level Core Web Vitals for that exact URL. For the wider lab versus field programme, see &lt;a href="https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance" rel="noopener noreferrer"&gt;synthetic versus real user monitoring&lt;/a&gt; and &lt;a href="https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough" rel="noopener noreferrer"&gt;PageSpeed Insights versus automated monitoring&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  When CrUX shows origin-level data but not URL-level CLS or INP
&lt;/h2&gt;

&lt;p&gt;CrUX publishes at two granularities when sample size allows: &lt;strong&gt;origin&lt;/strong&gt; (scheme plus registrable domain, for example &lt;code&gt;https://www.example.com&lt;/code&gt;) and &lt;strong&gt;URL&lt;/strong&gt; (the exact page tested). High-traffic homepages and top category routes often qualify for URL-level field data. Long-tail URLs frequently inherit only origin-level aggregates in PageSpeed Insights, or show no URL row at all.&lt;/p&gt;

&lt;p&gt;If origin field CLS looks healthy but the product detail URL you care about has no field INP, you are not necessarily looking at a product-page regression. You may be looking at a page that does not meet URL-level thresholds. Google's &lt;a href="https://developer.chrome.com/docs/crux/guides/pagespeed-insights" rel="noopener noreferrer"&gt;PageSpeed Insights and CrUX guide&lt;/a&gt; documents how origin and URL slices appear in the UI. Practical workflow for agencies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run PageSpeed Insights on the &lt;strong&gt;origin&lt;/strong&gt; (homepage or canonical host) and note which metrics appear at origin level.&lt;/li&gt;
&lt;li&gt;Run the &lt;strong&gt;specific client URL&lt;/strong&gt; and compare which metrics disappear.&lt;/li&gt;
&lt;li&gt;If origin field data exists but URL data does not, report origin status for SEO conversations and use lab monitoring on the priority template until URL-level field history builds.&lt;/li&gt;
&lt;li&gt;Query the CrUX History API or CrUX Vis for origin trends when you need charts; see &lt;a href="https://apogeewatcher.com/blog/crux-dashboard-retired-where-to-get-ttfb-inp-field-history" rel="noopener noreferrer"&gt;CrUX Dashboard retired: where to get TTFB, INP, and field history&lt;/a&gt; for the replacement stack.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;URL-level CrUX is valuable when you have it. It is not guaranteed for every page in the sitemap, and missing URL-level CLS or INP is often a traffic maths problem rather than a measurement error.&lt;/p&gt;

&lt;h2&gt;
  
  
  Desktop vs mobile splits when only one form factor has field data
&lt;/h2&gt;

&lt;p&gt;PageSpeed Insights field data is split by &lt;strong&gt;phone&lt;/strong&gt; and &lt;strong&gt;desktop&lt;/strong&gt; form factors. Each combination of origin or URL, metric, and form factor has its own eligibility. That is why community threads describe CLS on desktop in one tool and no CLS on mobile in PageSpeed Insights, or INP on mobile with no desktop INP row.&lt;/p&gt;

&lt;p&gt;Mobile traffic usually dominates retail and publisher sites, so mobile field Core Web Vitals are what Search Console emphasises for many properties. B2B sites with heavy desktop usage during business hours can still lack desktop INP in CrUX while mobile INP passes. Always note which strategy you selected in PageSpeed Insights before screenshotting a report. Switching between mobile and desktop lab profiles does not change field eligibility, but it changes which field column you are looking at.&lt;/p&gt;

&lt;p&gt;For portfolio programmes, monitor both form factors on priority templates even when only one has field data today. &lt;a href="https://apogeewatcher.com/blog/mobile-vs-desktop-core-web-vitals-monitoring-both" rel="noopener noreferrer"&gt;Mobile versus desktop Core Web Vitals monitoring&lt;/a&gt; covers schedules and budgets; the reporting rule here is simple: never merge mobile and desktop field percentiles into a single averaged number for client decks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Decision tree: what to check when PageSpeed Insights has no data
&lt;/h2&gt;

&lt;p&gt;Use this sequence before you tell a client their CLS or INP "does not exist."&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Confirm the exact URL (scheme, host, trailing slash) matches the live page
        |
        v
2. Check ORIGIN field data in PageSpeed Insights (same host, homepage if needed)
        |
        +-- Origin also missing --&amp;gt; likely low traffic or new site; skip to step 5
        |
        v
3. Check URL-level field data for the same metric on MOBILE and DESKTOP
        |
        +-- One form factor missing --&amp;gt; report the eligible one; lab-monitor the other
        |
        v
4. Compare LCP vs CLS vs INP availability (metric-specific gaps are common)
        |
        +-- Only INP/CLS missing --&amp;gt; interactions or shifts rare vs LCP paint; still fix in lab
        |
        v
5. Run lab Lighthouse on the template; store scheduled lab trends for proof
        |
        v
6. Set performance budgets and alerts on lab CLS/TBT (and field when it appears)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 4 matters for triage. A URL with field LCP but no field CLS often still has layout shift risk; Lighthouse lab CLS on that template is your honest diagnostic until CrUX accumulates enough sessions. A URL with no field INP may still have interaction pain visible as lab TBT or as INP in Chrome DevTools performance recordings on a real device.&lt;/p&gt;

&lt;p&gt;If origin and URL both lack all field metrics, read Google's public guidance on &lt;a href="https://developer.chrome.com/docs/crux" rel="noopener noreferrer"&gt;discovering what your real users experience&lt;/a&gt; and treat the property as &lt;strong&gt;field-ineligible&lt;/strong&gt; for now. SEO impact is evaluated at the origin level where data exists; product impact on a thin URL still warrants lab budgets because your users feel the page even when CrUX does not publish a percentile.&lt;/p&gt;

&lt;h2&gt;
  
  
  How agencies should monitor low-traffic URLs without CrUX samples
&lt;/h2&gt;

&lt;p&gt;When PageSpeed Insights returns no field CLS or INP, your operating model shifts from field percentiles to &lt;strong&gt;template-level lab cadence&lt;/strong&gt; plus origin field context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pick representative URLs, not every long-tail path.&lt;/strong&gt; Monitor checkout, pricing, primary landing templates, and top blog layouts on a schedule. One good template lab series beats fifty one-off PSI pastes that all show "no data."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Store lab CLS and TBT (INP proxy) over time.&lt;/strong&gt; Field INP may appear later if traffic grows; until then, regression alerts on lab metrics catch script and font changes that would hurt real users. Tie thresholds to &lt;a href="https://apogeewatcher.com/blog/performance-budget-thresholds-template" rel="noopener noreferrer"&gt;performance budget templates&lt;/a&gt; and explain in client reports that field slices are pending, not ignored.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use origin field data for executive summaries.&lt;/strong&gt; When URL-level INP is missing, origin mobile INP still informs whether the domain broadly passes interactivity expectations. Pair that with lab evidence on the specific template you shipped last Tuesday.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Document device splits in every report.&lt;/strong&gt; Note "mobile field INP: 142 ms p75; desktop field INP: not available (insufficient CrUX sample)" so stakeholders do not assume desktop is fine because mobile is green.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Re-test after traffic events.&lt;/strong&gt; Product launches, paid campaigns, and seasonal enrolment can push a URL over CrUX URL thresholds. Schedule a quarterly eligibility check on pages that matter commercially.&lt;/p&gt;

&lt;p&gt;Apogee Watcher is built for that layered model: scheduled PageSpeed Insights and Lighthouse runs across many client sites, budgets on lab metrics, and alerts when a priority URL regresses, while you still read field slices where Google publishes them. It does not manufacture CrUX samples for pages Chrome users rarely visit. It keeps lab proof continuous until field data catches up.&lt;/p&gt;

&lt;p&gt;When field CLS or INP returns, compare it to the lab trend you stored. If they diverge, you are usually looking at cache mix, device diversity, or third-party behaviour that lab did not emulate. That is when &lt;a href="https://apogeewatcher.com/blog/cls-deep-dive-common-causes-fixes-layout-shift" rel="noopener noreferrer"&gt;CLS deep-dive fixes&lt;/a&gt; and &lt;a href="https://apogeewatcher.com/blog/lcp-inp-cls-what-each-core-web-vital-means-and-how-to-fix-it" rel="noopener noreferrer"&gt;LCP, INP, and CLS explained&lt;/a&gt; move from reference reading to sprint work.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why does PageSpeed Insights show lab CLS but no field CLS?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lab CLS comes from Lighthouse on every run. Field CLS requires enough real Chrome sessions on that origin or URL in CrUX. Low traffic, URL-level ineligibility, or a form factor with too few sessions are the usual causes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does missing INP in PageSpeed Insights mean the page passes interactivity?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. It means CrUX does not have enough interaction data to publish field INP for that slice. Use lab TBT, manual device testing, and scheduled lab monitoring until field INP appears or you confirm the URL is intentionally low priority.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I force URL-level CrUX data to appear?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You cannot opt in a single URL. Eligibility follows Chrome traffic volume and Google's privacy thresholds. Growing organic and paid traffic to the URL, fixing canonical and redirect issues, and waiting through the 28-day rolling window are the levers you actually have.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I report origin data when the client asked about one URL?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, with a clear label. Origin field Core Web Vitals describe the domain's eligible traffic pool. Pair origin field status with lab results on the specific template so the client sees both the SEO-wide picture and the page they shipped.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is "no data" the same as a failing Core Web Vital?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Missing field data is not a pass or fail badge. Search Console may use origin-level grouping for URLs without their own field row. Treat missing data as "not enough field evidence," then use lab monitoring and origin context until URL-level metrics qualify.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should I use the CrUX API instead of PageSpeed Insights?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use PageSpeed Insights for a quick human-readable check. Use the &lt;a href="https://developer.chrome.com/docs/crux/api" rel="noopener noreferrer"&gt;CrUX API&lt;/a&gt; or History API when you need to store daily or weekly field percentiles in your own database across many origins. Eligibility rules are the same; the API does not bypass sample limits.&lt;/p&gt;

&lt;p&gt;Missing CLS or INP in PageSpeed Insights is a data availability problem, not a mystery bug. Read origin before URL, mobile before you assume desktop, lab before you declare victory, and keep scheduled synthetic monitoring on the templates that drive revenue while CrUX catches up.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apogeewatcher.com/sign-up" rel="noopener noreferrer"&gt;Start a free trial&lt;/a&gt; to schedule PageSpeed tests, set lab budgets on priority URLs, and track regressions across client portfolios when field data is thin or absent.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.chrome.com/docs/crux/guides/pagespeed-insights" rel="noopener noreferrer"&gt;How to view Chrome UX Report data on PageSpeed Insights&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.chrome.com/docs/crux" rel="noopener noreferrer"&gt;Chrome User Experience Report documentation&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.chrome.com/docs/crux/api" rel="noopener noreferrer"&gt;CrUX API&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026" rel="noopener noreferrer"&gt;What Are Core Web Vitals? A Practical Guide for 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/lcp-inp-cls-what-each-core-web-vital-means-and-how-to-fix-it" rel="noopener noreferrer"&gt;LCP, INP, CLS: What Each Core Web Vital Means and How to Fix It&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/cls-deep-dive-common-causes-fixes-layout-shift" rel="noopener noreferrer"&gt;CLS Deep-Dive: Common Causes and Fixes for Layout Shift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough" rel="noopener noreferrer"&gt;PageSpeed Insights vs Automated Monitoring: When Manual Checks Aren't Enough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance" rel="noopener noreferrer"&gt;When to Use Synthetic vs Real User Monitoring for Performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/crux-dashboard-retired-where-to-get-ttfb-inp-field-history" rel="noopener noreferrer"&gt;CrUX Dashboard Retired: Where to Get TTFB, INP, and Field History&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window" rel="noopener noreferrer"&gt;Why Your Core Web Vitals Fix Isn't in CrUX Yet (28-Day Window)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/mobile-vs-desktop-core-web-vitals-monitoring-both" rel="noopener noreferrer"&gt;Mobile vs Desktop Core Web Vitals: Why You Need to Monitor Both&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/performance-budget-thresholds-template" rel="noopener noreferrer"&gt;Performance Budget Thresholds Template&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>webperf</category>
      <category>seo</category>
    </item>
    <item>
      <title>CrUX Dashboard Retired: Where to Get TTFB, INP, and Field History</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Tue, 04 Aug 2026 10:12:06 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/crux-dashboard-retired-where-to-get-ttfb-inp-and-field-history-1jp3</link>
      <guid>https://dev.to/apogeewatcher/crux-dashboard-retired-where-to-get-ttfb-inp-and-field-history-1jp3</guid>
      <description>&lt;p&gt;For years the CrUX Dashboard was the bookmark agencies opened when a client asked whether field Largest Contentful Paint had moved since the last deploy. It was a Looker Studio report on monthly Chrome User Experience Report (CrUX) data: stacked bars for origin-level distributions, a familiar place to screenshot TTFB, Interaction to Next Paint (INP), and Cumulative Layout Shift (CLS) without writing SQL. Google retired it at the end of November 2025 and shut down the shared CrUX Connector that fed it. If your team still has a saved link, the chart either fails to load or stops at the last month the connector received.&lt;/p&gt;

&lt;p&gt;The Chrome UX Report itself did not go away. What you need now is a replacement stack: CrUX Vis and the CrUX History API for TTFB, INP, and CLS trends, PageSpeed Insights and Search Console for the latest field slice, BigQuery if you want years of origin history on your own billing project, and scheduled lab monitoring so deploy proof does not wait on CrUX's 28-day rolling window. No single free dashboard copies every old Looker view, but the migration path is straightforward once you match each tool to the question you are actually asking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Google retired the CrUX Dashboard and Looker Studio connector
&lt;/h2&gt;

&lt;p&gt;Google announced the deprecation in &lt;a href="https://developer.chrome.com/blog/crux-dashboard-deprecation" rel="noopener noreferrer"&gt;September 2025&lt;/a&gt;. The CrUX Dashboard was a Chrome team-maintained Looker Studio template on monthly CrUX tables. Usage grew after Core Web Vitals became a ranking signal in 2020, but the connector behind it struggled with outages, especially around monthly data releases. Google pointed teams at the &lt;a href="https://developer.chrome.com/docs/crux/guides/history-api" rel="noopener noreferrer"&gt;CrUX History API&lt;/a&gt; (weekly series, up to about 40 points) and &lt;a href="https://developer.chrome.com/docs/crux/vis" rel="noopener noreferrer"&gt;CrUX Vis&lt;/a&gt; (first-party charts on that API) as more reliable paths.&lt;/p&gt;

&lt;p&gt;By November 2025 the connector stopped receiving new months. Dashboards that depended on Google's shared BigQuery bridge stopped updating; &lt;a href="https://developer.chrome.com/docs/crux/release-notes" rel="noopener noreferrer"&gt;CrUX release notes&lt;/a&gt; treated that as the final reminder. You can still run the old Looker template against your own &lt;code&gt;chrome-ux-report&lt;/code&gt; BigQuery project if you accept query cost and setup work, but the free one-click version most teams used is not coming back. CrUX Vis now carries much of the same job with weekly points instead of monthly bars, and PageSpeed Insights still shows the latest rolling 28-day field slice when Google has enough Chrome traffic for the origin or URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  PageSpeed Insights field data and Search Console: current Chrome UX Report numbers
&lt;/h2&gt;

&lt;p&gt;When someone asks "what does CrUX say right now?", they usually want the latest rolling field percentiles, not six months of history. Three surfaces answer that question most often, and they share the same underlying dataset with different filters and presentation. PageSpeed Insights, Search Console, and the daily CrUX API each emphasise a different workflow, but the numbers trace back to the same Chrome User Experience Report collection rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  PageSpeed Insights field data for one origin or URL
&lt;/h3&gt;

&lt;p&gt;PageSpeed Insights is still the default check for a single origin or URL. Open &lt;a href="https://pagespeed.web.dev/" rel="noopener noreferrer"&gt;PageSpeed Insights&lt;/a&gt;, run the test, and read the field section when CrUX has eligible traffic. You get origin-level and, when sample size allows, URL-level p75 values for Core Web Vitals and supporting metrics, including experimental field Time to First Byte (TTFB) where Google publishes it. Lab Lighthouse numbers on the same screen are synthetic; field numbers are the 28-day rolling average described in &lt;a href="https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window" rel="noopener noreferrer"&gt;why your Core Web Vitals fix is not in CrUX yet&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  PageSpeed Insights lab data versus field data on the same URL
&lt;/h3&gt;

&lt;p&gt;PageSpeed Insights shows lab and field on one page, which is convenient and easy to misread. Lab data is a controlled Lighthouse run on demand: fixed device profile, emulated network, one load you triggered. Field data is CrUX: real Chrome users over roughly the past 28 days, blended across devices, cache states, and journeys. A green lab Performance score beside an amber field INP band is normal after a deploy, on a low-traffic URL, or when third-party scripts behave differently for real users than in the lab.&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;Lab (Lighthouse in PageSpeed Insights)&lt;/th&gt;
&lt;th&gt;Field (CrUX in PageSpeed Insights)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Source&lt;/td&gt;
&lt;td&gt;Synthetic test you run&lt;/td&gt;
&lt;td&gt;Opted-in Chrome sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clock&lt;/td&gt;
&lt;td&gt;Same day, every run&lt;/td&gt;
&lt;td&gt;28-day rolling average&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Deploy verification, before/after on priority URLs&lt;/td&gt;
&lt;td&gt;SEO reporting, client field status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Replaces CrUX Dashboard history?&lt;/td&gt;
&lt;td&gt;No (point-in-time unless you store runs)&lt;/td&gt;
&lt;td&gt;No (latest period only; use CrUX Vis or History API for trends)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Treat the two blocks as complementary, not competing scores. Lab answers whether the change shipped cleanly; field answers whether enough real users have lived with it for the aggregate to move. For a fuller split between synthetic schedules and real-user monitoring, see &lt;a href="https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance" rel="noopener noreferrer"&gt;synthetic versus real user monitoring&lt;/a&gt;. The CrUX Dashboard retirement does not remove that distinction; it removes one place that charted field history without opening PageSpeed Insights, CrUX Vis, or an API client.&lt;/p&gt;

&lt;h3&gt;
  
  
  Search Console Core Web Vitals report for SEO workflows
&lt;/h3&gt;

&lt;p&gt;Search Console's Core Web Vitals report groups URLs by status (Good, Needs improvement, Poor) at origin granularity for SEO workflows. It is slower to navigate than PageSpeed Insights for one URL, but account managers already live there for indexing and query data. Field metrics inherit the same CrUX eligibility rules: low-traffic pages may show origin-only data or gaps, which we will unpack further in a later post on missing CLS and INP in PageSpeed Insights.&lt;/p&gt;

&lt;h3&gt;
  
  
  Daily CrUX API for the latest field collection period
&lt;/h3&gt;

&lt;p&gt;The daily CrUX API (&lt;code&gt;queryRecord&lt;/code&gt; endpoint) returns the same latest collection period programmatically. Use it when you want to store today's field p75 beside yesterday's in your own database, or when a script needs TTFB, INP, or CLS without opening a browser. It refreshes roughly daily with a short processing lag; it does not return the long weekly history that the History API exposes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Need&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Granularity&lt;/th&gt;
&lt;th&gt;History&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Quick check on one URL&lt;/td&gt;
&lt;td&gt;PageSpeed Insights&lt;/td&gt;
&lt;td&gt;Origin + URL when eligible&lt;/td&gt;
&lt;td&gt;Latest 28-day period only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEO reporting by URL group&lt;/td&gt;
&lt;td&gt;Search Console CWV report&lt;/td&gt;
&lt;td&gt;Origin / URL groups&lt;/td&gt;
&lt;td&gt;Status trends, not full metric export&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automation for "today's field"&lt;/td&gt;
&lt;td&gt;CrUX API &lt;code&gt;queryRecord&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Origin or URL&lt;/td&gt;
&lt;td&gt;One collection period per call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Metric definitions and thresholds&lt;/td&gt;
&lt;td&gt;[Core Web Vitals guide](&lt;a href="https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026" rel="noopener noreferrer"&gt;https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;Reference&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  CrUX Vis and the CrUX History API: TTFB, INP, and CLS field history
&lt;/h2&gt;

&lt;p&gt;The old CrUX Dashboard's real value was trend lines: did INP drift after the tag manager change, did TTFB step up when the CDN rule shipped, did CLS calm down after the font fix? Current field snapshots in PageSpeed Insights answer "where are we this week?" History answers "when did it start moving?" Those are different tools now, and most teams need both answers on retainer accounts.&lt;/p&gt;

&lt;h3&gt;
  
  
  CrUX Vis for weekly field trend charts
&lt;/h3&gt;

&lt;p&gt;CrUX Vis is Google's direct replacement UI. Point it at an origin or URL and open the Core Web Vitals, Loading Performance, Interactivity, or Visual Stability pages. Each chart shows weekly distributions built from the CrUX History API, with each point covering the previous 28 days of Chrome experiences. Data updates on Mondays; you can see up to about 40 weeks where Google has samples. TTFB sits with loading metrics; INP with interactivity; CLS with visual stability. CrUX Vis is free, fast compared with the old Looker report, and enough for a quarterly business review on one domain. It still queries one origin or URL at a time, so it does not replace a spreadsheet of fifty client homepages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Query the CrUX History API for programmatic field history
&lt;/h3&gt;

&lt;p&gt;The CrUX History API (&lt;code&gt;queryHistoryRecord&lt;/code&gt;) powers CrUX Vis and any custom chart you build. With a Google Cloud API key you can pull weekly time series for origins and, critically, for URLs that qualify, which monthly BigQuery alone did not make easy for page-level history. Set &lt;code&gt;collectionPeriodCount&lt;/code&gt; up to 40 to match the Vis window. Pair History API calls with daily &lt;code&gt;queryRecord&lt;/code&gt; calls when you want both "what happened over the last six months" and "what changed since Tuesday's deploy." Google's &lt;a href="https://developer.chrome.com/docs/crux/guides/history-api" rel="noopener noreferrer"&gt;History API guide&lt;/a&gt; documents form factors, histogram densities, and collection period dates; put those dates on client slides so nobody mistakes a four-week blend for a live score.&lt;/p&gt;

&lt;h3&gt;
  
  
  BigQuery for long-archive Chrome UX Report analysis
&lt;/h3&gt;

&lt;p&gt;BigQuery (&lt;code&gt;chrome-ux-report&lt;/code&gt; public dataset) remains the long-archive option. Monthly tables still publish for deep analysis, competitive research, and custom Looker Studio reports on your own billing account. Load times are slower and the data is less current than the APIs, but you can join CrUX to analytics exports, slice by country or device tables, and keep years of origin history that exceed the History API window. Expect to pay for queries after the free tier unless you cache results. Some newer sub-metrics appear in APIs before every BigQuery table catches up; check &lt;a href="https://developer.chrome.com/docs/crux/release-notes" rel="noopener noreferrer"&gt;CrUX release notes&lt;/a&gt; when you standardise a metric set for client reports.&lt;/p&gt;

&lt;h2&gt;
  
  
  CrUX Vis, CrUX History API, or BigQuery: which fits your question?
&lt;/h2&gt;

&lt;p&gt;Teams often ask for one replacement tool. In practice you pick by question, budget, and who needs to open the chart. Use CrUX Vis when a technical lead or SEO owner needs a trustworthy trend for one priority origin or URL and nobody wants to maintain a script. It is the fastest honest answer to "show me INP over the last few months" in a client call. Use the History API when you need the same series inside your own dashboard, a weekly email, or a database next to deploy tags. Use BigQuery when the question needs custom SQL, long horizons, or joins that Google's UI will never ship. Use PageSpeed Insights or the daily API when the question is simply whether today's field p75 cleared the budget.&lt;/p&gt;

&lt;p&gt;None of these options shorten the 28-day rolling window. A fix shipped yesterday still ages into field aggregates gradually, which is why scheduled lab monitoring matters during the lag. &lt;a href="https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough" rel="noopener noreferrer"&gt;PageSpeed Insights versus automated monitoring&lt;/a&gt; covers that split for teams who outgrew manual checks; the CrUX retirement does not remove the need for a lab clock beside the field clock.&lt;/p&gt;

&lt;h2&gt;
  
  
  Third-party Chrome UX Report tools for agency portfolios
&lt;/h2&gt;

&lt;p&gt;Google is not the only place to chart CrUX. Several products wrap the History API or BigQuery with alerts, competitor views, and multi-URL boards. &lt;a href="https://treo.sh/" rel="noopener noreferrer"&gt;Treo&lt;/a&gt; is a common example for agencies that want CrUX-heavy field exploration and large URL lists without building pipes themselves. Field explorers and scheduled PageSpeed monitoring solve different jobs, and many teams use both. For how agencies shortlist monitoring tools on features and workflow fit, see &lt;a href="https://apogeewatcher.com/blog/comparing-pagespeed-monitoring-tools-features-agencies-need" rel="noopener noreferrer"&gt;comparing PageSpeed monitoring tools&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Apogee Watcher sits on the scheduled lab side of that split. We run PageSpeed Insights-backed tests across many sites on a cadence you set, store LCP, INP, CLS, FCP, and Total Blocking Time from lab runs, and show CrUX field numbers beside those results when Google returns them for the URL. We do not replace CrUX Vis for a six-month INP line chart on one domain, and we do not replicate BigQuery. We do give agency portfolios a repeatable before-and-after history on priority pages, budgets, and alerts while field data catches up, layered onto Search Console and the explorers you already use.&lt;/p&gt;

&lt;p&gt;Field pipelines also slip. Collection delays, eligibility changes, and processing lag still show up in client inboxes as "why is Search Console still amber?" The same 28-day rolling window explains part of that lag after a deploy; see &lt;a href="https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window" rel="noopener noreferrer"&gt;why your Core Web Vitals fix is not in CrUX yet&lt;/a&gt; for how to phrase timelines in client reports without blaming the wrong team.&lt;/p&gt;

&lt;h2&gt;
  
  
  What no free Chrome UX Report dashboard replaces after retirement
&lt;/h2&gt;

&lt;p&gt;Being precise about gaps prevents another bookmark rot cycle. No free Google UI reproduces every old CrUX Dashboard view in one place. CrUX Vis does not list forty client origins on one screen. PageSpeed Insights does not chart six months of TTFB without you opening each URL. Search Console does not export weekly p75 series for every template. BigQuery is powerful but not free at scale and not friendly for account managers. The History API is accurate but requires engineering time.&lt;/p&gt;

&lt;p&gt;Third-party tools close some of those holes with paid seats, URL limits, and their own refresh schedules. None of them remove CrUX eligibility rules: low-traffic pages still lack URL-level field data, desktop and phone still split, and rolling averages still trail deploys. The workable agency pattern we see is a small stack: CrUX Vis or a field explorer for deep history on hero URLs, Search Console for SEO status, scheduled lab monitoring for portfolio regression detection, and one sentence in the report that explains collection period dates. If nobody owns the threshold on a metric and nobody acts when it breaks, it should not be on the daily list, whether the chart came from Google or a vendor.&lt;/p&gt;

&lt;h2&gt;
  
  
  How agencies monitor Chrome UX Report field metrics across client sites
&lt;/h2&gt;

&lt;p&gt;A practical Monday workflow after the dashboard retirement:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;List priority origins and money URLs per client (home, pricing, signup, checkout, main templates). Match the list to URLs that actually receive Chrome traffic, not only the page engineering fixed in staging.&lt;/li&gt;
&lt;li&gt;Pin one field history view per key domain. CrUX Vis or a History API-backed explorer for quarterly reviews; note the collection period on the screenshot.&lt;/li&gt;
&lt;li&gt;Schedule lab tests on the same URLs. Use budgets so a deploy regression triggers before field data moves. Frequency guidance lives in &lt;a href="https://apogeewatcher.com/blog/how-to-schedule-pagespeed-monitoring-test-frequency-priority-portfolio" rel="noopener noreferrer"&gt;how to schedule PageSpeed monitoring&lt;/a&gt; if you are standardising cadence across accounts.&lt;/li&gt;
&lt;li&gt;Pull Search Console CWV status monthly for SEO owners. Treat it as a lagging group report, not a deploy gate.&lt;/li&gt;
&lt;li&gt;Reserve BigQuery or custom API jobs for investigations (country regressions, device splits, before/after studies), not for every account manager every week.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Apogee Watcher automates steps two and three for multi-site organisations: discovery, scheduled tests, field slices when available, alerts, and client-ready exports without maintaining fifty PageSpeed Insights bookmarks. Start with a &lt;a href="https://apogeewatcher.com/check" rel="noopener noreferrer"&gt;free domain check&lt;/a&gt; on one money URL if you want to see lab and field side by side before you add the portfolio, then expand the same URL list into budgets once the cadence feels right.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is the CrUX Dashboard still available?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google deprecated the shared CrUX Dashboard and turned off the CrUX Connector at the end of November 2025. You can copy the Looker Studio template and point it at your own BigQuery project, but the hosted connector most teams used no longer updates. CrUX Vis is Google's recommended first-party replacement for historical charts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where do I get field TTFB now that the dashboard is gone?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Check PageSpeed Insights field data for the latest rolling TTFB when Google publishes it for your origin or URL. For history, use CrUX Vis Loading Performance charts or query the CrUX History API for weekly TTFB series. BigQuery monthly tables remain available for long-range analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between the CrUX API and the CrUX History API?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The standard CrUX API endpoint (&lt;code&gt;queryRecord&lt;/code&gt;) returns the latest collection period, updated roughly daily. The History API endpoint (&lt;code&gt;queryHistoryRecord&lt;/code&gt;) returns up to about 40 weekly periods, each representing the previous 28 days of experiences. Use both when you want current status plus trend context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can PageSpeed Insights replace the CrUX Dashboard for client reporting?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageSpeed Insights replaces the "what is field data right now?" check for individual URLs. It does not replace multi-month trend boards or multi-site portfolios without repeated manual runs. Pair PageSpeed Insights with CrUX Vis or the History API for history, and with scheduled lab monitoring if you manage many sites.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is PageSpeed Insights lab data different from field data?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lab data is a synthetic Lighthouse run under controlled conditions. Field data is the Chrome UX Report: a rolling average of real Chrome users, usually about 28 days. Both can be correct on the same URL at the same time. Use lab for same-week deploy proof; use field (and CrUX Vis or the History API for trends) for SEO and client reporting. See &lt;a href="https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance" rel="noopener noreferrer"&gt;synthetic versus real user monitoring&lt;/a&gt; for how teams split those jobs after the CrUX Dashboard retirement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I still need lab monitoring if I have CrUX Vis?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes, when you ship often or manage client sites on different schedules. Field data is always a rolling average of real Chrome users, so it lags deploys. Lab monitoring proves the same-day change on priority URLs while CrUX catches up. See &lt;a href="https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance" rel="noopener noreferrer"&gt;synthetic versus real user monitoring&lt;/a&gt; for how to split responsibilities.&lt;/p&gt;




&lt;p&gt;Open the first client domain that still has a dead CrUX Dashboard link in the wiki. Run PageSpeed Insights on the homepage and note field LCP, INP, and CLS beside this week's lab run. Open CrUX Vis on the same origin and screenshot the INP or TTFB trend with the collection dates visible. One row in your tracker is enough: latest field, lab verification, history direction. If you manage many sites and want that row filled on a schedule without manual pastes, &lt;a href="https://apogeewatcher.com/" rel="noopener noreferrer"&gt;start a free trial of Apogee Watcher&lt;/a&gt; or run a &lt;a href="https://apogeewatcher.com/check" rel="noopener noreferrer"&gt;free PageSpeed check&lt;/a&gt; on the URL that pays the bills first.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.chrome.com/blog/crux-dashboard-deprecation" rel="noopener noreferrer"&gt;CrUX Dashboard deprecation&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.chrome.com/docs/crux/vis" rel="noopener noreferrer"&gt;CrUX Vis&lt;/a&gt; (Chrome UX Report)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.chrome.com/docs/crux/guides/history-api" rel="noopener noreferrer"&gt;How to use the CrUX History API&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.chrome.com/docs/crux/release-notes" rel="noopener noreferrer"&gt;Chrome UX Report release notes&lt;/a&gt; (Chrome for Developers)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pagespeed.web.dev/" rel="noopener noreferrer"&gt;PageSpeed Insights&lt;/a&gt; (Google)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://treo.sh/" rel="noopener noreferrer"&gt;Treo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026" rel="noopener noreferrer"&gt;What Are Core Web Vitals? A Practical Guide for 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough" rel="noopener noreferrer"&gt;PageSpeed Insights vs Automated Monitoring: When Manual Checks Aren't Enough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/when-to-use-synthetic-vs-real-user-monitoring-performance" rel="noopener noreferrer"&gt;When to Use Synthetic vs Real User Monitoring for Performance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/why-core-web-vitals-fix-not-in-crux-yet-28-day-window" rel="noopener noreferrer"&gt;Why Your Core Web Vitals Fix Isn't in CrUX Yet (28-Day Window)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/comparing-pagespeed-monitoring-tools-features-agencies-need" rel="noopener noreferrer"&gt;Comparing PageSpeed Monitoring Tools: Features Agencies Need&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>webperf</category>
      <category>seo</category>
    </item>
    <item>
      <title>AI Search Optimization: What to Monitor without a subscription</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Sun, 02 Aug 2026 20:35:47 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/ai-search-optimization-what-to-monitor-without-a-subscription-5bmj</link>
      <guid>https://dev.to/apogeewatcher/ai-search-optimization-what-to-monitor-without-a-subscription-5bmj</guid>
      <description>&lt;p&gt;Procurement wants a line item for "AI search." A vendor demo shows green citation bars for category prompts. Your team has not yet confirmed whether GPTBot can fetch pricing, docs, or product templates after last week's theme deployment. Buying the dashboard now answers one question and leaves the fetchability question unowned. AI search optimisation starts with signals you can check without a GEO subscription: bot policy, HTTP health, response time, and Core Web Vitals on the URLs buyers actually need. Agencies need a decision framework next: which layer needs a paid visibility platform, which layer you can run with tools you already use, and how PageSpeed monitoring for agencies covers the deterministic half without pretending to score ChatGPT mentions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two layers of AI search optimization (and which needs a subscription)
&lt;/h2&gt;

&lt;p&gt;Treat AI search work as two layers with different questions, tools, and failure modes. Mixing them on one slide produces arguments in week two when the homepage prompt chart looks fine and checkout times out for crawlers. Name the layer before you buy software, or the wrong team owns the wrong failure.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Question&lt;/th&gt;
&lt;th&gt;Tool type&lt;/th&gt;
&lt;th&gt;Watcher role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Probabilistic&lt;/td&gt;
&lt;td&gt;Are we cited for buyer-context prompts?&lt;/td&gt;
&lt;td&gt;GEO / AI visibility SaaS, prompt trackers, manual ChatGPT or Perplexity checks&lt;/td&gt;
&lt;td&gt;None; we do not score citations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deterministic&lt;/td&gt;
&lt;td&gt;Can bots fetch and render priority URLs fast enough?&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;robots.txt&lt;/code&gt; review, crawl or fetch checks, scheduled PageSpeed / Lighthouse, regression alerts&lt;/td&gt;
&lt;td&gt;Core product: portfolio schedules, budgets, alerts, client reports&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The probabilistic layer answers mention and citation trends for a fixed prompt set. Outputs are directional: useful for trends, weak as courtroom proof. Models drift, phrasing changes answers, and a competitor screenshot does not prove your pricing page is reachable today. Use GEO platforms when the retainer includes citation reporting and someone owns a prompt library with buyer context. Layer those tools beside technical monitoring. Do not replace crawl and speed work with prompt scores alone.&lt;/p&gt;

&lt;p&gt;The deterministic layer answers access and speed on URLs you choose. Either the response completes with parseable content, or it does not. That half needs no GEO subscription, because it reuses performance monitoring, crawl hygiene, and reporting rhythms agencies already sell. &lt;a href="https://apogeewatcher.com/blog/ai-search-visibility-agencies-measure-first" rel="noopener noreferrer"&gt;Are We Visible in ChatGPT? What Agencies Can Measure First&lt;/a&gt; frames the client conversation. &lt;a href="https://apogeewatcher.com/blog/gptbot-performance-monitor-checkout-not-ai-visibility" rel="noopener noreferrer"&gt;Monitor GPTBot performance on checkout, not AI visibility alone&lt;/a&gt; covers high-intent URL failures. The job here is deciding what to measure before you sign a visibility contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI search optimization means before you buy a visibility tool
&lt;/h2&gt;

&lt;p&gt;Clients say "AI search optimisation" and often mean three different jobs: appear in ChatGPT or Perplexity answers, stay fetchable for AI crawlers, and protect clicks when Google AI Overviews answer without a visit. Those jobs share a site, but they do not share a measurement stack. Clarifying which job is in scope keeps procurement from funding citation charts while fetchability stays unowned.&lt;/p&gt;

&lt;p&gt;Without a subscription to a visibility platform, you can still do useful AI search optimisation work:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Decide bot policy and write it down (allow, block, or mixed by user-agent).&lt;/li&gt;
&lt;li&gt;Build a priority URL list by business intent, not sitemap size.&lt;/li&gt;
&lt;li&gt;Confirm public routes return clean status codes and sane redirect chains.&lt;/li&gt;
&lt;li&gt;Baseline lab Core Web Vitals and response time on those URLs, mobile and desktop.&lt;/li&gt;
&lt;li&gt;Schedule recurring tests so theme, app, and CDN changes do not erase the baseline overnight.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;None of those steps requires a GEO licence. They require scope, ownership, and a habit of checking the same URLs after releases. Call it PageSpeed monitoring for agencies applied to retrieval risk, not a new product category. &lt;a href="https://apogeewatcher.com/blog/why-ai-crawlers-need-fast-crawlable-pages-and-how-to-stay-ready" rel="noopener noreferrer"&gt;Why AI Crawlers Need Fast, Crawlable Pages&lt;/a&gt; explains why fetchability still comes before citation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What agencies can monitor for AI search without a GEO subscription
&lt;/h2&gt;

&lt;p&gt;Start with artefacts you can open this week: production &lt;code&gt;robots.txt&lt;/code&gt;, a ten-to-twenty URL inventory, PageSpeed Insights or Lighthouse on mobile and desktop, and optional server logs filtered for AI user-agents. The goal is a baseline you can defend on a client call, not a vanity "AI score." Save dates, devices, and owners in the client file so the next deploy has something to compare against. If the file only holds a homepage screenshot from last month, you are still guessing after the next theme release.&lt;/p&gt;

&lt;h3&gt;
  
  
  GPTBot, robots.txt, and AI crawler access checks
&lt;/h3&gt;

&lt;p&gt;OpenAI documents &lt;a href="https://platform.openai.com/docs/gptbot" rel="noopener noreferrer"&gt;GPTBot&lt;/a&gt; in &lt;code&gt;robots.txt&lt;/code&gt;, and Google publishes &lt;a href="https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers" rel="noopener noreferrer"&gt;crawler guidance&lt;/a&gt; for Search and related products. Fetch production &lt;code&gt;robots.txt&lt;/code&gt; before the visibility debate. Five minutes here prevents expensive arguments later.&lt;/p&gt;

&lt;p&gt;Agency checklist without a visibility vendor:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Fetch production &lt;code&gt;robots.txt&lt;/code&gt; and note &lt;code&gt;Disallow&lt;/code&gt; rules for GPTBot, Google-Extended, and other AI user-agents the client names.&lt;/li&gt;
&lt;li&gt;Confirm public marketing, docs, and pricing paths are allowed unless the client explicitly opts out of training or retrieval.&lt;/li&gt;
&lt;li&gt;Document opt-out decisions in writing. Blocking GPTBot is a valid policy choice; claiming the site is optimised for AI while disallowing crawlers is not.&lt;/li&gt;
&lt;li&gt;Re-check after CMS or SEO plugin updates. All-in-one SEO tools sometimes ship aggressive bot blocks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keep a one-page bot policy per client next to the URL inventory. Account managers need a clear answer on whether the retainer includes crawler access review or only performance monitoring. When the client changes CMS, SEO plugins, or hosting, update both documents the same week.&lt;/p&gt;

&lt;h3&gt;
  
  
  Priority URLs, HTTP health, and response time for AI crawlers
&lt;/h3&gt;

&lt;p&gt;Homepage-only checks hide the routes AI systems retrieve when someone asks about plans, SKUs, or documentation. Build the list by business intent, then test that list on a schedule instead of hoping a sitemap crawl catches money pages. Ten to twenty URLs with owners beat a full crawl nobody reads.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pricing and plan comparison pages&lt;/li&gt;
&lt;li&gt;Product detail and category templates for ecommerce&lt;/li&gt;
&lt;li&gt;Documentation and help centre articles used in sales&lt;/li&gt;
&lt;li&gt;Checkout and cart only where unauthenticated tests are allowed&lt;/li&gt;
&lt;li&gt;Campaign landers that carry current offers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For each URL, record HTTP status, redirect hop count, and lab response time on mobile and desktop. Intermittent 503s and multi-second document loads are fetchability failures even when a GEO chart still looks green. Ecommerce teams should prioritise the funnel logic in &lt;a href="https://apogeewatcher.com/blog/ecommerce-performance-monitoring-what-metrics-matter" rel="noopener noreferrer"&gt;Performance Monitoring for E-Commerce: What Metrics Matter Most&lt;/a&gt;; purchase-intent routes fail quietly when monitoring stops at the marketing homepage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Web Vitals on money pages (lab baselines)
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026" rel="noopener noreferrer"&gt;Core Web Vitals&lt;/a&gt; are not citation factors. Google’s AI Overviews guidance stresses content quality and relevance; it does not list LCP or INP as mention levers. Lab LCP, INP, and CLS still matter. Slow or unstable pages fail the step before citation: fetch and parse under crawler timeouts.&lt;/p&gt;

&lt;p&gt;Run mobile and desktop strategies on the same priority list. Crawlers often behave like lightweight clients, so a desktop-only pass hides failures phones and bots both see. Track vitals as indicators of parseability and stability. Put regressions on docs or checkout in the client report beside any future GEO chart. Pair device budgets the same way you would for traditional SEO work in &lt;a href="https://apogeewatcher.com/blog/mobile-vs-desktop-core-web-vitals-monitoring-both" rel="noopener noreferrer"&gt;Mobile vs Desktop Core Web Vitals&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript-rendered pages and what AI crawlers may miss
&lt;/h3&gt;

&lt;p&gt;Many AI crawlers do not execute a full browser. They rely on initial HTML and simplified rendering. If docs or product UI mount copy client-side only, a crawler may see an empty shell while Chrome looks fine. That gap shows up in sales calls when stakeholders insist the page "looks ready" in a manual visit.&lt;/p&gt;

&lt;p&gt;Lab tests through PageSpeed Insights or Lighthouse do not perfectly simulate GPTBot. They still flag render-blocking scripts, long tasks, and late LCP elements that correlate with fetch problems. Pair lab schedules with occasional log review for AI user-agents so you can see which URLs they request and whether status codes stay clean. Translate "AI-ready" into operational requirements: critical copy in HTML, sane response times, stable layout, and monitoring on the URLs where answers should come from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why generic AI visibility prompts mislead agency buyers
&lt;/h2&gt;

&lt;p&gt;Visibility demos love tidy graphs for prompts such as "best pagespeed tool 2026." Those graphs tell you almost nothing about whether you appear when a technical lead asks how to monitor forty Shopify stores after a theme deployment. Generic category prompts produce neat before-and-after slides with weak buyer context. Agency-real questions name the vertical, the stack, and the trigger event.&lt;/p&gt;

&lt;p&gt;If you later buy a GEO platform, insist the prompt library matches how clients buy, not how vendors demo. Until then, a competitor's category-prompt screenshot is not proof your deterministic layer is healthy. Fix fetchability on named URLs first. Debate prompt design afterwards with someone who understands the client's ICP.&lt;/p&gt;

&lt;h2&gt;
  
  
  PageSpeed monitoring for agencies: free check to scheduled tests
&lt;/h2&gt;

&lt;p&gt;One-off PageSpeed Insights tabs do not survive a release train. Agencies managing multiple clients need history, comparison, and alert routing on the same URLs every week. That matches the operational model in &lt;a href="https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough" rel="noopener noreferrer"&gt;PageSpeed Insights vs automated monitoring&lt;/a&gt;: scheduled lab runs, stored results, budgets, and digests when thresholds breach.&lt;/p&gt;

&lt;p&gt;A practical upgrade path without jumping straight to GEO SaaS:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Spot-check five priority URLs in PageSpeed Insights on mobile and desktop, then save the dates and scores in the client file.&lt;/li&gt;
&lt;li&gt;Run the public &lt;a href="https://apogeewatcher.com/check" rel="noopener noreferrer"&gt;free domain PageSpeed check&lt;/a&gt;, or follow the multi-page workflow in &lt;a href="https://apogeewatcher.com/blog/free-domain-pagespeed-check-multi-page-reports" rel="noopener noreferrer"&gt;Free Domain PageSpeed Check: Multi-Page Performance Reports&lt;/a&gt;, for a client-ready snapshot before schedules exist.&lt;/li&gt;
&lt;li&gt;Move the same URL list into recurring tests with budgets and alerts so theme deployments have an owner when LCP or response time drifts.&lt;/li&gt;
&lt;li&gt;Add citation analytics only when the retainer includes prompt-level reporting and deterministic baselines are not the obvious bottleneck.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Apogee Watcher is built for step three: organisations per agency, sites per client, discovery and manual URL lists, mobile and desktop strategies, and email when lab metrics cross budgets. We do not score ChatGPT visibility. We tell you when priority URLs slow down, error out, or drift on vitals after the deployment that might affect fetchability. Setup steps live in &lt;a href="https://apogeewatcher.com/blog/getting-started-apogee-watcher-step-by-step-setup-guide" rel="noopener noreferrer"&gt;Getting Started with Apogee Watcher&lt;/a&gt;. For feature comparisons across monitoring vendors, see &lt;a href="https://apogeewatcher.com/blog/comparing-pagespeed-monitoring-tools-features-agencies-need" rel="noopener noreferrer"&gt;Comparing PageSpeed Monitoring Tools: Features Agencies Need&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  When a paid AI visibility platform is worth buying
&lt;/h2&gt;

&lt;p&gt;Add a dedicated GEO or AI visibility platform when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leadership expects monthly citation charts in QBRs.&lt;/li&gt;
&lt;li&gt;Content strategy targets LLM mentions for specific buyer personas.&lt;/li&gt;
&lt;li&gt;Someone on the account maintains contextual prompts rather than generic category queries alone.&lt;/li&gt;
&lt;li&gt;Deterministic baselines are already green enough that slow URLs are not the obvious bottleneck.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Defer procurement when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The client has not agreed bot policy or priority URLs.&lt;/li&gt;
&lt;li&gt;Homepage-only monitoring hides checkout and docs problems.&lt;/li&gt;
&lt;li&gt;The ask is purely "make us show up in ChatGPT" with no content or technical owner.&lt;/li&gt;
&lt;li&gt;You have not yet run a free or scheduled performance baseline on money URLs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The sequence protects credibility: measure what you can fix without a visibility subscription, then buy citation analytics when scope and staffing justify it. Layer performance monitoring beside GEO tools; do not treat prompt scores as a substitute for fetch health on money URLs. A green citation chart next to a red checkout lab row is still an incomplete AI search story.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do we need an AI visibility subscription for AI search optimization?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not on day one. You can audit bot policy, build a priority URL list, baseline lab Core Web Vitals and response time, and schedule monitoring without a GEO licence. Add a visibility platform when citation reporting is contracted and someone owns buyer-context prompts. Until then, the deterministic checklist is enough to keep the engagement honest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What should agencies monitor for AI search without GEO tools?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Monitor crawler access in &lt;code&gt;robots.txt&lt;/code&gt;, HTTP status and redirects on priority URLs, lab LCP, INP, CLS, and response time on mobile and desktop, and regressions after deployments. Those signals prove fetchability. They do not prove citation, so keep both layers labelled when you report to clients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can green Core Web Vitals guarantee ChatGPT citations?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Green lab vitals indicate priority URLs are likely fetchable and parseable under test conditions. Citation depends on content, authority, relevance, and model behaviour. Treat speed and stability as necessary technical hygiene, not a mention guarantee.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is PageSpeed monitoring for agencies different from an AI visibility platform?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PageSpeed monitoring for agencies is the operational system for the deterministic layer: schedules, history, budgets, and alerts across client sites. An AI visibility platform tracks prompt-level mentions. Use monitoring for fetch health. Use GEO for citation trends when the retainer requires both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should we block GPTBot while we decide on a GEO vendor?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Blocking GPTBot is a policy decision, not a procurement shortcut. Document the choice with the client. If you block training or retrieval crawlers, do not claim the site is optimised for those products. Align monitoring with the routes you intend to keep public and reachable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many URLs should we cover before a visibility demo?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start with ten to twenty priority URLs per client: pricing, key product or service templates, docs paths that support sales, and checkout where policy allows. Expand when alert triage stays manageable. A demo that only covers the homepage is not a fetchability baseline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can Apogee Watcher replace a GEO platform?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Watcher schedules PageSpeed lab tests, tracks vitals and budgets, and alerts on regressions across client sites. GEO platforms track prompt-level citations. Use both when the retainer covers technical performance and citation reporting. Use Watcher alone when the immediate risk is slow or blocked money URLs.&lt;/p&gt;




&lt;p&gt;When leadership asks for AI search optimisation, answer with layers: what a visibility subscription can track over time, and what you can prove about fetchability and speed on named URLs without that subscription. Start with bot policy, priority URLs, and scheduled PageSpeed baselines. Add GEO analytics when content strategy and staffing support buyer-context prompts, not when a demo chart arrives before the first deterministic readout.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://apogeewatcher.com/sign-up" rel="noopener noreferrer"&gt;Start a free Apogee Watcher account&lt;/a&gt; to schedule mobile and desktop tests with vitals budgets across client sites, or run a &lt;a href="https://apogeewatcher.com/check" rel="noopener noreferrer"&gt;free domain PageSpeed check&lt;/a&gt; before the first AI visibility procurement call.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://platform.openai.com/docs/gptbot" rel="noopener noreferrer"&gt;GPTBot&lt;/a&gt; (OpenAI)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developers.google.com/search/docs/crawling-indexing/overview-google-crawlers" rel="noopener noreferrer"&gt;Overview of Google crawlers&lt;/a&gt; (Google Search Central)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://pagespeed.web.dev/" rel="noopener noreferrer"&gt;PageSpeed Insights&lt;/a&gt; (Google)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/ai-search-visibility-agencies-measure-first" rel="noopener noreferrer"&gt;Are We Visible in ChatGPT? What Agencies Can Measure First&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/gptbot-performance-monitor-checkout-not-ai-visibility" rel="noopener noreferrer"&gt;Monitor GPTBot performance on checkout, not AI visibility alone&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/why-ai-crawlers-need-fast-crawlable-pages-and-how-to-stay-ready" rel="noopener noreferrer"&gt;Why AI Crawlers Need Fast, Crawlable Pages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough" rel="noopener noreferrer"&gt;PageSpeed Insights vs Automated Monitoring: When Manual Checks Aren't Enough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/free-domain-pagespeed-check-multi-page-reports" rel="noopener noreferrer"&gt;Free Domain PageSpeed Check: Multi-Page Performance Reports&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/getting-started-apogee-watcher-step-by-step-setup-guide" rel="noopener noreferrer"&gt;Getting Started with Apogee Watcher&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/comparing-pagespeed-monitoring-tools-features-agencies-need" rel="noopener noreferrer"&gt;Comparing PageSpeed Monitoring Tools: Features Agencies Need&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/what-are-core-web-vitals-a-practical-guide-for-2026" rel="noopener noreferrer"&gt;What Are Core Web Vitals? A Practical Guide for 2026&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/mobile-vs-desktop-core-web-vitals-monitoring-both" rel="noopener noreferrer"&gt;Mobile vs Desktop Core Web Vitals: Why You Need to Monitor Both&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/ecommerce-performance-monitoring-what-metrics-matter" rel="noopener noreferrer"&gt;Performance Monitoring for E-Commerce: What Metrics Matter Most&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>webperf</category>
      <category>seo</category>
    </item>
    <item>
      <title>Lighthouse’s New Baseline Features Audit: What Developers Should Do With It</title>
      <dc:creator>Apogee Watcher</dc:creator>
      <pubDate>Sat, 01 Aug 2026 12:54:59 +0000</pubDate>
      <link>https://dev.to/apogeewatcher/lighthouses-new-baseline-features-audit-what-developers-should-do-with-it-18n0</link>
      <guid>https://dev.to/apogeewatcher/lighthouses-new-baseline-features-audit-what-developers-should-do-with-it-18n0</guid>
      <description>&lt;p&gt;You ship a layout that looks clean in Chrome. A week later Safari users report a broken filter panel, or Firefox drops a CSS feature your design system assumed was safe. The Performance score on PageSpeed Insights still looks fine, because speed and interoperability are different questions. Until recently, Lighthouse did not give you a single Best Practices view of which web platform features your page (and its vendors) actually use, and where those features sit on the Baseline timeline.&lt;/p&gt;

&lt;p&gt;Chrome’s &lt;a href="https://developer.chrome.com/docs/lighthouse/best-practices/baseline-features" rel="noopener noreferrer"&gt;Baseline Features&lt;/a&gt; audit now sits in Lighthouse’s Best Practices category as a diagnostic. It detects web feature IDs from the &lt;code&gt;web-features&lt;/code&gt; package, reports each feature’s Baseline status (Limited availability, Newly available, or Widely available), links to the matching entry on &lt;a href="https://webstatus.dev" rel="noopener noreferrer"&gt;webstatus.dev&lt;/a&gt;, and points at one place in the page’s source where that feature showed up. It also covers features used in third-party scripts and active extensions. What follows is a practical read of that report for developers and agencies: what the statuses mean, how to triage Limited features, when Newly available is acceptable, and how scheduled PageSpeed monitoring fits beside a one-off DevTools run.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Lighthouse Baseline Features audit reports
&lt;/h2&gt;

&lt;p&gt;The audit is diagnostic. Chrome’s docs describe it as information for developers, not as a single pass/fail gate that behaves like a broken HTTPS check. Treat the output as an inventory with risk labels, not as a new Core Web Vitals threshold. If you only chase the green Performance dial, you can still ship Limited features that fail for a meaningful share of clients on Safari or Firefox.&lt;/p&gt;

&lt;p&gt;For each detected feature you typically get three artefacts. The web feature ID (from the &lt;code&gt;web-features&lt;/code&gt; package) links through to &lt;a href="https://webstatus.dev" rel="noopener noreferrer"&gt;webstatus.dev&lt;/a&gt; so you can read support notes without leaving the report. The Baseline status tells you how far that feature has progressed through the WebDX Baseline model described on &lt;a href="https://web.dev/baseline" rel="noopener noreferrer"&gt;web.dev’s Baseline overview&lt;/a&gt;. A source location shows one occurrence in the site’s code or in loaded scripts, which is enough to open a ticket even when the same feature appears many times on the page.&lt;/p&gt;

&lt;p&gt;Third-party coverage matters as much as first-party CSS. Tag managers, chat widgets, and personalisation scripts often pull newer APIs than your own theme ever would. The same pattern we cover in &lt;a href="https://apogeewatcher.com/blog/third-party-scripts-performance-worst-offenders" rel="noopener noreferrer"&gt;third-party scripts and performance&lt;/a&gt; applies here: the vendor controls when their script updates, and you still answer the support ticket when a checkout filter breaks. Extensions loaded in the browser you used for the audit can also appear, so run a clean profile when you need a list you can show a client.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Widely available, Newly available, and Limited availability mean for web platform Baseline
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://web.dev/baseline" rel="noopener noreferrer"&gt;Baseline&lt;/a&gt; answers a different question from “does Chrome support this?” Limited availability means the feature is not yet interoperable across the core browser set (desktop and mobile engines in the Baseline definition). Newly available means it has become interoperable across those core browsers. Widely available means roughly thirty months have passed since that Newly available date, which web.dev treats as a practical “safe for most sites” line, while still reminding teams that audience data can justify earlier or later adoption.&lt;/p&gt;

&lt;p&gt;Use those labels as triage, not as hard law for every project. Widely available is the default green light for marketing sites and agency retainers where support tickets are expensive. Newly available is fine when you control progressive enhancement, have analytics that show the relevant engines are already current, or are shipping an internal tool with a known browser policy. Limited availability needs an explicit decision: polyfill or progressive enhancement, feature-detect and degrade, remove the usage, or accept documented risk with the client. &lt;a href="https://web.dev/articles/baseline-and-polyfills" rel="noopener noreferrer"&gt;web.dev’s guidance on Baseline and polyfills&lt;/a&gt; is clear that polyfills do not move a feature out of Limited in Baseline messaging; native interoperability is what the status tracks.&lt;/p&gt;

&lt;p&gt;A practical agency rule of thumb keeps reviews short. Treat Limited on a money URL as a release blocker until someone names the fallback. Treat Newly available as a design-system discussion, not a silent ship in the theme pull request. Treat Widely available as “no special story required,” unless your analytics show a long tail of very old browsers that still matter for that client.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to triage Lighthouse Baseline Features findings on a live page
&lt;/h2&gt;

&lt;p&gt;Open the Best Practices section after a Lighthouse or PageSpeed Insights run and collect every Limited row first. Ignore Widely available noise until Limited and Newly available are sorted. For each Limited feature, answer three questions in the ticket: first-party or third-party, which URL template, and what the user loses if the feature is missing. Then decide the fix class: remove, replace with a Widely available equivalent, progressive enhancement, or vendor escalation.&lt;/p&gt;

&lt;h3&gt;
  
  
  First-party CSS and JavaScript
&lt;/h3&gt;

&lt;p&gt;When the source points at your stylesheet or application bundle, ownership is clear. Prefer a Widely available pattern when the visual result is equivalent, even if the newer syntax looks cleaner in Chrome DevTools. If the feature is Newly available and the design needs it, wrap behaviour behind feature detection and keep a usable fallback for engines that lag. Document the choice in the pull request so the next release does not “simplify” the fallback away during a tidy-up.&lt;/p&gt;

&lt;h3&gt;
  
  
  Third-party scripts and tag managers
&lt;/h3&gt;

&lt;p&gt;When the occurrence sits in a vendor file or a Google Tag Manager-injected script, do not burn a sprint rewriting their minified output. Raise the Limited list with the vendor or the marketing owner of that tag, ask whether a widely supported build exists, and fence the tag behind consent or load rules if it is optional on the URL. If the vendor cannot commit to a timeline, treat the tag like any other performance offender: keep it off checkout and other money paths until the risk is accepted in writing by the account lead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Extensions and noisy environments
&lt;/h3&gt;

&lt;p&gt;Active extensions can inject features into the page under audit and pollute the inventory. For client reports, use a clean Chromium profile or an automated lab environment without personal extensions. Otherwise you will spend a call explaining why a password-manager API appeared on a retail homepage that never shipped that code.&lt;/p&gt;

&lt;h2&gt;
  
  
  When is Baseline Newly available acceptable on client sites?
&lt;/h2&gt;

&lt;p&gt;Newly available is not a failure. It means interoperability across the core set has only recently landed, so older minor versions and slow updaters may still miss it. For a consumer ecommerce site with a long mobile Safari tail, wait for Widely available or ship with a tested fallback. For a SaaS app where you already require current Chrome and Firefox, Newly available can be an intentional choice written into the browser support policy.&lt;/p&gt;

&lt;p&gt;Decide with audience data, not with a Chrome-only staging machine. If you lack analytics, default to Widely available for public marketing pages and reserve Newly available for progressive enhancement that still works when the feature is missing. Record the decision in the ticket or design-system note so account managers do not treat every Newly available row as a red flag in the monthly review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lighthouse Best Practices versus Performance scores and Core Web Vitals
&lt;/h2&gt;

&lt;p&gt;The Baseline Features audit lives under Best Practices. It does not replace Largest Contentful Paint, Interaction to Next Paint, or Cumulative Layout Shift, and it does not redefine how the lab Performance score is weighted. A page can score well on Performance while listing Limited features, or fail Core Web Vitals while using only Widely available APIs. Keep those dashboards separate in client language: speed budgets on one slide, interoperability findings on another.&lt;/p&gt;

&lt;p&gt;If your team still pastes a single PageSpeed Insights run into Slack and calls the week done, the Baseline list will go stale the same way scores do. We covered that failure mode in &lt;a href="https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough" rel="noopener noreferrer"&gt;PageSpeed Insights versus automated monitoring&lt;/a&gt;. Coding agents can also run Lighthouse for Best Practices in DevTools, which helps for a local fix but not for portfolio history. Pair this audit with the workflow in &lt;a href="https://apogeewatcher.com/blog/lighthouse-audits-ai-agents-chrome-devtools" rel="noopener noreferrer"&gt;Automate Lighthouse audits with AI agents&lt;/a&gt; when an engineer wants a one-shot pass, then put the URL back on a schedule so the next tag change does not silently reintroduce Limited features.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to monitor Baseline Features after a deploy with PageSpeed schedules
&lt;/h2&gt;

&lt;p&gt;One DevTools run proves what shipped today, but it does not prove the marketing site still looks the same after the next plugin update. For agencies, fold Baseline triage into the same schedule you already use for Core Web Vitals: priority URLs, mobile and desktop where it matters, and a named owner when Limited rows appear after a release. The &lt;a href="https://apogeewatcher.com/blog/core-web-vitals-monitoring-checklist-for-agencies" rel="noopener noreferrer"&gt;Core Web Vitals monitoring checklist for agencies&lt;/a&gt; is a useful starting list; add a short Best Practices / Baseline step on money templates after theme, tag, or design-system changes.&lt;/p&gt;

&lt;p&gt;Apogee Watcher schedules PageSpeed Insights-backed lab runs across client sites, stores history, and alerts when budgets regress. Best Practices diagnostics, including Baseline Features when the Lighthouse version behind your PageSpeed Insights run includes them, appear in those lab reports as the PageSpeed Insights and Lighthouse versions catch up. Be honest about rollout lag: public PageSpeed Insights and local Lighthouse can ship audits on different clocks. Confirm the Baseline Features section appears on a fresh run before you promise clients a weekly Baseline comparison. Where it does appear, use Watcher for multi-site schedules and regression alerts; use DevTools for deep triage of a single Limited feature. Layer monitoring onto the stack you already have. Do not remove vendor real user monitoring or continuous integration solely to read Baseline statuses.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to tell clients about web platform Baseline and Lighthouse Best Practices
&lt;/h2&gt;

&lt;p&gt;Keep the retainer wording short so SEO and engineering stay aligned.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Baseline is WebDX’s shared language for how far a web platform feature has progressed across core browsers: Limited, Newly available, Widely available.&lt;/li&gt;
&lt;li&gt;Lighthouse’s Baseline Features audit lists features detected on the page (including many third-party scripts), with links to webstatus.dev and a source hint.&lt;/li&gt;
&lt;li&gt;Limited on a money URL needs an owner and a fallback plan before go-live. Newly available needs an audience check. Widely available is the usual default for public sites.&lt;/li&gt;
&lt;li&gt;Performance scores and Core Web Vitals still answer speed and interaction quality. Baseline answers interoperability risk.&lt;/li&gt;
&lt;li&gt;Done means Limited rows on priority URLs are cleared or accepted in writing, and scheduled lab runs still catch regressions after deploys.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avoid inventing a “Baseline score” Google has not defined as a ranking factor. Report the inventory and the decisions you took on Limited rows. That is enough for most procurement conversations and quarterly client reviews.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the Lighthouse Baseline Features audit?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is a Best Practices diagnostic in Lighthouse that lists web platform features detected on the page, each with a Baseline status (Limited availability, Newly available, or Widely available), a link to webstatus.dev, and a source location. Chrome documents it under &lt;a href="https://developer.chrome.com/docs/lighthouse/best-practices/baseline-features" rel="noopener noreferrer"&gt;Baseline Features&lt;/a&gt;. It also lists features from third-party scripts and active extensions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Baseline Newly available mean I should not ship the feature?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Newly available means the feature is interoperable across the core browser set but has not yet reached the Widely available (about thirty months) line. Ship it when progressive enhancement or your audience data supports it. Prefer Widely available defaults for public marketing sites with unknown long tails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Will Limited availability features lower my PageSpeed Insights Performance score?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not automatically. Baseline Features is a Best Practices diagnostic about interoperability, not a Performance metric like Largest Contentful Paint or Total Blocking Time. Fix Limited features for user risk and support cost, not because you expect the Performance dial alone to move.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do third-party scripts show up in the Baseline Features audit?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Yes. Chrome’s documentation states the audit reports web features used in third-party scripts and extensions. That is often where Limited findings appear even when your own theme is conservative. Expect chat widgets, A/B tools, and tag-manager containers to contribute rows you did not author.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does Apogee Watcher replace a manual Baseline Features review?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. Watcher runs scheduled lab tests and keeps portfolio history, budgets, and alerts so regressions after deploys are visible across many sites. Use DevTools or a single PageSpeed Insights report to triage a specific Limited feature, then keep the URL on a schedule so the next tag or theme change cannot quietly reintroduce it. Confirm your lab stack’s Lighthouse version includes the audit before you sell weekly Baseline reporting.&lt;/p&gt;




&lt;p&gt;Pick one money URL (homepage, product template, or checkout). Run Lighthouse in a clean Chrome profile, open Best Practices, and export every Limited and Newly available row into a short table: feature ID, status, first-party or third-party, owner, decision. Fix or fence the Limited items that affect that URL, then put the same URL on a Watcher or PageSpeed schedule so the next deploy still gets a lab history. Baseline Features closes an interoperability gap Lighthouse now names for you. Scheduled monitoring still closes the portfolio gap agencies own.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://developer.chrome.com/docs/lighthouse/best-practices/baseline-features" rel="noopener noreferrer"&gt;Baseline Features (Lighthouse Best Practices)&lt;/a&gt; — Chrome for Developers&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://webstatus.dev" rel="noopener noreferrer"&gt;webstatus.dev&lt;/a&gt; — Web Platform Dashboard / feature status&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://web.dev/baseline" rel="noopener noreferrer"&gt;Baseline&lt;/a&gt; — web.dev overview&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://web.dev/articles/baseline-and-polyfills" rel="noopener noreferrer"&gt;How to think about Baseline and polyfills&lt;/a&gt; — web.dev&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/third-party-scripts-performance-worst-offenders" rel="noopener noreferrer"&gt;Third-Party Scripts and Performance: How to Identify and Fix the Worst Offenders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/pagespeed-insights-vs-automated-monitoring-when-manual-checks-arent-enough" rel="noopener noreferrer"&gt;PageSpeed Insights vs Automated Monitoring: When Manual Checks Aren't Enough&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/lighthouse-audits-ai-agents-chrome-devtools" rel="noopener noreferrer"&gt;Automate Lighthouse Audits with AI Agents: What Chrome DevTools Means for Agencies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://apogeewatcher.com/blog/core-web-vitals-monitoring-checklist-for-agencies" rel="noopener noreferrer"&gt;Core Web Vitals Monitoring Checklist for Agencies&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>webperf</category>
      <category>seo</category>
    </item>
  </channel>
</rss>
