#408 by GitHub stars

addyosmani/web-quality-skills

Agent Skills for optimizing web quality based on Lighthouse and Core Web Vitals.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

skills/accessibility/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Network or broad shell

afa8da942115 → afa8da942115

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → afa8da942115

No earlier version was observed for comparison.

Compare on GitHub

skills/best-practices/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

afa8da942115 → afa8da942115

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → afa8da942115

No earlier version was observed for comparison.

Compare on GitHub

skills/core-web-vitals/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

afa8da942115 → afa8da942115

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → afa8da942115

No earlier version was observed for comparison.

Compare on GitHub

skills/performance/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

afa8da942115 → afa8da942115

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → afa8da942115

No earlier version was observed for comparison.

Compare on GitHub

skills/seo/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

afa8da942115 → afa8da942115

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → afa8da942115

No earlier version was observed for comparison.

Compare on GitHub

skills/web-quality-audit/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

afa8da942115 → afa8da942115

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → afa8da942115

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit afa8da942115f2961fdbfa80807ea0b232ff6c00

git clone --filter=blob:none --no-checkout https://github.com/addyosmani/web-quality-skills.git .hotskills/addyosmani-web-quality-skills && git -C .hotskills/addyosmani-web-quality-skills checkout --detach afa8da942115f2961fdbfa80807ea0b232ff6c00 # Copy each selected skill directory from .hotskills/addyosmani-web-quality-skills into .claude/skills/<skill-name>/
git clone --filter=blob:none --no-checkout https://github.com/addyosmani/web-quality-skills.git .hotskills/addyosmani-web-quality-skills && git -C .hotskills/addyosmani-web-quality-skills checkout --detach afa8da942115f2961fdbfa80807ea0b232ff6c00 # Copy each selected skill directory from .hotskills/addyosmani-web-quality-skills into .agents/skills/<skill-name>/
git clone --filter=blob:none --no-checkout https://github.com/addyosmani/web-quality-skills.git .hotskills/addyosmani-web-quality-skills && git -C .hotskills/addyosmani-web-quality-skills checkout --detach afa8da942115f2961fdbfa80807ea0b232ff6c00 # Copy each selected skill directory from .hotskills/addyosmani-web-quality-skills into .gemini/skills/<skill-name>/
3.1kGitHub stars
35stars in 7 days
6skills in this repository
0commits in 30 days

Heat

5.5
  • Star growth, last 7 daysAhead of 85% of tracked repositories
  • Star growth, last 24 hoursAhead of 91% of tracked repositories
  • Rank movement, last 7 daysAhead of 31% of tracked repositories
  • Commits, last 30 daysAhead of 0% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Aug 2, 2026Nov 6, 20263,052

Individual skills in this repository

How it works

accessibility

When your agent uses it

Audit and improve web accessibility following WCAG 2.2 guidelines. Use when asked to "improve accessibility", "a11y audit", "WCAG compliance", "screen reader support", "keyboard navigation", or "make accessible".

What it loads into context

Frontmatter

76 tokens

Always available to the agent

SKILL.md

3,619 tokens

When the skill is activated

Reference documents

6,332 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Evidence-led audit workflow
  2. WCAG Principles: POUR
  3. Conformance levels
  4. Perceivable
  5. Operable
  6. Understandable
  7. Robust
  8. Testing checklist
  9. Common issues by impact
  10. References

Files

  • ../../.claude-plugin/marketplace.jsonasset479 bytes
  • ../../.claude-plugin/plugin.jsonasset438 bytes
  • SKILL.mdcore14,358 bytes
  • SKILL.mdcore14,358 bytes
  • SKILL.mdcore14,358 bytes
  • SKILL.mdcore14,358 bytes
  • references/A11Y-PATTERNS.mddoc6,036 bytes
  • references/WCAG.mddoc9,079 bytes
  • ../web-quality-audit/SKILL.mddoc10,450 bytes
Read SKILL.md

# Accessibility (a11y)

Comprehensive accessibility guidelines based on WCAG 2.2 and Lighthouse accessibility audits. Goal: make content usable by everyone, including people with disabilities.

## Evidence-led audit workflow

When a rendered page is available:

1. Run a live Lighthouse Accessibility audit when that capability is available; with Chrome DevTools MCP, use `lighthouse_audit`. Use mobile navigation mode for a general public page or snapshot mode when reloading would lose authenticated or user-created state.
2. Use failed audit nodes to localize the relevant component or template instead of searching the whole repository for generic patterns.
3. Inspect a rendered accessibility-tree snapshot for names, roles, states, landmarks, and heading structure; with Chrome DevTools MCP, use `take_snapshot`. Exercise the affected flow with the keyboard.
4. Fix the source, then re-run the same audit and manual interaction.

If the live tools are unavailable, use Lighthouse CLI or axe for automated coverage and complete the same manual checks. Automated tools detect only a subset of accessibility barriers: a score of 100 is not WCAG conformance, and a low score does not replace issue-level evidence.
View the complete source on GitHub

Skills included

  • accessibility
  • best-practices
  • core-web-vitals
  • performance
  • seo
  • web-quality-audit

Repository facts

License
MIT
Created
Jan 18, 2026
Last pushed
Aug 24, 2026
Forks
266
Open issues
4
Project activity
Slowing

Rank over the last 12 weeks

Now #408 · best #320 · down 51 in 30 days

  1. #396 from Oct 30 to Nov 1
  2. #398 from Nov 2 to Nov 3
  3. #400 on Nov 4
  4. #402 on Nov 5
  5. #405 on Nov 6
  6. #408 since Nov 7
78 earlier periods
  1. #300 on Aug 2
  2. #311 on Aug 8
  3. #310 on Aug 9
  4. #318 from Aug 10 to Aug 11
  5. #315 on Aug 12
  6. #323 on Aug 13
  7. #321 on Aug 14
  8. #318 on Aug 15
  9. #322 on Aug 16
  10. #321 on Aug 17
  11. #330 on Aug 18
  12. #326 on Aug 19
  13. #325 on Aug 20
  14. #327 on Aug 21
  15. #320 on Aug 22
  16. #325 on Aug 23
  17. #328 from Aug 24 to Aug 25
  18. #327 on Aug 26
  19. #325 on Aug 27
  20. #326 on Aug 28
  21. #327 on Aug 29
  22. #320 on Aug 30
  23. #328 on Aug 31
  24. #334 on Sep 1
  25. #330 on Sep 2
  26. #336 on Sep 3
  27. #330 on Sep 4
  28. #332 on Sep 5
  29. #331 on Sep 6
  30. #340 on Sep 7
  31. #338 on Sep 8
  32. #340 on Sep 9
  33. #339 on Sep 10
  34. #335 on Sep 11
  35. #339 on Sep 12
  36. #337 on Sep 13
  37. #341 on Sep 14
  38. #346 on Sep 15
  39. #344 on Sep 16
  40. #341 on Sep 17
  41. #342 on Sep 18
  42. #337 on Sep 19
  43. #346 on Sep 20
  44. #348 on Sep 21
  45. #350 on Sep 22
  46. #345 from Sep 23 to Sep 24
  47. #344 on Sep 25
  48. #342 on Sep 26
  49. #346 on Sep 27
  50. #350 on Sep 28
  51. #358 on Sep 29
  52. #355 on Sep 30
  53. #354 on Oct 1
  54. #356 on Oct 2
  55. #351 on Oct 3
  56. #347 on Oct 4
  57. #352 on Oct 5
  58. #350 on Oct 6
  59. #354 on Oct 7
  60. #357 on Oct 8
  61. #362 on Oct 9
  62. #353 on Oct 10
  63. #354 on Oct 11
  64. #362 on Oct 12
  65. #364 on Oct 13
  66. #366 on Oct 14
  67. #363 on Oct 15
  68. #369 on Oct 16
  69. #362 on Oct 17
  70. #373 from Oct 18 to Oct 19
  71. #376 on Oct 20
  72. #375 on Oct 21
  73. #377 on Oct 22
  74. #378 on Oct 23
  75. #373 on Oct 24
  76. #386 on Oct 25
  77. #393 on Oct 28
  78. #395 on Oct 29

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 2, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 21 notes
  • skills/accessibility/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/accessibility/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/accessibility/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/best-practices/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/best-practices/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/best-practices/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/best-practices/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/best-practices/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/best-practices/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/core-web-vitals/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/core-web-vitals/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/performance/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/performance/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/performance/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/seo/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/seo/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/web-quality-audit/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/web-quality-audit/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/web-quality-audit/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/web-quality-audit/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 334 signals by file

.claude-plugin/plugin.json

  • Network accessline 5
    "author": {     "name": "Addy Osmani",     "url": "https://github.com/addyosmani"
  • Network accessline 6
    "name": "Addy Osmani",     "url": "https://github.com/addyosmani"   },
  • Network accessline 7
    "url": "https://github.com/addyosmani"
  • Network accessline 8
    },   "homepage": "https://github.com/addyosmani/web-quality-skills",   "repository": "https://github.com/addyosmani/web-quality-skills",
  • Network accessline 9
    "homepage": "https://github.com/addyosmani/web-quality-skills",
  • Network accessline 10
    "repository": "https://github.com/addyosmani/web-quality-skills",

skills/accessibility/SKILL.md

  • Network accessline 412
    # Lighthouse accessibility audit npx lighthouse https://example.com --only-categories=accessibility
  • Network accessline 412
    # Lighthouse accessibility audit npx lighthouse https://example.com --only-categories=accessibility
  • Network accessline 413
    npx lighthouse https://example.com --only-categories=accessibility
  • Network accessline 413
    npx lighthouse https://example.com --only-categories=accessibility
  • Network accessline 415
    # axe-core npm install @axe-core/cli -g axe https://example.com
  • Network accessline 415
    # axe-core npm install @axe-core/cli -g axe https://example.com
  • Network accessline 417
    axe https://example.com
  • Network accessline 417
    axe https://example.com
  • Network accessline 459
    - [WCAG 2.2 Quick Reference](https://www.w3.org/WAI/WCAG22/quickref/)
  • Network accessline 459
    - [WCAG 2.2 Quick Reference](https://www.w3.org/WAI/WCAG22/quickref/)
  • Network accessline 460
    - [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/)
  • Network accessline 460
    - [WAI-ARIA Authoring Practices](https://www.w3.org/WAI/ARIA/apg/)
  • Network accessline 461
    - [Deque axe Rules](https://dequeuniversity.com/rules/axe/)
  • Network accessline 461
    - [Deque axe Rules](https://dequeuniversity.com/rules/axe/)

skills/accessibility/references/WCAG.md

  • Network accessline 109
    <a href="/page">Descriptive link text</a> <!-- External links --> <a href="https://external.com" target="_blank" rel="noopener">
  • Network accessline 110
    <!-- External links --> <a href="https://external.com" target="_blank" rel="noopener">   External site
  • Network accessline 111
    <a href="https://external.com" target="_blank" rel="noopener">
  • Network accessline 178
    | Tool | Type | URL | |------|------|-----| | axe DevTools | Browser extension | [deque.com/axe](https://www.deque.com/axe/) |
  • Network accessline 179
    |------|------|-----| | axe DevTools | Browser extension | [deque.com/axe](https://www.deque.com/axe/) | | WAVE | Browser extension | [wave.webaim.org](https://wave.webaim.org/) |
  • Network accessline 180
    | axe DevTools | Browser extension | [deque.com/axe](https://www.deque.com/axe/) |
  • Network accessline 181
    | WAVE | Browser extension | [wave.webaim.org](https://wave.webaim.org/) |
  • Network accessline 182
    | Lighthouse | Built into Chrome | DevTools → Lighthouse | | NVDA | Screen reader (Windows) | [nvaccess.org](https://www.nvaccess.org/) | | VoiceOver | Screen reader (Mac) | Built into macOS |
  • Network accessline 183
    | NVDA | Screen reader (Windows) | [nvaccess.org](https://www.nvaccess.org/) |
  • Network accessline 185
    | Colour Contrast Analyser | Desktop app | [tpgi.com](https://www.tpgi.com/color-contrast-checker/) |
  • Network accessline 189
    - [WCAG 2.2 W3C Recommendation](https://www.w3.org/TR/WCAG22/)
  • Network accessline 190
    - [WCAG 2.2 Quick Reference](https://www.w3.org/WAI/WCAG22/quickref/)
  • Network accessline 191
    - [What's New in WCAG 2.2](https://www.w3.org/WAI/standards-guidelines/wcag/new-in-22/)

skills/best-practices/SKILL.md

  • Network accessline 131
    **Never load polyfills from a third-party CDN you don't control.** The `polyfill.io` service was [compromised in mid-2024](https://sansec.io/research/polyfill-supply-chain-attack) in a supply-chain attack and used to serve malware to ~100k 
  • Network accessline 131
    **Never load polyfills from a third-party CDN you don't control.** The `polyfill.io` service was [compromised in mid-2024](https://sansec.io/research/polyfill-supply-chain-attack) in a supply-chain attack and used to serve malware to ~100k 
  • Network accessline 152
    // ✅ Async fetch const response = await fetch(url);
  • Network accessline 152
    // ✅ Async fetch const response = await fetch(url);
  • Network accessline 153
    const response = await fetch(url);
  • Network accessline 153
    const response = await fetch(url);
  • Network accessline 427
    <!-- Or allow for specific origins --> <meta http-equiv="Permissions-Policy"        content="geolocation=(self 'https://maps.example.com')">
  • Network accessline 427
    <!-- Or allow for specific origins --> <meta http-equiv="Permissions-Policy"        content="geolocation=(self 'https://maps.example.com')">
  • Network accessline 429
    content="geolocation=(self 'https://maps.example.com')">
  • Network accessline 429
    content="geolocation=(self 'https://maps.example.com')">
  • Network accessline 468
    |------|---------| | `npm audit` | Dependency vulnerabilities | | [SecurityHeaders.com](https://securityheaders.com) | Header analysis |
  • Network accessline 468
    |------|---------| | `npm audit` | Dependency vulnerabilities | | [SecurityHeaders.com](https://securityheaders.com) | Header analysis |
  • Network accessline 469
    | `npm audit` | Dependency vulnerabilities | | [SecurityHeaders.com](https://securityheaders.com) | Header analysis | | [W3C Validator](https://validator.w3.org) | HTML validation |
  • Network accessline 469
    | `npm audit` | Dependency vulnerabilities | | [SecurityHeaders.com](https://securityheaders.com) | Header analysis | | [W3C Validator](https://validator.w3.org) | HTML validation |
  • Network accessline 470
    | [SecurityHeaders.com](https://securityheaders.com) | Header analysis |
  • Network accessline 470
    | [SecurityHeaders.com](https://securityheaders.com) | Header analysis |
  • Network accessline 471
    | [W3C Validator](https://validator.w3.org) | HTML validation |
  • Network accessline 471
    | [W3C Validator](https://validator.w3.org) | HTML validation |
  • Network accessline 472
    | Live Lighthouse audit (Chrome DevTools MCP: `lighthouse_audit`) | Rendered Best Practices checks for agents | | Lighthouse CLI | Best Practices audit fallback | | [Observatory](https://observatory.mozilla.org) | Security scan |
  • Network accessline 472
    | Live Lighthouse audit (Chrome DevTools MCP: `lighthouse_audit`) | Rendered Best Practices checks for agents | | Lighthouse CLI | Best Practices audit fallback | | [Observatory](https://observatory.mozilla.org) | Security scan |
  • Network accessline 474
    | [Observatory](https://observatory.mozilla.org) | Security scan |
  • Network accessline 474
    | [Observatory](https://observatory.mozilla.org) | Security scan |
  • Network accessline 478
    - [MDN Web Security](https://developer.mozilla.org/en-US/docs/Web/Security)
  • Network accessline 478
    - [MDN Web Security](https://developer.mozilla.org/en-US/docs/Web/Security)
  • Network accessline 479
    - [OWASP Top 10](https://owasp.org/www-project-top-ten/)
  • Network accessline 479
    - [OWASP Top 10](https://owasp.org/www-project-top-ten/)

skills/best-practices/references/SECURITY.md

  • Network accessline 7
    <!-- ❌ Mixed content --> <img src="http://example.com/image.jpg">
  • Network accessline 8
    <img src="http://example.com/image.jpg">
  • Network accessline 9
    <script src="http://cdn.example.com/script.js"></script>
  • Network accessline 11
    <!-- ✅ HTTPS only --> <img src="https://example.com/image.jpg">
  • Network accessline 12
    <img src="https://example.com/image.jpg">
  • Network accessline 13
    <script src="https://cdn.example.com/script.js"></script>
  • Network accessline 27
    <meta http-equiv="Content-Security-Policy"       content="default-src 'self';                script-src 'self' https://trusted-cdn.com;
  • Network accessline 28
    content="default-src 'self';                script-src 'self' https://trusted-cdn.com;                style-src 'self' 'unsafe-inline';
  • Network accessline 29
    script-src 'self' https://trusted-cdn.com;
  • Network accessline 30
    style-src 'self' 'unsafe-inline';                img-src 'self' data: https:;                connect-src 'self' https://api.example.com;">
  • Network accessline 32
    connect-src 'self' https://api.example.com;">
  • Network accessline 39
    Content-Security-Policy:   default-src 'self';   script-src 'self' 'nonce-abc123' https://trusted.com;
  • Network accessline 40
    default-src 'self';   script-src 'self' 'nonce-abc123' https://trusted.com;   style-src 'self' 'nonce-abc123';
  • Network accessline 41
    script-src 'self' 'nonce-abc123' https://trusted.com;
  • Network accessline 42
    style-src 'self' 'nonce-abc123';   img-src 'self' data: https:;   connect-src 'self' https://api.example.com;
  • Network accessline 43
    img-src 'self' data: https:;   connect-src 'self' https://api.example.com;   frame-ancestors 'self';
  • Network accessline 44
    connect-src 'self' https://api.example.com;
  • Network accessline 82
    * **Angular** documents built-in sanitization plus the `angular` Trusted Types policy required for enforcement; lazy loading, JIT, upgrades, and explicit sanitizer bypasses need additional named policies. Follow [Angular's maintained securi
  • Network accessline 83
    * **React** does not sanitize `dangerouslySetInnerHTML`. Keep untrusted input out of it or pass content sanitized by an application-owned policy, and verify the deployed React version under report-only enforcement. Do not assume the framewo
  • Network accessline 90
    <script src="https://cdn.example.com/lib@1.2.3/dist/lib.js"
  • Network accessline 193
    - [MDN web security](https://developer.mozilla.org/en-US/docs/Web/Security)
  • Network accessline 194
    - [OWASP Content Security Policy Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Content_Security_Policy_Cheat_Sheet.html)
  • Network accessline 195
    - [DOMPurify](https://github.com/cure53/DOMPurify)

skills/core-web-vitals/SKILL.md

  • Network accessline 77
    // ❌ Content loads after JavaScript useEffect(() => {   fetch('/api/hero-text').then(r => r.json()).then(setHeroText);
  • Network accessline 77
    // ❌ Content loads after JavaScript useEffect(() => {   fetch('/api/hero-text').then(r => r.json()).then(setHeroText);
  • Network accessline 77
    // ❌ Content loads after JavaScript useEffect(() => {   fetch('/api/hero-text').then(r => r.json()).then(setHeroText);
  • Network accessline 77
    // ❌ Content loads after JavaScript useEffect(() => {   fetch('/api/hero-text').then(r => r.json()).then(setHeroText);
  • Network accessline 78
    useEffect(() => {   fetch('/api/hero-text').then(r => r.json()).then(setHeroText); }, []);
  • Network accessline 78
    useEffect(() => {   fetch('/api/hero-text').then(r => r.json()).then(setHeroText); }, []);
  • Network accessline 78
    useEffect(() => {   fetch('/api/hero-text').then(r => r.json()).then(setHeroText); }, []);
  • Network accessline 78
    useEffect(() => {   fetch('/api/hero-text').then(r => r.json()).then(setHeroText); }, []);
  • Network accessline 79
    fetch('/api/hero-text').then(r => r.json()).then(setHeroText);
  • Network accessline 79
    fetch('/api/hero-text').then(r => r.json()).then(setHeroText);
  • Network accessline 79
    fetch('/api/hero-text').then(r => r.json()).then(setHeroText);
  • Network accessline 79
    fetch('/api/hero-text').then(r => r.json()).then(setHeroText);
  • Network accessline 114
    Start conservatively and measure prediction hit rate, transferred bytes, server load, and navigation improvement before expanding the rules. Recheck [Chrome's maintained eagerness documentation](https://developer.chrome.com/docs/web-platfor
  • Network accessline 114
    Start conservatively and measure prediction hit rate, transferred bytes, server load, and navigation improvement before expanding the rules. Recheck [Chrome's maintained eagerness documentation](https://developer.chrome.com/docs/web-platfor
  • Network accessline 114
    Start conservatively and measure prediction hit rate, transferred bytes, server load, and navigation improvement before expanding the rules. Recheck [Chrome's maintained eagerness documentation](https://developer.chrome.com/docs/web-platfor
  • Network accessline 114
    Start conservatively and measure prediction hit rate, transferred bytes, server load, and navigation improvement before expanding the rules. Recheck [Chrome's maintained eagerness documentation](https://developer.chrome.com/docs/web-platfor
  • Network accessline 116
    Caveats: - **Bandwidth/CPU cost.** Each prerender is roughly a full page load. Scope `where` carefully (`href_matches` patterns, exclude logout/checkout) and avoid `immediate` outside small sites. - **Side effects fire early.** Analytics, a
  • Network accessline 116
    Caveats: - **Bandwidth/CPU cost.** Each prerender is roughly a full page load. Scope `where` carefully (`href_matches` patterns, exclude logout/checkout) and avoid `immediate` outside small sites. - **Side effects fire early.** Analytics, a
  • Network accessline 116
    Caveats: - **Bandwidth/CPU cost.** Each prerender is roughly a full page load. Scope `where` carefully (`href_matches` patterns, exclude logout/checkout) and avoid `immediate` outside small sites. - **Side effects fire early.** Analytics, a
  • Network accessline 116
    Caveats: - **Bandwidth/CPU cost.** Each prerender is roughly a full page load. Scope `where` carefully (`href_matches` patterns, exclude logout/checkout) and avoid `immediate` outside small sites. - **Side effects fire early.** Analytics, a
  • Network accessline 117
    - **Bandwidth/CPU cost.** Each prerender is roughly a full page load. Scope `where` carefully (`href_matches` patterns, exclude logout/checkout) and avoid `immediate` outside small sites. - **Side effects fire early.** Analytics, ads, and a
  • Network accessline 117
    - **Bandwidth/CPU cost.** Each prerender is roughly a full page load. Scope `where` carefully (`href_matches` patterns, exclude logout/checkout) and avoid `immediate` outside small sites. - **Side effects fire early.** Analytics, ads, and a
  • Network accessline 117
    - **Bandwidth/CPU cost.** Each prerender is roughly a full page load. Scope `where` carefully (`href_matches` patterns, exclude logout/checkout) and avoid `immediate` outside small sites. - **Side effects fire early.** Analytics, ads, and a
  • Network accessline 117
    - **Bandwidth/CPU cost.** Each prerender is roughly a full page load. Scope `where` carefully (`href_matches` patterns, exclude logout/checkout) and avoid `immediate` outside small sites. - **Side effects fire early.** Analytics, ads, and a
  • Network accessline 118
    - **Side effects fire early.** Analytics, ads, and any code that runs on load will fire when the prerender starts, not when the user navigates. Gate side effects on the [`prerenderingchange` event](https://developer.chrome.com/docs/web-plat
  • Network accessline 118
    - **Side effects fire early.** Analytics, ads, and any code that runs on load will fire when the prerender starts, not when the user navigates. Gate side effects on the [`prerenderingchange` event](https://developer.chrome.com/docs/web-plat
  • Network accessline 118
    - **Side effects fire early.** Analytics, ads, and any code that runs on load will fire when the prerender starts, not when the user navigates. Gate side effects on the [`prerenderingchange` event](https://developer.chrome.com/docs/web-plat
  • Network accessline 118
    - **Side effects fire early.** Analytics, ads, and any code that runs on load will fire when the prerender starts, not when the user navigates. Gate side effects on the [`prerenderingchange` event](https://developer.chrome.com/docs/web-plat
  • Network accessline 223
    - [Detailed INP optimization](references/INP.md) — read when a trace or field attribution identifies a slow interaction - [Detailed CLS optimization](references/CLS.md) — read when a trace or field attribution identifies unexpected shifts -
  • Network accessline 223
    - [Detailed INP optimization](references/INP.md) — read when a trace or field attribution identifies a slow interaction - [Detailed CLS optimization](references/CLS.md) — read when a trace or field attribution identifies unexpected shifts -
  • Network accessline 223
    - [Detailed INP optimization](references/INP.md) — read when a trace or field attribution identifies a slow interaction - [Detailed CLS optimization](references/CLS.md) — read when a trace or field attribution identifies unexpected shifts -
  • Network accessline 223
    - [Detailed INP optimization](references/INP.md) — read when a trace or field attribution identifies a slow interaction - [Detailed CLS optimization](references/CLS.md) — read when a trace or field attribution identifies unexpected shifts -
  • Network accessline 224
    - [Detailed CLS optimization](references/CLS.md) — read when a trace or field attribution identifies unexpected shifts - [web.dev LCP](https://web.dev/articles/lcp) - [web.dev INP](https://web.dev/articles/inp)
  • Network accessline 224
    - [Detailed CLS optimization](references/CLS.md) — read when a trace or field attribution identifies unexpected shifts - [web.dev LCP](https://web.dev/articles/lcp) - [web.dev INP](https://web.dev/articles/inp)
  • Network accessline 224
    - [Detailed CLS optimization](references/CLS.md) — read when a trace or field attribution identifies unexpected shifts - [web.dev LCP](https://web.dev/articles/lcp) - [web.dev INP](https://web.dev/articles/inp)
  • Network accessline 224
    - [Detailed CLS optimization](references/CLS.md) — read when a trace or field attribution identifies unexpected shifts - [web.dev LCP](https://web.dev/articles/lcp) - [web.dev INP](https://web.dev/articles/inp)
  • Network accessline 225
    - [web.dev LCP](https://web.dev/articles/lcp)
  • Network accessline 225
    - [web.dev LCP](https://web.dev/articles/lcp)
  • Network accessline 225
    - [web.dev LCP](https://web.dev/articles/lcp)
  • Network accessline 225
    - [web.dev LCP](https://web.dev/articles/lcp)
  • Network accessline 226
    - [web.dev INP](https://web.dev/articles/inp)
  • Network accessline 226
    - [web.dev INP](https://web.dev/articles/inp)
  • Network accessline 226
    - [web.dev INP](https://web.dev/articles/inp)
  • Network accessline 226
    - [web.dev INP](https://web.dev/articles/inp)
  • Network accessline 227
    - [web.dev CLS](https://web.dev/articles/cls)
  • Network accessline 227
    - [web.dev CLS](https://web.dev/articles/cls)
  • Network accessline 227
    - [web.dev CLS](https://web.dev/articles/cls)
  • Network accessline 227
    - [web.dev CLS](https://web.dev/articles/cls)

skills/core-web-vitals/references/CLS.md

  • Network accessline 12
    <img src="photo.jpg" alt="Photo"> <iframe src="https://video.example/embed/123" title="Demo"></iframe>
  • Network accessline 13
    <iframe src="https://video.example/embed/123" title="Demo"></iframe>
  • Network accessline 21
    <div class="video-frame">   <iframe src="https://video.example/embed/123" title="Demo"></iframe>
  • Network accessline 22
    <iframe src="https://video.example/embed/123" title="Demo"></iframe>
  • Network accessline 124
    * [Optimize CLS](https://web.dev/articles/optimize-cls)
  • Network accessline 125
    * [Debug layout shifts](https://developer.chrome.com/docs/devtools/performance/insights#cls-culprits)
  • Network accessline 126
    * [CSS font metric overrides](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/size-adjust)

skills/core-web-vitals/references/INP.md

  • Network accessline 120
    * [Optimize INP](https://web.dev/articles/optimize-inp)
  • Network accessline 121
    * [`scheduler.yield()`](https://web.dev/articles/optimize-long-tasks#scheduler-yield)
  • Network accessline 122
    * [web-vitals attribution](https://github.com/GoogleChrome/web-vitals#attribution-build)

skills/performance/SKILL.md

  • Network accessline 43
    * **HTTP/2 or HTTP/3.** Multiplexing reduces connection overhead. * **Edge caching.** Cache HTML at CDN edge when possible. * **Consider Early Hints (HTTP 103) for measured document latency.** If a trace shows slow HTML generation and stabl
  • Network accessline 43
    * **HTTP/2 or HTTP/3.** Multiplexing reduces connection overhead. * **Edge caching.** Cache HTML at CDN edge when possible. * **Consider Early Hints (HTTP 103) for measured document latency.** If a trace shows slow HTML generation and stabl
  • Network accessline 43
    * **HTTP/2 or HTTP/3.** Multiplexing reduces connection overhead. * **Edge caching.** Cache HTML at CDN edge when possible. * **Consider Early Hints (HTTP 103) for measured document latency.** If a trace shows slow HTML generation and stabl
  • Network accessline 45
    * **Consider Early Hints (HTTP 103) for measured document latency.** If a trace shows slow HTML generation and stable critical subresources, send an interim `103` with `Link` headers before the normal final response from the same request. U
  • Network accessline 45
    * **Consider Early Hints (HTTP 103) for measured document latency.** If a trace shows slow HTML generation and stable critical subresources, send an interim `103` with `Link` headers before the normal final response from the same request. U
  • Network accessline 45
    * **Consider Early Hints (HTTP 103) for measured document latency.** If a trace shows slow HTML generation and stable critical subresources, send an interim `103` with `Link` headers before the normal final response from the same request. U
  • Network accessline 51
    <link rel="preconnect" href="https://fonts.googleapis.com">
  • Network accessline 51
    <link rel="preconnect" href="https://fonts.googleapis.com">
  • Network accessline 51
    <link rel="preconnect" href="https://fonts.googleapis.com">
  • Network accessline 52
    <link rel="preconnect" href="https://cdn.example.com" crossorigin>
  • Network accessline 52
    <link rel="preconnect" href="https://cdn.example.com" crossorigin>
  • Network accessline 52
    <link rel="preconnect" href="https://cdn.example.com" crossorigin>
  • Network accessline 67
    **Prerender likely-next navigations** with the [Speculation Rules API](https://developer.chrome.com/docs/web-platform/prerender-pages):
  • Network accessline 67
    **Prerender likely-next navigations** with the [Speculation Rules API](https://developer.chrome.com/docs/web-platform/prerender-pages):
  • Network accessline 67
    **Prerender likely-next navigations** with the [Speculation Rules API](https://developer.chrome.com/docs/web-platform/prerender-pages):
  • Network accessline 255
    event.respondWith(       caches.match(event.request).then((cached) => {         return cached || fetch(event.request).then((response) => {
  • Network accessline 255
    event.respondWith(       caches.match(event.request).then((cached) => {         return cached || fetch(event.request).then((response) => {
  • Network accessline 255
    event.respondWith(       caches.match(event.request).then((cached) => {         return cached || fetch(event.request).then((response) => {
  • Network accessline 256
    caches.match(event.request).then((cached) => {         return cached || fetch(event.request).then((response) => {           const clone = response.clone();
  • Network accessline 256
    caches.match(event.request).then((cached) => {         return cached || fetch(event.request).then((response) => {           const clone = response.clone();
  • Network accessline 256
    caches.match(event.request).then((cached) => {         return cached || fetch(event.request).then((response) => {           const clone = response.clone();
  • Network accessline 257
    return cached || fetch(event.request).then((response) => {
  • Network accessline 257
    return cached || fetch(event.request).then((response) => {
  • Network accessline 257
    return cached || fetch(event.request).then((response) => {
  • Network accessline 324
    The [View Transitions API](https://developer.chrome.com/docs/web-platform/view-transitions) lets the browser cross-fade (or custom-animate) between two DOM states using a single GPU-composited snapshot — no double-render, no layout thrash, 
  • Network accessline 324
    The [View Transitions API](https://developer.chrome.com/docs/web-platform/view-transitions) lets the browser cross-fade (or custom-animate) between two DOM states using a single GPU-composited snapshot — no double-render, no layout thrash, 
  • Network accessline 324
    The [View Transitions API](https://developer.chrome.com/docs/web-platform/view-transitions) lets the browser cross-fade (or custom-animate) between two DOM states using a single GPU-composited snapshot — no double-render, no layout thrash, 
  • Network accessline 351
    // ❌ Blocks main thread <script src="https://analytics.example.com/script.js"></script>
  • Network accessline 351
    // ❌ Blocks main thread <script src="https://analytics.example.com/script.js"></script>
  • Network accessline 351
    // ❌ Blocks main thread <script src="https://analytics.example.com/script.js"></script>
  • Network accessline 352
    <script src="https://analytics.example.com/script.js"></script>
  • Network accessline 352
    <script src="https://analytics.example.com/script.js"></script>
  • Network accessline 352
    <script src="https://analytics.example.com/script.js"></script>
  • Network accessline 354
    // ✅ Async loading <script async src="https://analytics.example.com/script.js"></script>
  • Network accessline 354
    // ✅ Async loading <script async src="https://analytics.example.com/script.js"></script>
  • Network accessline 354
    // ✅ Async loading <script async src="https://analytics.example.com/script.js"></script>
  • Network accessline 355
    <script async src="https://analytics.example.com/script.js"></script>
  • Network accessline 355
    <script async src="https://analytics.example.com/script.js"></script>
  • Network accessline 355
    <script async src="https://analytics.example.com/script.js"></script>
  • Network accessline 361
    if (entries[0].isIntersecting) {       const script = document.createElement('script');       script.src = 'https://widget.example.com/embed.js';
  • Network accessline 361
    if (entries[0].isIntersecting) {       const script = document.createElement('script');       script.src = 'https://widget.example.com/embed.js';
  • Network accessline 361
    if (entries[0].isIntersecting) {       const script = document.createElement('script');       script.src = 'https://widget.example.com/embed.js';
  • Network accessline 362
    const script = document.createElement('script');       script.src = 'https://widget.example.com/embed.js';       document.body.appendChild(script);
  • Network accessline 362
    const script = document.createElement('script');       script.src = 'https://widget.example.com/embed.js';       document.body.appendChild(script);
  • Network accessline 362
    const script = document.createElement('script');       script.src = 'https://widget.example.com/embed.js';       document.body.appendChild(script);
  • Network accessline 363
    script.src = 'https://widget.example.com/embed.js';
  • Network accessline 363
    script.src = 'https://widget.example.com/embed.js';
  • Network accessline 363
    script.src = 'https://widget.example.com/embed.js';

skills/performance/references/MEASUREMENT.md

  • Network accessline 104
    * [Chrome DevTools MCP tool reference](https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/tool-reference.md)
  • Network accessline 104
    * [Chrome DevTools MCP tool reference](https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/tool-reference.md)
  • Network accessline 104
    * [Chrome DevTools MCP tool reference](https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/tool-reference.md)
  • Network accessline 105
    * [Chrome UX Report API](https://developer.chrome.com/docs/crux/api)
  • Network accessline 105
    * [Chrome UX Report API](https://developer.chrome.com/docs/crux/api)
  • Network accessline 105
    * [Chrome UX Report API](https://developer.chrome.com/docs/crux/api)
  • Network accessline 106
    * [Getting started with measuring Web Vitals](https://web.dev/articles/vitals-measurement-getting-started)
  • Network accessline 106
    * [Getting started with measuring Web Vitals](https://web.dev/articles/vitals-measurement-getting-started)
  • Network accessline 106
    * [Getting started with measuring Web Vitals](https://web.dev/articles/vitals-measurement-getting-started)
  • Network accessline 107
    * [PageSpeed Insights API](https://developers.google.com/speed/docs/insights/v5/get-started)
  • Network accessline 107
    * [PageSpeed Insights API](https://developers.google.com/speed/docs/insights/v5/get-started)
  • Network accessline 107
    * [PageSpeed Insights API](https://developers.google.com/speed/docs/insights/v5/get-started)

skills/performance/references/RUM.md

  • Network accessline 27
    if (!navigator.sendBeacon?.('/rum', body)) {     fetch('/rum', {method: 'POST', body, keepalive: true});
  • Network accessline 27
    if (!navigator.sendBeacon?.('/rum', body)) {     fetch('/rum', {method: 'POST', body, keepalive: true});
  • Network accessline 28
    fetch('/rum', {method: 'POST', body, keepalive: true});
  • Network accessline 28
    fetch('/rum', {method: 'POST', body, keepalive: true});
  • Network accessline 63
    * [web-vitals library](https://github.com/GoogleChrome/web-vitals)
  • Network accessline 63
    * [web-vitals library](https://github.com/GoogleChrome/web-vitals)
  • Network accessline 64
    * [Best practices for measuring Web Vitals in the field](https://web.dev/articles/vitals-field-measurement-best-practices)
  • Network accessline 64
    * [Best practices for measuring Web Vitals in the field](https://web.dev/articles/vitals-field-measurement-best-practices)
  • Network accessline 65
    * [Find slow interactions in the field](https://web.dev/articles/find-slow-interactions-in-the-field)
  • Network accessline 65
    * [Find slow interactions in the field](https://web.dev/articles/find-slow-interactions-in-the-field)

skills/seo/SKILL.md

  • Network accessline 53
    Sitemap: https://example.com/sitemap.xml
  • Network accessline 53
    Sitemap: https://example.com/sitemap.xml
  • Network accessline 73
    <!-- Prevent duplicate content issues --> <link rel="canonical" href="https://example.com/page">
  • Network accessline 73
    <!-- Prevent duplicate content issues --> <link rel="canonical" href="https://example.com/page">
  • Network accessline 74
    <link rel="canonical" href="https://example.com/page">
  • Network accessline 74
    <link rel="canonical" href="https://example.com/page">
  • Network accessline 76
    <!-- Self-referencing canonical (recommended) --> <link rel="canonical" href="https://example.com/current-page">
  • Network accessline 76
    <!-- Self-referencing canonical (recommended) --> <link rel="canonical" href="https://example.com/current-page">
  • Network accessline 77
    <link rel="canonical" href="https://example.com/current-page">
  • Network accessline 77
    <link rel="canonical" href="https://example.com/current-page">
  • Network accessline 79
    <!-- For paginated content --> <link rel="canonical" href="https://example.com/products">
  • Network accessline 79
    <!-- For paginated content --> <link rel="canonical" href="https://example.com/products">
  • Network accessline 80
    <link rel="canonical" href="https://example.com/products">
  • Network accessline 80
    <link rel="canonical" href="https://example.com/products">
  • Network accessline 87
    <?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  • Network accessline 87
    <?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  • Network accessline 88
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  • Network accessline 88
    <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  • Network accessline 89
    <url>     <loc>https://example.com/</loc>     <lastmod>2024-01-15</lastmod>
  • Network accessline 89
    <url>     <loc>https://example.com/</loc>     <lastmod>2024-01-15</lastmod>
  • Network accessline 90
    <loc>https://example.com/</loc>
  • Network accessline 90
    <loc>https://example.com/</loc>
  • Network accessline 94
    </url>   <url>     <loc>https://example.com/products</loc>
  • Network accessline 94
    </url>   <url>     <loc>https://example.com/products</loc>
  • Network accessline 95
    <url>     <loc>https://example.com/products</loc>     <lastmod>2024-01-14</lastmod>
  • Network accessline 95
    <url>     <loc>https://example.com/products</loc>     <lastmod>2024-01-14</lastmod>
  • Network accessline 96
    <loc>https://example.com/products</loc>
  • Network accessline 96
    <loc>https://example.com/products</loc>
  • Network accessline 114
    ✅ Good URLs: https://example.com/products/blue-widget
  • Network accessline 114
    ✅ Good URLs: https://example.com/products/blue-widget
  • Network accessline 115
    https://example.com/products/blue-widget
  • Network accessline 115
    https://example.com/products/blue-widget
  • Network accessline 116
    https://example.com/blog/how-to-use-widgets
  • Network accessline 116
    https://example.com/blog/how-to-use-widgets
  • Network accessline 118
    ❌ Poor URLs: https://example.com/p?id=12345
  • Network accessline 118
    ❌ Poor URLs: https://example.com/p?id=12345
  • Network accessline 119
    https://example.com/p?id=12345
  • Network accessline 119
    https://example.com/p?id=12345
  • Network accessline 120
    https://example.com/products/item/category/subcategory/blue-widget-2024-sale-discount
  • Network accessline 120
    https://example.com/products/item/category/subcategory/blue-widget-2024-sale-discount
  • Network accessline 134
    <!-- Ensure all resources use HTTPS --> <img src="https://example.com/image.jpg">
  • Network accessline 134
    <!-- Ensure all resources use HTTPS --> <img src="https://example.com/image.jpg">
  • Network accessline 135
    <img src="https://example.com/image.jpg">
  • Network accessline 135
    <img src="https://example.com/image.jpg">
  • Network accessline 137
    <!-- Not: --> <img src="http://example.com/image.jpg">
  • Network accessline 137
    <!-- Not: --> <img src="http://example.com/image.jpg">
  • Network accessline 138
    <img src="http://example.com/image.jpg">
  • Network accessline 138
    <img src="http://example.com/image.jpg">
  • Network accessline 170
    Treat title-link rewriting separately from truncation. Google may build a different title link from the visible page title, headings, anchor text, and other sources even when the `<title>` is short; investigate accuracy and consistency rath
  • Network accessline 170
    Treat title-link rewriting separately from truncation. Google may build a different title link from the visible page title, headings, anchor text, and other sources even when the `<title>` is short; investigate accuracy and consistency rath
  • Network accessline 283
    Training controls such as `GPTBot` and `ClaudeBot` are distinct from search and user-fetch controls. `GoogleOther` is a generic crawler, not an AI-search visibility switch. Verify current names and consequences in the vendors' maintained do
  • Network accessline 283
    Training controls such as `GPTBot` and `ClaudeBot` are distinct from search and user-fetch controls. `GoogleOther` is a generic crawler, not an AI-search visibility switch. Verify current names and consequences in the vendors' maintained do
  • Network accessline 343
    <!-- For multi-language sites --> <link rel="alternate" hreflang="en" href="https://example.com/page">
  • Network accessline 343
    <!-- For multi-language sites --> <link rel="alternate" hreflang="en" href="https://example.com/page">
  • Network accessline 344
    <link rel="alternate" hreflang="en" href="https://example.com/page">
  • Network accessline 344
    <link rel="alternate" hreflang="en" href="https://example.com/page">
  • Network accessline 345
    <link rel="alternate" hreflang="es" href="https://example.com/es/page">
  • Network accessline 345
    <link rel="alternate" hreflang="es" href="https://example.com/es/page">
  • Network accessline 346
    <link rel="alternate" hreflang="fr" href="https://example.com/fr/page">
  • Network accessline 346
    <link rel="alternate" hreflang="fr" href="https://example.com/fr/page">
  • Network accessline 347
    <link rel="alternate" hreflang="x-default" href="https://example.com/page">
  • Network accessline 347
    <link rel="alternate" hreflang="x-default" href="https://example.com/page">
  • Network accessline 406
    - [Google Search Central](https://developers.google.com/search)
  • Network accessline 406
    - [Google Search Central](https://developers.google.com/search)
  • Network accessline 407
    - [Schema.org](https://schema.org/)
  • Network accessline 407
    - [Schema.org](https://schema.org/)

skills/seo/references/STRUCTURED-DATA.md

  • Network accessline 8
    <script type="application/ld+json"> {   "@context": "https://schema.org",
  • Network accessline 9
    {   "@context": "https://schema.org",   "@type": "Organization",
  • Network accessline 10
    "@context": "https://schema.org",
  • Network accessline 11
    "@type": "Organization",   "name": "Example Company",   "url": "https://example.com",
  • Network accessline 12
    "name": "Example Company",   "url": "https://example.com",   "logo": "https://example.com/logo.png",
  • Network accessline 13
    "url": "https://example.com",
  • Network accessline 14
    "logo": "https://example.com/logo.png",
  • Network accessline 15
    "sameAs": [     "https://twitter.com/example",     "https://linkedin.com/company/example"
  • Network accessline 16
    "https://twitter.com/example",
  • Network accessline 17
    "https://linkedin.com/company/example"
  • Network accessline 31
    <script type="application/ld+json"> {   "@context": "https://schema.org",
  • Network accessline 32
    {   "@context": "https://schema.org",   "@type": "Article",
  • Network accessline 33
    "@context": "https://schema.org",
  • Network accessline 35
    "headline": "How to Choose the Right Widget",   "description": "Complete guide to selecting widgets for your needs.",   "image": "https://example.com/article-image.jpg",
  • Network accessline 36
    "description": "Complete guide to selecting widgets for your needs.",   "image": "https://example.com/article-image.jpg",   "author": {
  • Network accessline 37
    "image": "https://example.com/article-image.jpg",
  • Network accessline 39
    "@type": "Person",     "name": "Jane Smith",     "url": "https://example.com/authors/jane-smith"
  • Network accessline 40
    "name": "Jane Smith",     "url": "https://example.com/authors/jane-smith"   },
  • Network accessline 41
    "url": "https://example.com/authors/jane-smith"
  • Network accessline 46
    "logo": {       "@type": "ImageObject",       "url": "https://example.com/logo.png"
  • Network accessline 47
    "@type": "ImageObject",       "url": "https://example.com/logo.png"     }
  • Network accessline 48
    "url": "https://example.com/logo.png"
  • Network accessline 60
    <script type="application/ld+json"> {   "@context": "https://schema.org",
  • Network accessline 61
    {   "@context": "https://schema.org",   "@type": "Product",
  • Network accessline 62
    "@context": "https://schema.org",
  • Network accessline 63
    "@type": "Product",   "name": "Blue Widget Pro",   "image": "https://example.com/blue-widget.jpg",
  • Network accessline 64
    "name": "Blue Widget Pro",   "image": "https://example.com/blue-widget.jpg",   "description": "Premium blue widget with advanced features.",
  • Network accessline 65
    "image": "https://example.com/blue-widget.jpg",
  • Network accessline 73
    "price": "49.99",     "priceCurrency": "USD",     "availability": "https://schema.org/InStock",
  • Network accessline 74
    "priceCurrency": "USD",     "availability": "https://schema.org/InStock",     "url": "https://example.com/products/blue-widget"
  • Network accessline 75
    "availability": "https://schema.org/InStock",
  • Network accessline 76
    "url": "https://example.com/products/blue-widget"
  • Network accessline 90
    <script type="application/ld+json"> {   "@context": "https://schema.org",
  • Network accessline 91
    {   "@context": "https://schema.org",   "@type": "FAQPage",
  • Network accessline 92
    "@context": "https://schema.org",
  • Network accessline 119
    <script type="application/ld+json"> {   "@context": "https://schema.org",
  • Network accessline 120
    {   "@context": "https://schema.org",   "@type": "BreadcrumbList",
  • Network accessline 121
    "@context": "https://schema.org",
  • Network accessline 126
    "position": 1,       "name": "Home",       "item": "https://example.com"
  • Network accessline 127
    "name": "Home",       "item": "https://example.com"     },
  • Network accessline 128
    "item": "https://example.com"
  • Network accessline 132
    "position": 2,       "name": "Products",       "item": "https://example.com/products"
  • Network accessline 133
    "name": "Products",       "item": "https://example.com/products"     },
  • Network accessline 134
    "item": "https://example.com/products"
  • Network accessline 138
    "position": 3,       "name": "Blue Widgets",       "item": "https://example.com/products/blue-widgets"
  • Network accessline 139
    "name": "Blue Widgets",       "item": "https://example.com/products/blue-widgets"     }
  • Network accessline 140
    "item": "https://example.com/products/blue-widgets"
  • Network accessline 149
    Test structured data at: - [Google Rich Results Test](https://search.google.com/test/rich-results)
  • Network accessline 150
    - [Google Rich Results Test](https://search.google.com/test/rich-results)
  • Network accessline 151
    - [Schema.org Validator](https://validator.schema.org/)

skills/web-quality-audit/SKILL.md

  • Network accessline 14
    > **Lighthouse 13+.** The Performance category now uses shared **Performance Insights** across Lighthouse and the DevTools Performance panel ([announcement](https://developer.chrome.com/blog/moving-lighthouse-to-insights)). Follow current i
  • Network accessline 14
    > **Lighthouse 13+.** The Performance category now uses shared **Performance Insights** across Lighthouse and the DevTools Performance panel ([announcement](https://developer.chrome.com/blog/moving-lighthouse-to-insights)). Follow current i
  • Network accessline 14
    > **Lighthouse 13+.** The Performance category now uses shared **Performance Insights** across Lighthouse and the DevTools Performance panel ([announcement](https://developer.chrome.com/blog/moving-lighthouse-to-insights)). Follow current i
  • Network accessline 14
    > **Lighthouse 13+.** The Performance category now uses shared **Performance Insights** across Lighthouse and the DevTools Performance panel ([announcement](https://developer.chrome.com/blog/moving-lighthouse-to-insights)). Follow current i

skills/web-quality-audit/scripts/analyze.sh

  • Executable scriptline 1
    #!/bin/bash
  • Network accessline 63
    WARNINGS+=("$file:$ln: Non-HTTPS URL")     http_count=$((http_count + 1))   done < <(grep -noE 'http://[^"'\''[:space:]>]*' "$file" || true)
  • Network accessline 64
    http_count=$((http_count + 1))   done < <(grep -noE 'http://[^"'\''[:space:]>]*' "$file" || true) }
  • Network accessline 65
    done < <(grep -noE 'http://[^"'\''[:space:]>]*' "$file" || true)

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Signal confidence: 328 facts

and 278 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexNativeManifest AGENTS.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/accessibility/SKILL.md.cursor/skills/<skill-name>/
Gemini CLINativeManifest gemini-extension.json.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/accessibility/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md skills/accessibility/SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.

Explore alternatives and comparisons

Add this badge to your README

It updates every night and links to this page.

addyosmani/web-quality-skills: #408 on hotskills, 3.1k stars

[![addyosmani/web-quality-skills on hotskills](https://hotskills.dev/badge/addyosmani-web-quality-skills.svg)](https://hotskills.dev/skill/addyosmani-web-quality-skills/)