{"_id":"@seomator/seo-audit","_rev":"17-78355aec0f497092fc13c6aaacfcaa7f","name":"@seomator/seo-audit","dist-tags":{"latest":"5.0.0"},"versions":{"1.0.0":{"name":"@seomator/seo-audit","version":"1.0.0","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit"],"author":"","license":"MIT","_id":"@seomator/seo-audit@1.0.0","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"fca2f28cdb8df4718eb5787d890ece5cf54c2402","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-1.0.0.tgz","fileCount":4,"integrity":"sha512-NmACSji2DATB6nO/W3C9ZqhMVZQ0NWuHLuoSnK/YGKI9VqCFLH29lQNSmOE3Tx0kzFvMdetTYjjy/oT3ST/m+w==","signatures":[{"sig":"MEUCIQDnXOVaL7TqRz8OyY1qYFYbYoeEKvpDxWoQJqE5k+68gwIgfbkmIQx13MrbUjcMJaHoF0ALDO4iXm5oSLGJ6d1kPfQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169773},"main":"./dist/cli.js","type":"module","types":"./dist/cli.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"da55597bb5b3b0b48ef153978a0cf14b9b7c2762","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","prepublishOnly":"npm run build"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 55 rules across 9 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","cli-progress":"^3.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_1.0.0_1769175325078_0.35890055696615475","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@seomator/seo-audit","version":"1.1.0","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit"],"author":"","license":"MIT","_id":"@seomator/seo-audit@1.1.0","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"a67fc6e73f3a57d9c04725700c80e5fc2fc8aae7","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-1.1.0.tgz","fileCount":4,"integrity":"sha512-8SXl8IU9CpsT0Yqlwf7P94iLjTZ3BhexnnMvnKtvXo+F/bNmaSZl7gXo7XfGC5rVVjuQIuzh9rJQ7M7jYGe+mw==","signatures":[{"sig":"MEYCIQCh7cI6S7SkjAKCAdwb16UDGMMTLQoakX6QdK9vQQM8IQIhAIXTn4QAwpRkQ4ADLpfS+ogEq6xlq0w3PoQZ/lPq3R6V","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":171944},"main":"./dist/cli.js","type":"module","types":"./dist/cli.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"cd7939abf4665a34dbc057b4ab0b6d41ec294c87","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","prepublishOnly":"npm run build"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 55 rules across 9 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","cli-progress":"^3.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_1.1.0_1769181007668_0.1995294280498916","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@seomator/seo-audit","version":"1.2.0","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit"],"author":"","license":"MIT","_id":"@seomator/seo-audit@1.2.0","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"a09e03cd00120c6d29094dcda3fca90bd4a61dd9","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-1.2.0.tgz","fileCount":4,"integrity":"sha512-ZWLD07SMSik+RSSvmT7680rIW1Zwy0vwvAKdziTUo4G9UT7lf5BkQbf+TZj5Gk4ZUlURi+aoizzIlgtgXx2fmw==","signatures":[{"sig":"MEUCIEVQnh96JXbVU0DbBLY2fBxZMdqdQtyehrxjDyFA9jBhAiEAsJp0k+2AalW69OaSdXjJ2Uyr9b43DdqGjRBFBfU0bd8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":172100},"main":"./dist/cli.js","type":"module","types":"./dist/cli.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"5b14fc5b77a30765c215f8646c3918dc706cdb66","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","prepublishOnly":"npm run build"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 55 rules across 9 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","cli-progress":"^3.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_1.2.0_1769181620194_0.00685402711896943","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@seomator/seo-audit","version":"1.2.1","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit"],"author":"","license":"MIT","_id":"@seomator/seo-audit@1.2.1","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"457fd1e283bf08bb55ef250f8250ae46c5ae0e2f","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-1.2.1.tgz","fileCount":4,"integrity":"sha512-VmphGc/bJeFswfimubC8g9pgWlx/aMNK2ke5w791lpQLdySDAg5+MXrErnUvsmVNEpRcYt9uOzTLskigy1p7Ww==","signatures":[{"sig":"MEQCIFykhHuAqKIr+OmXBzidDmkzwFGroOQYqwKR5rjVl2FjAiBUmhJyNK6PX0uytHZW89kX9alg048hWOwSKvAkk7OBIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173128},"main":"./dist/cli.js","type":"module","types":"./dist/cli.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"a54c3ddb964bf90f605ac98ea3c3ab4fbfe94c00","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","prepublishOnly":"npm run build"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 55 rules across 9 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","cli-progress":"^3.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_1.2.1_1769181682891_0.25000286347528444","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@seomator/seo-audit","version":"1.2.2","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit"],"author":"","license":"MIT","_id":"@seomator/seo-audit@1.2.2","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"d9cafcb24227bc77fc4e32124de34827e35d2e9e","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-1.2.2.tgz","fileCount":4,"integrity":"sha512-/hXj8CEl3qx8XzVzkFBGS/4jJa4yYghywdrM2edSuF3LG73GVw8G8P9Xv3JgPAUyUS0z4puggtYkqgJ7ljxYBQ==","signatures":[{"sig":"MEYCIQCoVgKJlF+8pd5kUCnMGVgkgNqaZCL3tRBaE2C58n60MwIhAOK8WJ9vP8uKFIqmGm10MsLIUGOzUBS3NJbflDuDwU3e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173128},"main":"./dist/cli.js","type":"module","types":"./dist/cli.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"a886bc47b9f785bdaaec71465cdf6697c57e521b","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","prepublishOnly":"npm run build"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 55 rules across 9 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","cli-progress":"^3.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_1.2.2_1769181891526_0.5216061462332839","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@seomator/seo-audit","version":"1.2.3","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit"],"author":"","license":"MIT","_id":"@seomator/seo-audit@1.2.3","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"383396c757d021eca115662421e09a7caea2317e","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-1.2.3.tgz","fileCount":4,"integrity":"sha512-/oo8kHzz0KZd8ZQglTmg2XaS0PC6rGeWprvN8cGsPs0Adozc0iST1bwtU3SlMnKkaLSxPKjAS1xtjvPl9hQa3A==","signatures":[{"sig":"MEUCIQCkLd1WGeGutDCDz2W68td2BjY2UxbSD3TWSEh/sZbtpwIgZyqwO0AUklIVC9cgXwmJXj1QYIbp6hS302EDO778gvg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173385},"main":"./dist/cli.js","type":"module","types":"./dist/cli.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"64530e786f5376ecb3c2c2a83a6a45f61e98908f","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","prepublishOnly":"npm run build"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 55 rules across 9 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","cli-progress":"^3.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_1.2.3_1769182683094_0.9806261674381755","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@seomator/seo-audit","version":"1.3.0","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit"],"author":"","license":"MIT","_id":"@seomator/seo-audit@1.3.0","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"fe292ff2fbcbe113e4306e19f9b15f42393716fb","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-1.3.0.tgz","fileCount":4,"integrity":"sha512-vbYDOY9Vtl8epFzaw8kXUhmKraLF7bgtwB/Qdan3SkYbY2DS85STtVUBGzNdrBvQWSR8aBBQojRU7nrW2Ix+DQ==","signatures":[{"sig":"MEUCIQCNOfzGS6O/udeYbwTpvgEzO9eBoFteIL8EyEAAsqENAAIgP8kq3TpTcAlqBHiB2RHn96SmePwEptTZYeZ2cLnI4zw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":173760},"main":"./dist/cli.js","type":"module","types":"./dist/cli.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"90097618b7bfea3ad6d84bc847a1e64e8861985e","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","prepublishOnly":"npm run build"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 55 rules across 9 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","cli-progress":"^3.12.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","@types/cli-progress":"^3.11.6"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_1.3.0_1769183170393_0.5103213237171118","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@seomator/seo-audit","version":"2.2.0","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit"],"author":"","license":"MIT","_id":"@seomator/seo-audit@2.2.0","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"88f1451305c3bcb7f6d012728d9aad85e7d03c12","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-2.2.0.tgz","fileCount":9,"integrity":"sha512-C/a8bAMRe4OrCxXpex4BYka6noTAryEVhiK6pILkXBJAzjiypTwsw85ERJt56COMKpMs5M1dj6ZZgIygpJNkZg==","signatures":[{"sig":"MEQCIGi+VgrzFHbFjHM2zJpy1ZMxH4Ju40WgFS0yfl2Qk6awAiApjVkEjKrgrK3tXYPLe3pj/izLNgkmTV31ZCAcekhRhQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":697693},"main":"./dist/cli.js","type":"module","types":"./dist/cli.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"453a801df1eb9abfc39745d8f4b5d8132ce69c89","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","prepublishOnly":"npm run build"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 148 rules across 16 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","@iarna/toml":"^2.2.5","cli-progress":"^3.12.0","better-sqlite3":"^12.6.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","shadcn":"^3.7.0","vitest":"^2.1.8","typescript":"^5.7.2","@types/node":"^22.10.2","@types/cli-progress":"^3.11.6","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_2.2.0_1769438758615_0.542369142326065","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@seomator/seo-audit","version":"3.0.0","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit","javascript-rendering","redirect-checker","html-validation","ai-seo","geo","hreflang","eeat","technical-seo"],"author":"","license":"MIT","_id":"@seomator/seo-audit@3.0.0","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"5fc7a172a6699a45157187d8dec2b38fc417345b","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-3.0.0.tgz","fileCount":9,"integrity":"sha512-LOJHxTvp9MfNWZO0sqHr7Me2q1iqWchXDDZ0/4PP3p1HVk3VZXKQw20C4MFxxTV5mH3uCyqg9gWEatWRIxvmnw==","signatures":[{"sig":"MEYCIQCM8ABRQSuqnIE+0k6oLbK1XZTIYgYF24karm93wxvueAIhAPeXNQ0Hqo9+M2T0C9CtAwtdQItlgULX8RoTJc/7sKfn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":954064},"main":"./dist/cli.js","type":"module","types":"./dist/cli.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/cli.d.ts","import":"./dist/cli.js"}},"gitHead":"59da5d62745132ca26becc060ba5196958ba6acc","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","electron:dev":"electron-vite dev -c electron/electron-vite.config.ts","electron:dist":"electron-builder install-app-deps && npm run electron:build && electron-builder","electron:icon":"node scripts/generate-icon.mjs","electron:pack":"electron-builder install-app-deps && npm run electron:build && electron-builder --dir","electron:build":"electron-vite build -c electron/electron-vite.config.ts","prepublishOnly":"npm run build","electron:dist:mac":"electron-builder install-app-deps && npm run electron:build && electron-builder --mac","electron:dist:win":"electron-builder install-app-deps && npm run electron:build && electron-builder --win"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 251 rules across 20 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","@iarna/toml":"^2.2.5","cli-progress":"^3.12.0","better-sqlite3":"^12.6.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^19.2.4","shadcn":"^3.7.0","vitest":"^2.1.8","zustand":"^5.0.11","electron":"^40.4.0","recharts":"^3.7.0","react-dom":"^19.2.4","typescript":"^5.7.2","@types/node":"^22.10.2","tailwindcss":"^4.1.18","@types/react":"^19.2.14","electron-vite":"^5.0.0","@types/react-dom":"^19.2.3","electron-builder":"^26.7.0","react-router-dom":"^7.13.0","@tailwindcss/vite":"^4.1.18","@types/cli-progress":"^3.11.6","@vitejs/plugin-react":"^5.1.4","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_3.0.0_1770881245313_0.859432788160001","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@seomator/seo-audit","version":"3.0.1","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit","javascript-rendering","redirect-checker","html-validation","ai-seo","geo","hreflang","eeat","technical-seo"],"author":"","license":"MIT","_id":"@seomator/seo-audit@3.0.1","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"25a89ca06006db6becc575cbbc9623007098c6cc","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-3.0.1.tgz","fileCount":12,"integrity":"sha512-hOZ36MGUrlCpN3i1O81EpgmSO+ih0Tq2knVsxHf05UB1a//ZBxhHJ/i7I/nkxwG8a0dqkFLAM+BxBKWqQ8IiJw==","signatures":[{"sig":"MEQCIDi2Nh3/IDzOeFiMUiKGaVNApkyfSr/T3UYqX2r3MvCiAiBqocBaxxh1OU3uuYslwpBNdBySxh8tZJiOKuxzK+wo1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1657537},"main":"./dist-electron/main/index.js","type":"module","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d40670cb23b6f1a5e95728fb9778362ced65af0e","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","electron:dev":"electron-vite dev -c electron/electron-vite.config.ts","electron:dist":"electron-builder install-app-deps && npm run electron:build && electron-builder","electron:icon":"node scripts/generate-icon.mjs","electron:pack":"electron-builder install-app-deps && npm run electron:build && electron-builder --dir","electron:build":"electron-vite build -c electron/electron-vite.config.ts","prepublishOnly":"npm run build","electron:dist:mac":"electron-builder install-app-deps && npm run electron:build && electron-builder --mac","electron:dist:win":"electron-builder install-app-deps && npm run electron:build && electron-builder --win"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 251 rules across 20 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","@iarna/toml":"^2.2.5","cli-progress":"^3.12.0","better-sqlite3":"^12.6.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^19.2.4","shadcn":"^3.7.0","vitest":"^2.1.8","zustand":"^5.0.11","electron":"^40.4.0","recharts":"^3.7.0","react-dom":"^19.2.4","typescript":"^5.7.2","@types/node":"^22.10.2","tailwindcss":"^4.1.18","@types/react":"^19.2.14","electron-vite":"^5.0.0","@types/react-dom":"^19.2.3","electron-builder":"^26.7.0","react-router-dom":"^7.13.0","@tailwindcss/vite":"^4.1.18","@types/cli-progress":"^3.11.6","@vitejs/plugin-react":"^5.1.4","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_3.0.1_1778060085141_0.3610606532863756","host":"s3://npm-registry-packages-npm-production"}},"3.1.0":{"name":"@seomator/seo-audit","version":"3.1.0","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit","javascript-rendering","redirect-checker","html-validation","ai-seo","geo","hreflang","eeat","technical-seo"],"author":"","license":"MIT","_id":"@seomator/seo-audit@3.1.0","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"e4684e7988eedfc6d8a9f7834019bf8262f3b226","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-3.1.0.tgz","fileCount":12,"integrity":"sha512-frYJLDtTr9myooSanb7ljz92ZqFUquHuEBNAImvLO8P1UhnW4OeXspjRubPK+8yT9VkfmiZGLcLWhZNA38ZspA==","signatures":[{"sig":"MEUCIQCPIhoMAZlpKyiPdli1N0M5jyKHKUy19mTrpCnJ6WQPAgIgaxfSowYSKhRMsYlAwq3drJrpfp93RGy8ojPp162O26g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1734179},"main":"./dist-electron/main/index.js","type":"module","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"fa1854a2450952d542909b557d87a502241bd992","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","typecheck":"tsc --noEmit","electron:dev":"electron-vite dev -c electron/electron-vite.config.ts","electron:dist":"electron-builder install-app-deps && npm run electron:build && electron-builder","electron:icon":"node scripts/generate-icon.mjs","electron:pack":"electron-builder install-app-deps && npm run electron:build && electron-builder --dir","electron:build":"electron-vite build -c electron/electron-vite.config.ts","prepublishOnly":"npm run build","electron:dist:mac":"electron-builder install-app-deps && npm run electron:build && electron-builder --mac","electron:dist:win":"electron-builder install-app-deps && npm run electron:build && electron-builder --win"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 256 rules across 20 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","@iarna/toml":"^2.2.5","cli-progress":"^3.12.0","better-sqlite3":"^12.6.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^19.2.4","shadcn":"^3.7.0","vitest":"^2.1.8","zustand":"^5.0.11","electron":"^40.4.0","recharts":"^3.7.0","react-dom":"^19.2.4","typescript":"^5.7.2","@types/node":"^22.10.2","tailwindcss":"^4.1.18","@types/react":"^19.2.14","electron-vite":"^5.0.0","@types/react-dom":"^19.2.3","electron-builder":"^26.7.0","react-router-dom":"^7.13.0","@tailwindcss/vite":"^4.1.18","@types/cli-progress":"^3.11.6","@vitejs/plugin-react":"^5.1.4","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_3.1.0_1788194437334_0.13728178475748454","host":"s3://npm-registry-packages-npm-production"}},"3.1.1":{"name":"@seomator/seo-audit","version":"3.1.1","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit","javascript-rendering","redirect-checker","html-validation","ai-seo","geo","hreflang","eeat","technical-seo"],"author":"","license":"MIT","_id":"@seomator/seo-audit@3.1.1","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"901c937f5410d0b0ac28cb0e8de5fe0a15a91feb","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-3.1.1.tgz","fileCount":11,"integrity":"sha512-pb+uOi+mU2Gwqyog0XBL9sK8GTXJhaul8kD+UTFgLqUHq0wj7LqkudjJ+0vDrTkXgIPkr0j3q32GK0hUWT3E3w==","signatures":[{"sig":"MEUCIQC0z6lcR9JLrD5MlPmCag4t0hT2OSr4NcZ0khzTUXgAqAIgG2nNUnvm11LvniRbrnaeffRmLByOkaMqG6M0f4ljqAY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1734527},"main":"./dist-electron/main/index.js","type":"module","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b446b63c13cb718fea3886375b1a3710af59d071","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","typecheck":"tsc --noEmit","electron:dev":"electron-vite dev -c electron/electron-vite.config.ts","electron:dist":"electron-builder install-app-deps && npm run electron:build && electron-builder","electron:icon":"node scripts/generate-icon.mjs","electron:pack":"electron-builder install-app-deps && npm run electron:build && electron-builder --dir","electron:build":"electron-vite build -c electron/electron-vite.config.ts","prepublishOnly":"npm run build","electron:dist:mac":"electron-builder install-app-deps && npm run electron:build && electron-builder --mac","electron:dist:win":"electron-builder install-app-deps && npm run electron:build && electron-builder --win"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 256 rules across 20 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","@iarna/toml":"^2.2.5","cli-progress":"^3.12.0","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^19.2.4","shadcn":"^3.7.0","vitest":"^2.1.8","zustand":"^5.0.11","electron":"^40.4.0","recharts":"^3.7.0","react-dom":"^19.2.4","typescript":"^5.7.2","@types/node":"^22.10.2","tailwindcss":"^4.1.18","@types/react":"^19.2.14","electron-vite":"^5.0.0","@types/react-dom":"^19.2.3","electron-builder":"^26.7.0","react-router-dom":"^7.13.0","@tailwindcss/vite":"^4.1.18","@types/cli-progress":"^3.11.6","@vitejs/plugin-react":"^5.1.4","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_3.1.1_1788199778488_0.46511801358199145","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@seomator/seo-audit","version":"3.2.0","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit","javascript-rendering","redirect-checker","html-validation","ai-seo","geo","hreflang","eeat","technical-seo"],"author":"","license":"MIT","_id":"@seomator/seo-audit@3.2.0","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"700737e8e4895b5f49b24b3fc8d638c74ed6ba18","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-3.2.0.tgz","fileCount":11,"integrity":"sha512-vu6i2JgiRwSZFLB508NN0D3kfTw7q8pCIc61Qq4ru2ydN4EopDerF/qsrNNhT0itpySi1tZMdoA4f+u4moVG3w==","signatures":[{"sig":"MEUCIQCU7GTIQ86as/3bLthTiQqnp6HNfaa8su9jwUbNPEv7kgIgLu1i3IDesjQIb5ezR+mMGFnNU1Dx/2C2whfIiqY0eiU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1870038},"main":"./dist-electron/main/index.js","type":"module","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"26adce40e912860e44fa47d28857b48fc7b19689","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","typecheck":"tsc --noEmit","electron:dev":"electron-vite dev -c electron/electron-vite.config.ts","electron:dist":"electron-builder install-app-deps && npm run electron:build && electron-builder","electron:icon":"node scripts/generate-icon.mjs","electron:pack":"electron-builder install-app-deps && npm run electron:build && electron-builder --dir","electron:build":"electron-vite build -c electron/electron-vite.config.ts","prepublishOnly":"npm run typecheck && npm run build","electron:dist:mac":"electron-builder install-app-deps && npm run electron:build && electron-builder --mac","electron:dist:win":"electron-builder install-app-deps && npm run electron:build && electron-builder --win"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 287 rules across 20 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","web-vitals":"^4.2.4","@iarna/toml":"^2.2.5","cli-progress":"^3.12.0","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^19.2.4","shadcn":"^3.7.0","vitest":"^2.1.8","zustand":"^5.0.11","electron":"^40.4.0","recharts":"^3.7.0","react-dom":"^19.2.4","domhandler":"^5.0.3","typescript":"^5.7.2","@types/node":"^22.10.2","tailwindcss":"^4.1.18","@types/react":"^19.2.14","electron-vite":"^5.0.0","@types/react-dom":"^19.2.3","electron-builder":"^26.7.0","react-router-dom":"^7.13.0","@tailwindcss/vite":"^4.1.18","@types/cli-progress":"^3.11.6","@vitejs/plugin-react":"^5.1.4","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_3.2.0_1788254131310_0.19842976977681115","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"@seomator/seo-audit","version":"3.3.0","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit","javascript-rendering","redirect-checker","html-validation","ai-seo","geo","hreflang","eeat","technical-seo"],"author":"","license":"MIT","_id":"@seomator/seo-audit@3.3.0","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"b820bc040f31600ac9d3dcce98f9ebcbe1d1f752","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-3.3.0.tgz","fileCount":11,"integrity":"sha512-71NOaQxNy1Sl+vp4vuTcsLdxHZjqmTybN0KE7d5IAMYMX9tlv03BTzk6XkaCauf/0RN4ppfCT90g8t2PpVbHZg==","signatures":[{"sig":"MEYCIQCrAYB9F2EDX4IJJW/GyoGMYd5itEVsE/0KwmVZ+FrGVQIhAKbtchAIqtfoWaKjaGumZR+rfXX+Xad77T5S2YiyrZNp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2148890},"main":"./dist-electron/main/index.js","type":"module","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"5a80eaffbfea70ca7cd4b5a8ff17d5e97cd7584c","scripts":{"dev":"tsup --watch","test":"vitest","build":"tsup","test:run":"vitest run","sync:docs":"node scripts/sync-docs.mjs","typecheck":"tsc --noEmit","check:docs":"node scripts/sync-docs.mjs --check","electron:dev":"electron-vite dev -c electron/electron-vite.config.ts","electron:dist":"electron-builder install-app-deps && npm run electron:build && electron-builder","electron:icon":"node scripts/generate-icon.mjs","electron:pack":"electron-builder install-app-deps && npm run electron:build && electron-builder --dir","electron:build":"electron-vite build -c electron/electron-vite.config.ts","prepublishOnly":"npm run typecheck && npm run build && npm run check:docs","electron:dist:mac":"electron-builder install-app-deps && npm run electron:build && electron-builder --mac","electron:dist:win":"electron-builder install-app-deps && npm run electron:build && electron-builder --win"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 332 rules across 20 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","web-vitals":"^4.2.4","@iarna/toml":"^2.2.5","cli-progress":"^3.12.0","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^19.2.4","shadcn":"^3.7.0","vitest":"^2.1.8","zustand":"^5.0.11","electron":"^40.4.0","recharts":"^3.7.0","react-dom":"^19.2.4","domhandler":"^5.0.3","typescript":"^5.7.2","@types/node":"^22.10.2","tailwindcss":"^4.1.18","@types/react":"^19.2.14","electron-vite":"^5.0.0","@types/react-dom":"^19.2.3","electron-builder":"^26.7.0","react-router-dom":"^7.13.0","@tailwindcss/vite":"^4.1.18","@types/cli-progress":"^3.11.6","@vitejs/plugin-react":"^5.1.4","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_3.3.0_1788293343067_0.3856354510329596","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@seomator/seo-audit","version":"4.0.0","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit","javascript-rendering","redirect-checker","html-validation","ai-seo","geo","hreflang","eeat","technical-seo"],"author":"","license":"MIT","_id":"@seomator/seo-audit@4.0.0","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"8799c0d2a6096f4de3aab9f1a00f9d6c68b03116","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-4.0.0.tgz","fileCount":16,"integrity":"sha512-e+MfKs24qzIvjPWxCamPMLZo1pJDoMGGNal41JUBmCpnZUkbpGspRrAerIluNH8ZsEMhZUCYaX5w55fEl2Nrvw==","signatures":[{"sig":"MEQCIBkFcLFK82Nr+uVkxXj2wPMNkuvEu4ku5IIL8Z1i+LCHAiBcXLnacT4POwN7IurIfMQygjwOSG2iAw83ZIuBkeRoRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2760656},"main":"./dist-electron/main/index.js","type":"module","engines":{"node":">=20.3.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9e5bc7414a2434e9f9452f167a0e610c0f693472","scripts":{"dev":"tsup --watch","test":"vitest","build":"npm run clean && npm run build:cli && npm run web:build","clean":"node scripts/clean.mjs","web:dev":"concurrently -n api,web -c blue,green \"node --watch dist/cli.js serve --port 7360 --no-open\" \"vite -c vite.web.config.ts\"","test:run":"vitest run","build:cli":"tsup","gen:icons":"node scripts/gen-icons.mjs","sync:docs":"node scripts/sync-docs.mjs","typecheck":"tsc --noEmit","web:build":"vite build -c vite.web.config.ts","check:docs":"node scripts/sync-docs.mjs --check","gen:tokens":"node scripts/gen-tokens.mjs","check:tokens":"node scripts/gen-tokens.mjs --check","electron:dev":"electron-vite dev -c electron/electron-vite.config.ts","electron:dist":"electron-builder install-app-deps && npm run electron:build && electron-builder","electron:icon":"node scripts/generate-icon.mjs","electron:pack":"electron-builder install-app-deps && npm run electron:build && electron-builder --dir","electron:build":"electron-vite build -c electron/electron-vite.config.ts","prepublishOnly":"npm run typecheck && npm run build && npm run check:docs && npm run check:tokens","electron:dist:mac":"electron-builder install-app-deps && npm run electron:build && electron-builder --mac","electron:dist:win":"electron-builder install-app-deps && npm run electron:build && electron-builder --win"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 332 rules across 20 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","web-vitals":"^4.2.4","@iarna/toml":"^2.2.5","cli-progress":"^3.12.0","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^19.2.4","shadcn":"^3.7.0","vitest":"^2.1.8","zustand":"^5.0.11","electron":"^40.4.0","react-dom":"^19.2.4","domhandler":"^5.0.3","typescript":"^5.7.2","@types/node":"^22.10.2","tailwindcss":"^4.1.18","@types/react":"^19.2.14","concurrently":"^10.0.5","electron-vite":"^5.0.0","@types/react-dom":"^19.2.3","electron-builder":"^26.7.0","react-router-dom":"^7.13.0","@tailwindcss/vite":"^4.1.18","@types/cli-progress":"^3.11.6","@vitejs/plugin-react":"^5.1.4","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_4.0.0_1788510861029_0.30556470059616214","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"@seomator/seo-audit","version":"4.1.0","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit","javascript-rendering","redirect-checker","html-validation","ai-seo","geo","hreflang","eeat","technical-seo"],"author":"","license":"MIT","_id":"@seomator/seo-audit@4.1.0","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"bin":{"seomator":"dist/cli.js"},"dist":{"shasum":"257950afc95d5e42880df1910edfc0d09919bc74","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-4.1.0.tgz","fileCount":16,"integrity":"sha512-qqu2aMruCAgCl5DJzZ++f4FEnFKAJV/pakZMbaLY482VDE5dpXltnYR4ALmn8tsg5sPL0kJvX/z7fGEpFMGy2Q==","signatures":[{"sig":"MEQCIGCfbcprn8xAXvqUxqg2Ncpg6k0U/CfGRQBNOFSqVlWlAiBC+LtPsFMQPg4KFEwoY83VAS6jdkrnqJxlJvw3Yq4MPA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2778203},"main":"./dist-electron/main/index.js","type":"module","engines":{"node":">=20.3.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"485424818684e2a7cd227f17b0c17a6991c55d91","scripts":{"dev":"tsup --watch","test":"vitest","build":"npm run clean && npm run build:cli && npm run web:build","clean":"node scripts/clean.mjs","web:dev":"concurrently -n api,web -c blue,green \"node --watch dist/cli.js serve --port 7360 --no-open\" \"vite -c vite.web.config.ts\"","test:run":"vitest run","build:cli":"tsup","gen:icons":"node scripts/gen-icons.mjs","sync:docs":"node scripts/sync-docs.mjs","typecheck":"tsc --noEmit","web:build":"vite build -c vite.web.config.ts","check:docs":"node scripts/sync-docs.mjs --check","gen:tokens":"node scripts/gen-tokens.mjs","rebuild:cli":"npm rebuild better-sqlite3 && node scripts/resign-native.mjs","check:tokens":"node scripts/gen-tokens.mjs --check","electron:dev":"electron-vite dev -c electron/electron-vite.config.ts","electron:dist":"electron-builder install-app-deps && npm run electron:build && electron-builder","electron:icon":"node scripts/generate-icon.mjs","electron:pack":"electron-builder install-app-deps && npm run electron:build && electron-builder --dir","electron:build":"electron-vite build -c electron/electron-vite.config.ts","prepublishOnly":"npm run typecheck && npm run build && npm run check:docs && npm run check:tokens","rebuild:electron":"electron-rebuild -f -w better-sqlite3 && node scripts/resign-native.mjs","electron:dist:mac":"electron-builder install-app-deps && npm run electron:build && electron-builder --mac","electron:dist:win":"electron-builder install-app-deps && npm run electron:build && electron-builder --win"},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"repository":{"url":"git+https://github.com/seo-skills/seo-audit-skill.git","type":"git"},"_npmVersion":"11.6.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 332 rules across 20 categories","directories":{},"_nodeVersion":"24.10.0","dependencies":{"ora":"^8.1.1","chalk":"^5.3.0","cheerio":"^1.0.0","commander":"^12.1.0","cli-table3":"^0.6.5","log-update":"^6.1.0","playwright":"^1.49.1","web-vitals":"^4.2.4","@iarna/toml":"^2.2.5","cli-progress":"^3.12.0","better-sqlite3":"^12.11.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.3.5","react":"^19.2.4","shadcn":"^3.7.0","vitest":"^2.1.8","zustand":"^5.0.11","electron":"^40.4.0","react-dom":"^19.2.4","domhandler":"^5.0.3","typescript":"^5.7.2","@types/node":"^22.10.2","tailwindcss":"^4.1.18","@types/react":"^19.2.14","concurrently":"^10.0.5","electron-vite":"^5.0.0","@types/react-dom":"^19.2.3","electron-builder":"^26.7.0","react-router-dom":"^7.13.0","@tailwindcss/vite":"^4.1.18","@types/cli-progress":"^3.11.6","@vitejs/plugin-react":"^5.1.4","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/seo-audit_4.1.0_1788610311577_0.06241252123275354","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@seomator/seo-audit","version":"5.0.0","description":"SEOmator - Comprehensive SEO audit CLI tool with 332 rules across 20 categories","type":"module","bin":{"seomator":"dist/cli.js"},"main":"./dist-electron/main/index.js","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"scripts":{"build":"npm run clean && npm run build:cli && npm run web:build","clean":"node scripts/clean.mjs","build:cli":"tsup","typecheck":"tsc --noEmit","dev":"tsup --watch","test":"vitest","test:run":"vitest run","electron:dev":"electron-vite dev -c electron/electron-vite.config.ts","electron:build":"electron-vite build -c electron/electron-vite.config.ts","rebuild:electron":"electron-rebuild -f -w better-sqlite3 && node scripts/resign-native.mjs","rebuild:cli":"npm rebuild better-sqlite3 && node scripts/resign-native.mjs","electron:icon":"node scripts/generate-icon.mjs","electron:pack":"electron-builder install-app-deps && npm run electron:build && electron-builder --dir","electron:dist":"electron-builder install-app-deps && npm run electron:build && electron-builder","electron:dist:mac":"electron-builder install-app-deps && npm run electron:build && electron-builder --mac","electron:dist:win":"electron-builder install-app-deps && npm run electron:build && electron-builder --win","prepublishOnly":"npm run typecheck && npm run build && npm run check:docs && npm run check:tokens","sync:docs":"node scripts/sync-docs.mjs","gen:icons":"node scripts/gen-icons.mjs","gen:tokens":"node scripts/gen-tokens.mjs","check:tokens":"node scripts/gen-tokens.mjs --check","check:docs":"node scripts/sync-docs.mjs --check","web:build":"vite build -c vite.web.config.ts","web:dev":"concurrently -n api,web -c blue,green \"node --watch dist/cli.js serve --port 7360 --no-open\" \"vite -c vite.web.config.ts\""},"keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit","javascript-rendering","redirect-checker","html-validation","ai-seo","geo","hreflang","eeat","technical-seo"],"author":"","license":"MIT","repository":{"type":"git","url":"git+https://github.com/seo-skills/seo-audit-skill.git"},"bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"homepage":"https://github.com/seo-skills/seo-audit-skill#readme","engines":{"node":">=20.3.0"},"dependencies":{"@iarna/toml":"^2.2.5","better-sqlite3":"^12.11.1","chalk":"^5.3.0","cheerio":"^1.0.0","cli-progress":"^3.12.0","cli-table3":"^0.6.5","commander":"^12.1.0","log-update":"^6.1.0","ora":"^8.1.1","playwright":"^1.49.1","web-vitals":"^4.2.4"},"devDependencies":{"@tailwindcss/vite":"^4.1.18","@types/better-sqlite3":"^7.6.13","@types/cli-progress":"^3.11.6","@types/node":"^22.10.2","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^5.1.4","concurrently":"^10.0.5","domhandler":"^5.0.3","electron":"^40.4.0","electron-builder":"^26.7.0","electron-vite":"^5.0.0","react":"^19.2.4","react-dom":"^19.2.4","react-router-dom":"^7.13.0","shadcn":"^3.7.0","tailwindcss":"^4.1.18","tsup":"^8.3.5","typescript":"^5.7.2","vitest":"^2.1.8","zustand":"^5.0.11"},"_id":"@seomator/seo-audit@5.0.0","gitHead":"4309ff9a3c425637b95eb45aae6a117c1aa435a7","_nodeVersion":"24.10.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-WgQcZRdNs7tp7VL5SYJmIpyuklyC+QPlaXaC8KXbOHGcWFOy4SksQpQNUfZ26kW9RhHK0dKhS3wkJfd+QOI8HQ==","shasum":"c50c2327525104eac09fd45f7256ecabc6499459","tarball":"https://registry.npmjs.org/@seomator/seo-audit/-/seo-audit-5.0.0.tgz","fileCount":16,"unpackedSize":2782395,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEIMF7N8eEQLoWo/3jeaGXSLR8OtUKHLU3h34mh4QiHIAiEAiPJ/TXUdEfxFn5UiKF6XLtTk/q77nG7+uBmQRBi5bPI="}]},"_npmUser":{"name":"seomator","email":"hello@seomator.com"},"directories":{},"maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/seo-audit_5.0.0_1788610815708_0.06152021449345724"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-23T13:35:24.997Z","modified":"2026-09-05T12:20:16.028Z","1.0.0":"2026-01-23T13:35:25.232Z","1.1.0":"2026-01-23T15:10:07.812Z","1.2.0":"2026-01-23T15:20:20.378Z","1.2.1":"2026-01-23T15:21:23.034Z","1.2.2":"2026-01-23T15:24:51.669Z","1.2.3":"2026-01-23T15:38:03.230Z","1.3.0":"2026-01-23T15:46:10.661Z","2.2.0":"2026-01-26T14:45:58.831Z","3.0.0":"2026-02-12T07:27:25.533Z","3.0.1":"2026-05-06T09:34:45.380Z","3.1.0":"2026-08-31T16:40:37.477Z","3.1.1":"2026-08-31T18:09:38.685Z","3.2.0":"2026-09-01T09:15:31.459Z","3.3.0":"2026-09-01T20:09:03.215Z","4.0.0":"2026-09-04T08:34:21.211Z","4.1.0":"2026-09-05T12:11:51.754Z","5.0.0":"2026-09-05T12:20:15.880Z"},"bugs":{"url":"https://github.com/seo-skills/seo-audit-skill/issues"},"license":"MIT","homepage":"https://github.com/seo-skills/seo-audit-skill#readme","keywords":["seo","seo-audit","audit","cli","web-vitals","core-web-vitals","lighthouse","meta-tags","structured-data","accessibility","crawler","site-audit","javascript-rendering","redirect-checker","html-validation","ai-seo","geo","hreflang","eeat","technical-seo"],"repository":{"type":"git","url":"git+https://github.com/seo-skills/seo-audit-skill.git"},"description":"SEOmator - Comprehensive SEO audit CLI tool with 332 rules across 20 categories","maintainers":[{"name":"seomator","email":"hello@seomator.com"}],"readme":"# SEOmator SEO Audit Tool & Skill\n\n[![npm version](https://img.shields.io/npm/v/@seomator/seo-audit.svg)](https://www.npmjs.com/package/@seomator/seo-audit)\n[![npm downloads](https://img.shields.io/npm/dm/@seomator/seo-audit.svg)](https://www.npmjs.com/package/@seomator/seo-audit)\n[![node](https://img.shields.io/node/v/@seomator/seo-audit.svg)](https://www.npmjs.com/package/@seomator/seo-audit)\n[![license: MIT](https://img.shields.io/npm/l/@seomator/seo-audit.svg)](./LICENSE)\n\n**SEOmator is a comprehensive SEO audit tool that scans any website against 332 rules across 20 categories** — technical SEO, Core Web Vitals, structured data, accessibility, security headers, and AI/GEO search readiness — and returns a prioritized, actionable report. It ships as a **command-line tool**, an **Electron desktop app**, and a **Claude Code skill**, so you can run an SEO audit from a terminal, a visual dashboard, or directly inside an AI coding agent.\n\n> **Prefer a web interface?** Try our [Free SEO Audit Tool](https://seomator.com/free-seo-audit-tool) for a visual, browser-based SEO analysis.\n\n## Contents\n\n- [Features](#features)\n- [Installation](#installation)\n- [Desktop App](#desktop-app)\n- [Quick Start (CLI)](#quick-start-cli)\n- [Commands](#commands)\n- [Categories & Rules](#categories--rules-332-total)\n- [Configuration](#configuration)\n- [Output Formats](#output-formats)\n- [CI/CD Integration](#cicd-integration)\n- [Programmatic Usage](#programmatic-usage)\n- [Claude Code Skill](#claude-code-skill)\n- [FAQ](#faq)\n- [Requirements](#requirements)\n\n## Features\n\n- **332 SEO Audit Rules** across 20 categories\n- **Desktop App** - Visual audit dashboard with real-time progress, interactive results, score history, and light/dark theme\n- **CLI Tool** - Single page & crawl mode with 5 output formats\n- **Core Web Vitals** - LCP, CLS, FCP, TTFB, INP measurement via Playwright\n- **JavaScript Rendering Analysis** - Compare raw vs rendered DOM for SPA/CSR sites\n- **Per-Asset Checks** - Cache policy, text compression, image sizing, and redirect chains for every subresource loaded during render\n- **5 Output Formats** - Console, JSON, HTML, Markdown, and LLM-optimized XML\n- **Actionable Reports** - Every rule ships a specific fix suggestion; unmeasurable checks report as \"not measured\" instead of fake passes\n- **AI/GEO Readiness** - Check semantic HTML, AI bot access, and llms.txt\n- **Redirect Chain Detection** - Loops, broken redirects, meta/JS redirects\n- **HTML Validation** - Doctype, charset, head structure, lorem ipsum detection\n- **Cross-Page Analysis** - Sitemap URLs cross-checked against status/canonical/robots.txt, canonical chains & loops, hreflang target validation and reciprocity, duplicate content & H1s, orphan & isolated pages, inbound link quality\n- **Concurrent Crawling** - Fast multi-page audits with configurable concurrency\n- **SQLite Storage** - Persistent crawl data with compression and audit history\n- **CI/CD Ready** - Exit codes, JSON output, GitHub Actions & GitLab CI examples\n- **TOML Configuration** - Project-level settings with presets and inheritance\n\n## Installation\n\n### From npm (recommended)\n\n```bash\n# Install globally\nnpm install -g @seomator/seo-audit\n\n# Run audit\nseomator audit https://example.com\n```\n\n> **Note:** The CLI automatically uses your system Chrome, Chromium, or Edge browser for Core Web Vitals measurement. No additional browser installation is required if you have Chrome installed.\n\n### From source\n\n```bash\ngit clone https://github.com/seo-skills/seo-audit-skill.git\ncd seo-audit-skill\nnpm install\nnpm run build\n\n# Run directly\n./dist/cli.js audit https://example.com\n\n# Or link globally\nnpm link\nseomator audit https://example.com\n```\n\n## Desktop App\n\nThe desktop app provides a visual audit dashboard with real-time progress streaming, interactive results, score history, and light/dark theme support.\n\n### Running\n\n```bash\n# From source\ngit clone https://github.com/seo-skills/seo-audit-skill.git\ncd seo-audit-skill\nnpm install\nnpm run rebuild:electron   # Compile native module for Electron\nnpm run electron:dev                          # Launch with hot reload\n```\n\n### Building\n\n```bash\nnpm run electron:build    # Production build\nnpm run electron:pack     # Build + package distributable\n```\n\n### Desktop App Features\n\n- **Real-time progress** - Live category-by-category progress as the audit runs\n- **Score dashboard** - Overall score circle, category grid, and issues summary table\n- **Interactive results** - Expandable rule cards with rule descriptions, affected items, page URL badges, and inline fix suggestions\n- **Filter & navigate** - Filter by status (All/Failures/Warnings/Passed), click issues to jump to details\n- **Score history** - Track audit scores over time per domain with trend charts\n- **Light/dark theme** - Follows your system preference or toggle manually\n\n## Quick Start (CLI)\n\n```bash\n# Basic audit\nseomator audit https://example.com\n\n# Skip Core Web Vitals (faster)\nseomator audit https://example.com --no-cwv\n\n# Audit specific categories\nseomator audit https://example.com -c core,security,perf\n\n# JSON output (for CI/CD or parsing)\nseomator audit https://example.com --format json\n\n# HTML report\nseomator audit https://example.com --format html -o report.html\n\n# LLM-optimized output (pipe to Claude)\nseomator audit https://example.com --format llm --no-cwv | claude \"analyze and prioritize fixes\"\n\n# Crawl multiple pages\nseomator audit https://example.com --crawl --max-pages 20\n\n# Full options\nseomator audit https://example.com --crawl -m 50 --concurrency 5 --timeout 60000 --format json -o results.json\n```\n\n## Commands\n\n### `seomator audit <url>`\n\nRun SEO audit on a URL.\n\n| Option | Alias | Description | Default |\n|--------|-------|-------------|---------|\n| `--format <type>` | `-f` | Output format: console, json, html, markdown, llm | console |\n| `--output <path>` | `-o` | Output file path | - |\n| `--categories <list>` | `-c` | Comma-separated categories to audit | All |\n| `--json` | `-j` | Output as JSON (deprecated, use --format json) | false |\n| `--crawl` | - | Enable crawl mode for multiple pages | false |\n| `--max-pages <n>` | `-m` | Maximum pages to crawl | 10 |\n| `--concurrency <n>` | - | Concurrent requests | 3 |\n| `--timeout <ms>` | - | Request timeout in milliseconds | 30000 |\n| `--no-cwv` | - | Skip Core Web Vitals measurement | false |\n| `--mobile` | - | Second render at a mobile viewport + mobile-first parity checks (single-page) | false |\n| `--simulate-interaction` | - | Scroll and click the page so INP can be measured (reported as synthetic, unscored) | false |\n| `--verbose` | `-v` | Show progress | false |\n| `--config <path>` | - | Config file path | - |\n| `--no-save` | - | Do not store this audit in your history | - |\n| `--json-report` | - | Also write the legacy JSON report to .seomator/reports/ | false |\n\nAudits are stored in `~/.seomator/audits.db` by default, which is what\n`seomator report`, `seomator compare` and the desktop app read. Set\n`SEOMATOR_HOME` to keep that data elsewhere, or `[output] save = false` in\n`seomator.toml` to opt a project out.\n\n### `seomator serve`\n\nRun the local dashboard: every audit you have run, in your browser.\n\n```bash\nseomator serve                   # opens http://127.0.0.1:7360\nseomator serve --port 0          # pick a free port\nseomator serve --no-open         # do not open a browser\n```\n\nIt reads the same `~/.seomator/audits.db` the CLI writes, binds to loopback\nonly, and makes no outbound requests. Every `/api` request needs the per-launch\ntoken, which is printed once and written to `~/.seomator/serve.json` for agents:\n\n```bash\nTOKEN=$(jq -r .token ~/.seomator/serve.json)\ncurl -s -H \"X-SEOmator-Token: $TOKEN\" http://127.0.0.1:7360/api/audits | jq\n```\n\nFull reference: [docs/WEB-DASHBOARD.md](docs/WEB-DASHBOARD.md).\n\n### `seomator init`\n\nCreate a `seomator.toml` config file.\n\n```bash\nseomator init                    # Interactive setup\nseomator init -y                 # Use defaults\nseomator init --preset blog      # Blog preset\nseomator init --preset ecommerce # E-commerce preset\nseomator init --preset ci        # Minimal CI config\n```\n\n### `seomator crawl <url>`\n\nCrawl website without running analysis. Saves data for later analysis with `seomator analyze`.\n\n```bash\nseomator crawl https://example.com -m 20\n```\n\n### `seomator analyze [crawl-id]`\n\nRun rules on stored crawl data.\n\n```bash\nseomator analyze                           # Analyze latest crawl\nseomator analyze --latest                  # Stored in your history by default\nseomator analyze 2026-01-23-abc123         # Specific crawl\n```\n\n### `seomator report [query]`\n\nView and query past audits. Reads your history, falling back to the legacy\nJSON reports under `.seomator/reports/`.\n\n```bash\nseomator report --list                     # List stored audits\nseomator report --project mysite           # Filter by project\nseomator report 2026-09-02-a1b2c3          # Show one audit\n```\n\n### `seomator compare [domain]`\n\nCompare the latest audit of a site against a previous one, so you can see what\na deploy changed. Requires at least two stored audits of the same domain.\n\n```bash\nseomator audit https://example.com           # run before the deploy\nseomator audit https://example.com           # run after\n\nseomator compare example.com                 # diff the two most recent runs\nseomator compare example.com --trend         # score history for the domain\nseomator compare example.com --against 2026-08-31-a1b2c3\nseomator compare example.com --json          # machine-readable diff\nseomator compare example.com --fail-on-regression   # exit 1 if worse (for CI)\n```\n\nRules are diffed by ID, so a rule that broke and a different one that got fixed\nare reported separately rather than cancelling out in a count.\n\n### `seomator config [key] [value]`\n\nView or modify configuration.\n\n```bash\nseomator config --list                     # Show all config\nseomator config crawler.max_pages 50       # Set value\nseomator config validate                   # Validate config\n```\n\n### `seomator db`\n\nDatabase management.\n\n```bash\nseomator db migrate              # Migrate JSON to SQLite\nseomator db migrate --dry-run    # Preview migration\nseomator db stats -v             # Database statistics\nseomator db restore              # Rollback migration\n```\n\n### `seomator self doctor`\n\nCheck system setup and dependencies.\n\n```bash\nseomator self doctor -v          # Verbose diagnostics\n```\n\n## Exit Codes\n\n| Code | Meaning |\n|------|---------|\n| 0 | Audit passed (score >= 70) |\n| 1 | Audit failed (score < 70) |\n| 2 | Error occurred |\n\n## Categories & Rules (332 total)\n\n### Core (24 rules) - 12% weight\n\n| Rule | Description |\n|------|-------------|\n| `core-title-present` | `<title>` tag exists |\n| `core-title-length` | Title should be 30-60 characters |\n| `core-description-present` | Meta description exists |\n| `core-description-length` | Description should be 120-160 characters |\n| `core-canonical-present` | Canonical URL exists |\n| `core-canonical-valid` | Canonical URL is valid absolute URL |\n| `core-viewport-present` | Viewport meta tag exists |\n| `core-favicon-present` | Favicon link exists |\n| `core-h1-present` | At least one H1 exists |\n| `core-h1-single` | Only one H1 exists |\n| `core-canonical-header` | HTML canonical and Link header match |\n| `core-nosnippet` | Detects nosnippet/max-snippet:0 directives |\n| `core-robots-meta` | Checks noindex/nofollow directives |\n| `core-title-unique` | Titles should be unique site-wide |\n| `core-canonical-conflicting` | HTML and header canonicals should not conflict |\n| `core-canonical-to-homepage` | Canonical should not always point to homepage |\n| `core-canonical-http-mismatch` | Canonical protocol should match page protocol |\n| `core-canonical-loop` | Detects circular canonical chains |\n| `core-canonical-to-noindex` | Canonical should not point to noindexed page |\n| `core-canonical-outside-head` | No canonical element outside the `<head>` |\n| `core-canonical-attributes` | Canonical elements carry only rel and href attributes |\n| `core-canonical-multiple` | Multiple canonical elements should agree |\n| `core-canonical-external` | Canonical pointing to a different host (worth verifying) |\n| `core-robots-directive-mismatch` | Robots directives in meta tags and X-Robots-Tag header should be consistent |\n\n### Performance (26 rules) - 12% weight\n\n| Rule | Description |\n|------|-------------|\n| `cwv-lcp` | Largest Contentful Paint (<2.5s pass, >4s fail) |\n| `cwv-cls` | Cumulative Layout Shift (<0.1 pass, >0.25 fail) |\n| `cwv-inp` | Interaction to Next Paint (<200ms pass, >500ms fail) |\n| `cwv-ttfb` | Time to First Byte (<800ms pass, >1800ms fail) |\n| `cwv-fcp` | First Contentful Paint (<1.8s pass, >3s fail) |\n| `perf-dom-size` | DOM should have <1500 nodes |\n| `perf-css-file-size` | CSS files should be reasonably sized |\n| `perf-font-loading` | Font-display: swap should be used |\n| `perf-preconnect` | Preconnect hints for third-party origins |\n| `perf-render-blocking` | Scripts should use async/defer |\n| `perf-lazy-above-fold` | Above-fold images should not be lazy-loaded |\n| `perf-lcp-hints` | LCP element should be preloaded |\n| `perf-text-compression` | Responses should use gzip/Brotli compression |\n| `perf-brotli` | Prefer Brotli over gzip for better compression |\n| `perf-cache-policy` | Static assets should have cache headers |\n| `perf-minify-css` | CSS should be minified |\n| `perf-minify-js` | JavaScript should be minified |\n| `perf-response-time` | Server response time should be <200ms |\n| `perf-http2` | Site should serve over HTTP/2 |\n| `perf-page-weight` | Total page size should be <3MB |\n| `perf-js-file-size` | Individual JS files should be <500KB |\n| `perf-video-for-animations` | Use `<video>` instead of animated GIFs |\n| `perf-asset-compression` | Text assets >2KB should be gzip/Brotli compressed (requires render) |\n| `perf-asset-cache-policy` | Static assets should have cache max-age of at least 1 hour (requires render) |\n| `perf-legacy-javascript` | No polyfills modern browsers do not need |\n| `perf-image-encoding` | Images should be <100KB and not legacy BMP/TIFF (requires render) |\n\n### Links (24 rules) - 8% weight\n\n| Rule | Description |\n|------|-------------|\n| `links-broken-internal` | Internal links should return 200 |\n| `links-external-valid` | External links should be reachable |\n| `links-internal-present` | Page should have internal links |\n| `links-nofollow-appropriate` | nofollow used appropriately |\n| `links-anchor-text` | Anchor text should be descriptive |\n| `links-depth` | Click distance from the entry point ≤3 (requires `--crawl`) |\n| `links-dead-end-pages` | Pages should have outgoing internal links |\n| `links-https-downgrade` | HTTPS pages should not link to HTTP |\n| `links-external-count` | Warn if >100 external links |\n| `links-invalid` | No empty, javascript:, or malformed hrefs |\n| `links-tel-mailto` | Valid tel: and mailto: link formats |\n| `links-redirect-chains` | Links should not go through redirects |\n| `links-orphan-pages` | Pages have enough inbound internal links (requires `--crawl`) |\n| `links-localhost` | No localhost/127.0.0.1 URLs in production |\n| `links-local-file` | No file:// protocol links |\n| `links-broken-fragment` | Fragment links should match element IDs |\n| `links-excessive` | Limit internal links per page |\n| `links-onclick` | No onclick-based navigation instead of `<a>` tags |\n| `links-whitespace-href` | No whitespace in href attributes |\n| `links-non-http-protocol` | No anchor links with non-HTTP protocols (ftp:, intent:) |\n| `links-inbound-all-nofollow` | All inbound internal links nofollow, so no link equity (requires `--crawl`) |\n| `links-inbound-mixed-follow` | Mixed followed/nofollowed inbound links (requires `--crawl`) |\n| `links-inbound-low-quality` | No inbound internal link passes link equity (requires `--crawl`) |\n| `links-inbound-anchor-text` | All followed inbound links use generic anchor text (requires `--crawl`) |\n\n### Images (14 rules) - 8% weight\n\n| Rule | Description |\n|------|-------------|\n| `images-alt-present` | All images should have alt attribute |\n| `images-alt-quality` | Alt text should be descriptive |\n| `images-dimensions` | Images should have width/height |\n| `images-lazy-loading` | Below-fold images should use lazy loading |\n| `images-modern-format` | Use WebP/AVIF formats |\n| `images-size` | Images should be <200KB |\n| `images-responsive` | Use srcset for responsive images |\n| `images-broken` | Images should not return 404 |\n| `images-figure-captions` | Figure elements should have figcaption |\n| `images-filename-quality` | Use descriptive filenames |\n| `images-inline-svg-size` | Inline SVGs should be <5KB |\n| `images-picture-element` | Picture elements must have img fallback |\n| `images-alt-length` | Alt text should be under 125 characters |\n| `images-background-seo` | Content images should use `<img>`, not CSS background |\n\n### Security (23 rules) - 8% weight\n\n| Rule | Description |\n|------|-------------|\n| `security-https` | Site should use HTTPS |\n| `security-https-redirect` | HTTP should redirect to HTTPS |\n| `security-hsts` | Strict-Transport-Security header |\n| `security-csp` | Content-Security-Policy header |\n| `security-x-frame-options` | X-Frame-Options header |\n| `security-x-content-type-options` | X-Content-Type-Options: nosniff |\n| `security-external-links` | External target=\"_blank\" links have noopener/noreferrer |\n| `security-form-https` | Form actions use HTTPS |\n| `security-mixed-content` | No HTTP resources on HTTPS pages |\n| `security-permissions-policy` | Permissions-Policy header present |\n| `security-referrer-policy` | Referrer-Policy header present |\n| `security-leaked-secrets` | No exposed API keys or credentials |\n| `security-password-http` | Login forms served over HTTPS only |\n| `security-protocol-relative` | No protocol-relative URLs (//example.com) |\n| `security-ssl-expiry` | SSL certificate not near expiration |\n| `security-ssl-protocol` | TLS 1.2+ required; no TLS 1.0/1.1 |\n| `security-cookie-flags` | Session cookies set Secure, HttpOnly and SameSite |\n| `security-cookie-lifetime` | Cookies stay within the 400-day browser cap |\n| `security-coop` | Cross-Origin-Opener-Policy header isolates the page |\n| `security-csp-xss` | CSP should actually constrain script execution |\n| `security-info-disclosure` | Headers should not advertise server software/version |\n| `security-paste-blocking` | Input fields should not prevent pasting |\n| `security-trusted-types` | CSP should require Trusted Types for DOM XSS sinks |\n\n### Technical SEO (17 rules) - 7% weight\n\n| Rule | Description |\n|------|-------------|\n| `technical-robots-txt-exists` | robots.txt should return 200 |\n| `technical-robots-txt-valid` | robots.txt should have valid syntax |\n| `technical-sitemap-exists` | sitemap.xml should exist |\n| `technical-sitemap-valid` | Sitemap should have valid XML structure |\n| `technical-url-structure` | URL should use hyphens, lowercase |\n| `technical-trailing-slash` | Consistent trailing slash usage |\n| `technical-www-redirect` | www/non-www should redirect to one version |\n| `technical-404-page` | Custom 404 page should exist |\n| `technical-soft-404` | Soft 404 pages should return proper 404 status |\n| `technical-server-error` | No 5xx server errors |\n| `technical-4xx-non-404` | No 400, 403, 410 client errors |\n| `technical-timeout` | Pages should respond within timeout |\n| `technical-bad-content-type` | Content-Type header matches actual content |\n| `technical-empty-html` | Page should return meaningful, non-empty HTML |\n| `technical-form-get-method` | Forms should not submit with the GET method |\n| `technical-duplicate-gtm` | No multiple Google Tag Manager containers |\n| `technical-duplicate-ga` | No multiple Google Analytics property IDs |\n\n### Crawlability (35 rules) - 5% weight\n\n| Rule | Description |\n|------|-------------|\n| `crawl-schema-noindex-conflict` | Schema.org and noindex should not conflict |\n| `crawl-pagination-canonical` | Paginated pages should self-canonicalize |\n| `crawl-sitemap-domain` | Sitemap URLs should match host domain |\n| `crawl-noindex-in-sitemap` | Noindexed pages should not be in sitemap |\n| `crawl-indexability-conflict` | robots.txt and noindex should not both block |\n| `crawl-canonical-redirect` | Canonical should not point through redirects |\n| `crawl-sitemap-url-limit` | Sitemap should have <50,000 URLs |\n| `crawl-sitemap-size-limit` | Sitemap should be <50MB |\n| `crawl-sitemap-duplicate-urls` | No duplicate URLs in sitemap |\n| `crawl-sitemap-orphan-urls` | Sitemap URLs should be linked internally |\n| `crawl-blocked-resources` | Critical resources not blocked by robots.txt |\n| `crawl-crawl-delay` | Excessive Crawl-delay slows indexing |\n| `crawl-sitemap-in-robotstxt` | robots.txt should reference sitemap |\n| `crawl-pagination-broken` | Pagination links should not be broken |\n| `crawl-pagination-loop` | No circular pagination chains |\n| `crawl-pagination-sequence` | No gaps in pagination sequence |\n| `crawl-pagination-noindex` | Paginated pages should not be noindexed |\n| `crawl-pagination-orphaned` | Paginated pages should be linked from content |\n| `crawl-sitemap-lastmod` | Sitemap lastmod values are valid, not future-dated, and not bulk-identical |\n| `crawl-blocked-images` | Image URLs should not be disallowed by robots.txt |\n| `crawl-pagination-isolated` | Paginated URLs should have incoming internal links (requires `--crawl`) |\n| `crawl-sitemap-non-200` | Sitemap URLs should return 200 when crawled (requires `--crawl`) |\n| `crawl-sitemap-non-canonical` | Sitemap URLs should not canonicalize to a different URL (requires `--crawl`) |\n| `crawl-sitemap-disallowed` | Sitemap URLs should not be disallowed by robots.txt (requires `--crawl`) |\n| `crawl-sitemap-cross-duplicates` | URLs should not be declared by multiple sitemaps (requires `--crawl`) |\n| `crawl-canonical-to-noindex` | Canonical target should not itself be noindex (requires `--crawl`) |\n| `crawl-canonical-to-disallowed` | Canonical target should not be disallowed by robots.txt (requires `--crawl`) |\n| `crawl-canonical-chain` | Canonical target should not canonicalize elsewhere (requires `--crawl`) |\n| `crawl-canonical-loop` | Canonical targets should not form a loop (requires `--crawl`) |\n| `crawl-hreflang-to-noindex` | Hreflang should not point to noindex URLs (requires `--crawl`) |\n| `crawl-hreflang-to-disallowed` | Hreflang should not point to robots.txt-disallowed URLs (requires `--crawl`) |\n| `crawl-hreflang-disallowed-target` | Disallowed pages should not receive hreflang annotations (requires `--crawl`) |\n| `crawl-hreflang-incoming-conflict` | Incoming hreflang annotations should not conflict (requires `--crawl`) |\n| `crawl-hreflang-reciprocity` | Hreflang targets should annotate this page in return (requires `--crawl`) |\n| `crawl-isolated-url` | Page should be reachable via ordinary internal links (requires `--crawl`) |\n\n### Structured Data (13 rules) - 5% weight\n\n| Rule | Description |\n|------|-------------|\n| `schema-present` | JSON-LD or microdata should exist |\n| `schema-valid` | JSON-LD should be valid JSON |\n| `schema-type` | @type field should be present |\n| `schema-required-fields` | Required fields for schema type |\n| `schema-article` | Validates Article schema properties |\n| `schema-breadcrumb` | Checks BreadcrumbList on non-homepage |\n| `schema-faq` | Validates FAQPage schema structure |\n| `schema-local-business` | Validates LocalBusiness for local SEO |\n| `schema-organization` | Validates Organization schema |\n| `schema-product` | Validates Product schema for e-commerce |\n| `schema-review` | Validates Review/AggregateRating schema |\n| `schema-video` | Validates VideoObject schema |\n| `schema-website-search` | Checks WebSite sitelinks searchbox |\n\n### JavaScript Rendering (16 rules) - 5% weight\n\n| Rule | Description |\n|------|-------------|\n| `js-rendered-title` | Title present in rendered DOM |\n| `js-rendered-description` | Meta description present in rendered DOM |\n| `js-rendered-h1` | H1 present in rendered DOM |\n| `js-rendered-canonical` | Canonical present in rendered DOM |\n| `js-canonical-mismatch` | Canonical matches between raw and rendered HTML |\n| `js-noindex-mismatch` | Noindex consistent between raw and rendered HTML |\n| `js-title-modified` | Title not changed by JavaScript |\n| `js-description-modified` | Description not changed by JavaScript |\n| `js-h1-modified` | H1 not changed by JavaScript |\n| `js-rendered-content` | Main content present without JavaScript dependency |\n| `js-rendered-links` | Navigation links present without JavaScript |\n| `js-blocked-resources` | Critical JS not blocked by robots.txt |\n| `js-ssr-check` | Server-side rendering detected |\n| `js-console-errors` | No uncaught JavaScript exceptions or console errors while rendering |\n| `js-failed-requests` | Scripts, stylesheets and other subresources load successfully |\n| `js-document-write` | Inline scripts should not use `document.write()` |\n\n### Accessibility (31 rules) - 4% weight\n\n| Rule | Description |\n|------|-------------|\n| `a11y-aria-labels` | Interactive elements have accessible names |\n| `a11y-color-contrast` | Color contrast issues detected |\n| `a11y-focus-visible` | Focus indicator styles present |\n| `a11y-form-labels` | Form inputs have associated labels |\n| `a11y-heading-order` | Heading levels don't skip |\n| `a11y-landmark-regions` | Proper landmark regions (main, nav, footer) |\n| `a11y-link-text` | Descriptive link text (no \"click here\") |\n| `a11y-skip-link` | Skip-to-content link for keyboard navigation |\n| `a11y-table-headers` | Data tables have proper headers |\n| `a11y-touch-targets` | Minimum 44x44px touch target sizing |\n| `a11y-video-captions` | Videos have captions or transcripts |\n| `a11y-zoom-disabled` | Viewport doesn't disable user zoom |\n| `a11y-iframe-title` | Iframes and frames have title attributes |\n| `a11y-object-alt` | `<object>` elements provide a text alternative |\n| `a11y-empty-heading` | No empty or inaccessible headings |\n| `a11y-input-image-alt` | Image inputs have alt text |\n| `a11y-main-landmark` | Exactly one `<main>` landmark |\n| `a11y-list-structure` | Lists contain only list items |\n| `a11y-duplicate-id` | No duplicate element IDs |\n| `a11y-tabindex-positive` | No tabindex greater than 0 |\n| `a11y-accesskey-unique` | No duplicate accesskey values |\n| `a11y-form-multiple-labels` | Form controls have at most one label |\n| `a11y-aria-valid` | ARIA roles and attributes are valid |\n| `a11y-aria-hidden-focusable` | aria-hidden not on body or focusable elements |\n| `a11y-svg-img-alt` | SVGs with img role have accessible names |\n| `a11y-presentation-role-conflict` | role=\"none\"/\"presentation\" not negated by ARIA |\n| `a11y-valid-lang-element` | Element lang attributes are valid BCP 47 tags |\n| `a11y-redundant-alt` | Alt text doesn't duplicate adjacent text |\n| `a11y-table-caption` | Data tables use `<caption>` |\n| `a11y-identical-links-purpose` | Same link text should point to same destination |\n| `a11y-label-name-mismatch` | aria-label should contain the visible text |\n\n### Content (19 rules) - 5% weight\n\n| Rule | Description |\n|------|-------------|\n| `content-word-count` | Page should have 300+ words |\n| `content-reading-level` | Flesch-Kincaid reading level check |\n| `content-keyword-stuffing` | Detects excessive keyword repetition |\n| `content-article-links` | Checks link-to-content ratio |\n| `content-broken-html` | Detects malformed HTML structure |\n| `content-meta-in-body` | Meta tags should be in head |\n| `content-mime-type` | Validates Content-Type header |\n| `content-duplicate-description` | Descriptions should be unique site-wide |\n| `content-heading-hierarchy` | Proper heading hierarchy (H1>H2>H3) |\n| `content-heading-length` | Headings should be 10-70 characters |\n| `content-heading-unique` | Headings should be unique |\n| `content-text-html-ratio` | Text-to-HTML ratio should be >10% |\n| `content-title-same-as-h1` | Title and H1 should differ |\n| `content-title-same-as-description` | Title and meta description should differ |\n| `content-title-pixel-width` | Title pixel width for SERP display (<580px) |\n| `content-description-pixel-width` | Description pixel width for SERP (<920px) |\n| `content-duplicate-exact` | Detects exact duplicate content across pages |\n| `content-duplicate-near` | Detects near-duplicate content via simhash |\n| `content-duplicate-h1` | H1 text should be unique across crawled pages (requires `--crawl`) |\n\n### Social (9 rules) - 3% weight\n\n| Rule | Description |\n|------|-------------|\n| `social-og-title` | og:title meta tag |\n| `social-og-description` | og:description meta tag |\n| `social-og-image` | og:image with valid URL |\n| `social-og-image-size` | og:image dimensions (1200x630) |\n| `social-twitter-card` | twitter:card meta tag |\n| `social-og-url` | og:url meta tag |\n| `social-og-url-canonical` | og:url matches canonical |\n| `social-share-buttons` | Social share buttons present |\n| `social-profiles` | Social profile links present |\n\n### E-E-A-T (14 rules) - 3% weight\n\n| Rule | Description |\n|------|-------------|\n| `eeat-about-page` | About page exists |\n| `eeat-affiliate-disclosure` | Affiliate links have disclosure |\n| `eeat-author-byline` | Author attribution present |\n| `eeat-author-expertise` | Author credentials/bio present |\n| `eeat-citations` | Links to authoritative sources |\n| `eeat-contact-page` | Contact page exists |\n| `eeat-content-dates` | Publication/modification dates present |\n| `eeat-disclaimers` | YMYL content has disclaimers |\n| `eeat-editorial-policy` | Editorial policy page exists |\n| `eeat-physical-address` | Business address present |\n| `eeat-privacy-policy` | Privacy policy link present |\n| `eeat-terms-of-service` | Terms of service link present |\n| `eeat-trust-signals` | Trust badges, reviews, certifications |\n| `eeat-ymyl-detection` | YMYL content detection |\n\n### URL Structure (14 rules) - 3% weight\n\n| Rule | Description |\n|------|-------------|\n| `url-slug-keywords` | URL slug contains keywords |\n| `url-stop-words` | URL should not have stop words |\n| `url-uppercase` | URLs should be lowercase |\n| `url-underscores` | Use hyphens, not underscores |\n| `url-double-slash` | No consecutive slashes in path |\n| `url-spaces` | No spaces in URL |\n| `url-non-ascii` | No non-ASCII characters in URL |\n| `url-length` | URL should be under 2048 characters |\n| `url-repetitive-path` | No repetitive path segments |\n| `url-parameters` | Excessive query parameters |\n| `url-session-ids` | No session IDs in URL |\n| `url-tracking-params` | Tracking parameters should use canonical |\n| `url-internal-search` | Internal search URLs should be noindexed |\n| `url-http-https-duplicate` | HTTP/HTTPS versions should canonicalize |\n\n### Redirects (11 rules) - 3% weight\n\n| Rule | Description |\n|------|-------------|\n| `redirect-meta-refresh` | No `<meta http-equiv=\"refresh\">` redirects |\n| `redirect-javascript` | No JavaScript-based redirects |\n| `redirect-http-refresh` | No HTTP Refresh header redirects |\n| `redirect-loop` | No circular redirect chains |\n| `redirect-type` | Prefer 301 over 302 for permanent moves |\n| `redirect-broken` | Redirects should not lead to errors |\n| `redirect-resource` | No redirects on CSS/JS/image resources |\n| `redirect-case-normalization` | Redirect uppercase URLs to lowercase |\n| `redirect-resource-broken` | Redirected resources should not resolve to 4xx/5xx (requires render) |\n| `redirect-resource-loop` | Resources should not be caught in redirect loops (requires render) |\n| `redirect-resource-chain` | Resources should not go through multi-hop redirect chains (requires render) |\n\n### Mobile (12 rules) - 2% weight\n\n| Rule | Description |\n|------|-------------|\n| `mobile-font-size` | Minimum 16px body text |\n| `mobile-horizontal-scroll` | No horizontal scrolling |\n| `mobile-interstitials` | No intrusive interstitials |\n| `mobile-viewport-width` | No fixed viewport width |\n| `mobile-multiple-viewports` | Single viewport meta tag |\n| `mobile-image-maps` | No `<map>`/`<area>` image maps |\n| `mobile-viewport-content` | Viewport directives: width, initial-scale, no minimum-scale |\n| `mobile-parity-content` | Mobile render carries as much content as desktop (`--mobile`) |\n| `mobile-parity-title` | Title and meta description match mobile vs desktop (`--mobile`) |\n| `mobile-parity-canonical` | Canonical matches mobile vs desktop (`--mobile`) |\n| `mobile-parity-structured-data` | JSON-LD present on mobile as on desktop (`--mobile`) |\n| `mobile-parity-links` | Comparable internal link count mobile vs desktop (`--mobile`) |\n\n### Internationalization (13 rules) - 2% weight\n\n| Rule | Description |\n|------|-------------|\n| `i18n-lang-attribute` | HTML lang attribute present |\n| `i18n-hreflang` | Hreflang tags for multilingual sites |\n| `i18n-hreflang-return-links` | Hreflang targets link back to source |\n| `i18n-hreflang-to-noindex` | Hreflang should not point to noindexed pages |\n| `i18n-hreflang-to-non-canonical` | Hreflang should point to canonical URLs |\n| `i18n-hreflang-to-broken` | Hreflang should not point to broken URLs |\n| `i18n-hreflang-to-redirect` | Hreflang should not point through redirects |\n| `i18n-hreflang-conflicting` | No duplicate hreflang for same language |\n| `i18n-hreflang-lang-mismatch` | Page language matches hreflang code |\n| `i18n-hreflang-multiple-methods` | Use single hreflang method |\n| `i18n-hreflang-relative-url` | Hreflang annotations should use absolute URLs |\n| `i18n-hreflang-x-default` | Language annotation targets same URL as x-default (insight) |\n| `i18n-hreflang-incoming-invalid` | Incoming hreflang annotations use valid language codes (requires `--crawl`) |\n\n### HTML Validation (11 rules) - 2% weight\n\n| Rule | Description |\n|------|-------------|\n| `htmlval-missing-doctype` | `<!DOCTYPE html>` must be present |\n| `htmlval-missing-charset` | `<meta charset>` must be in head |\n| `htmlval-invalid-head` | Only metadata elements in `<head>` |\n| `htmlval-noscript-in-head` | `<noscript>` should be in body |\n| `htmlval-multiple-heads` | Single `<head>` element only |\n| `htmlval-size-limit` | HTML should be under 5MB |\n| `htmlval-lorem-ipsum` | No placeholder lorem ipsum text |\n| `htmlval-multiple-titles` | Single `<title>` tag only |\n| `htmlval-multiple-descriptions` | Single meta description only |\n| `htmlval-title-outside-head` | No `<title>` element outside of `<head>` |\n| `htmlval-base-url` | At most one `<base>` element with a valid href |\n\n### AI/GEO Readiness (5 rules) - 2% weight\n\n| Rule | Description |\n|------|-------------|\n| `geo-semantic-html` | Uses semantic HTML elements |\n| `geo-content-structure` | Proper heading hierarchy and lists |\n| `geo-ai-bot-access` | AI crawlers (GPTBot, ClaudeBot) not blocked |\n| `geo-llms-txt` | /llms.txt file for AI discovery |\n| `geo-schema-drift` | JSON-LD matches visible content |\n\n### Legal Compliance (1 rule) - 1% weight\n\n| Rule | Description |\n|------|-------------|\n| `legal-cookie-consent` | Cookie consent banner present |\n\n## Configuration\n\nCreate a `seomator.toml` config file with `seomator init`:\n\n```toml\n[project]\nname = \"my-website\"\ndomains = [\"example.com\", \"www.example.com\"]\n\n[crawler]\nmax_pages = 100\nconcurrency = 3\ntimeout_ms = 30000\nrespect_robots = true\ndelay_ms = 100\ninclude = []\nexclude = [\"/admin/**\", \"/api/**\"]\ndrop_query_prefixes = [\"utm_\", \"gclid\", \"fbclid\"]\n\n[rules]\nenable = [\"*\"]\ndisable = [\"perf-inp\"]  # Supports wildcards: \"core-*\"\n\n[output]\nformat = \"console\"  # console, json, html, markdown, llm\n```\n\nConfig priority (highest to lowest):\n1. CLI arguments\n2. Local `./seomator.toml`\n3. Parent directory configs\n4. Global `~/.seomator/config.toml`\n5. Built-in defaults\n\n## Output Formats\n\n| Format | Flag | Best For |\n|--------|------|----------|\n| Console | `--format console` | Human terminal output (default) |\n| JSON | `--format json` | CI/CD, programmatic processing |\n| HTML | `--format html` | Standalone reports, sharing |\n| Markdown | `--format markdown` | Documentation, GitHub |\n| LLM | `--format llm` | AI agents, piping to Claude |\n\n### Terminal Output\n\n```\n╔══════════════════════════════════════════════════════════════╗\n║  SEOmator Audit Report                                      ║\n╚══════════════════════════════════════════════════════════════╝\n\nURL:       https://example.com\nScore:     88/100  [A]\n\n┌──────────────────────────┬───────┬────────┬──────────┬────────┐\n│ Category                 │ Score │ Passed │ Warnings │ Failed │\n├──────────────────────────┼───────┼────────┼──────────┼────────┤\n│ Core                     │ 97    │ 18     │ 1        │ 0      │\n│ Performance              │ 85    │ 18     │ 3        │ 1      │\n│ JavaScript Rendering     │ 100   │ 13     │ 0        │ 0      │\n│ ...                      │       │        │          │        │\n└──────────────────────────┴───────┴────────┴──────────┴────────┘\n```\n\n### JSON Output\n\n```json\n{\n  \"url\": \"https://example.com\",\n  \"overallScore\": 88,\n  \"categoryResults\": [\n    {\n      \"categoryId\": \"core\",\n      \"score\": 97,\n      \"passCount\": 18,\n      \"warnCount\": 1,\n      \"failCount\": 0,\n      \"results\": [...]\n    }\n  ],\n  \"timestamp\": \"2026-01-23T16:00:00.000Z\",\n  \"crawledPages\": 1\n}\n```\n\n## CI/CD Integration\n\n### GitHub Actions\n\n```yaml\nname: SEO Audit\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  audit:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Setup Node.js\n        uses: actions/setup-node@v4\n        with:\n          node-version: '20'\n\n      - name: Install SEOmator\n        run: npm install -g @seomator/seo-audit\n\n      - name: Install Playwright browsers\n        run: npx playwright install chromium\n\n      - name: Run SEO Audit\n        run: seomator audit https://your-staging-url.com --format json -o seo-report.json\n\n      - name: Upload Report\n        uses: actions/upload-artifact@v4\n        with:\n          name: seo-report\n          path: seo-report.json\n```\n\n### GitLab CI\n\n```yaml\nseo-audit:\n  image: node:20\n  script:\n    - npm install -g @seomator/seo-audit\n    - npx playwright install chromium\n    - seomator audit https://your-staging-url.com --format json -o seo-report.json\n  artifacts:\n    paths:\n      - seo-report.json\n```\n\n## Programmatic Usage\n\n```typescript\nimport { Auditor, createAuditor } from '@seomator/seo-audit';\n\nconst auditor = createAuditor({\n  categories: ['core', 'security', 'perf'],\n  measureCwv: true,\n  onCategoryComplete: (categoryId, name, result) => {\n    console.log(`${name}: ${result.score}/100`);\n  }\n});\n\nconst result = await auditor.audit('https://example.com');\nconsole.log(`Overall Score: ${result.overallScore}`);\n```\n\n## Claude Code Skill\n\nUse SEOmator directly in [Claude Code](https://claude.ai/claude-code) as an AI skill for automated SEO auditing.\n\n### Setup\n\n```bash\nnpx skills add seo-skills/seo-audit-skill\n```\n\n### Usage\n\n```\n\"Run an SEO audit on https://example.com\"\n\"Audit https://mysite.com and tell me what to fix first\"\n\"Check SEO health of https://example.com with 20-page crawl\"\n```\n\n## FAQ\n\n### What is SEOmator?\n\nSEOmator is an SEO audit tool that checks a website against 332 rules across 20 categories — covering technical SEO, Core Web Vitals, structured data, accessibility, security headers, content quality, and AI/GEO search readiness — and returns a scored, prioritized report of what to fix first. It's available as an open-source CLI, an Electron desktop app, and a Claude Code skill.\n\n### How is SEOmator different from Lighthouse or PageSpeed Insights?\n\nLighthouse and PageSpeed Insights focus on performance and Core Web Vitals for a single page. SEOmator includes CWV measurement but covers far more ground: crawlability, indexability, structured data validation, redirect chains, hreflang, E-E-A-T signals, and AI/GEO readiness (AI crawler access, llms.txt, semantic HTML) — across a full multi-page crawl, not just one URL.\n\n### Does SEOmator check AI search / GEO readiness?\n\nYes. The AI/GEO Readiness category checks whether AI crawlers like GPTBot and ClaudeBot are allowed in robots.txt, whether an `/llms.txt` file exists, whether heading structure and semantic HTML are AI-extractable, and whether JSON-LD schema matches the page's visible content.\n\n### Is SEOmator free to use?\n\nThe CLI (`@seomator/seo-audit`) is MIT-licensed and free to install and run locally or in CI/CD — see [Installation](#installation). A hosted, no-install version is also available at [seomator.com/free-seo-audit-tool](https://seomator.com/free-seo-audit-tool).\n\n### Can I run SEOmator in CI/CD?\n\nYes. It returns exit code `0` for a passing score (≥70), `1` for a failing score, and `2` on error, plus JSON output for parsing. See the [GitHub Actions and GitLab CI examples](#cicd-integration).\n\n### Can I use SEOmator with Claude or other AI agents?\n\nYes. The `--format llm` flag outputs token-efficient, injection-hardened XML designed for AI agents, and the [Claude Code skill](#claude-code-skill) lets you run audits directly from a prompt like \"Audit https://example.com and tell me what to fix first.\"\n\n## Requirements\n\n- **Node.js 20.3+** (required by better-sqlite3 and `AbortSignal.any()`; uses native fetch API)\n- **Playwright** (for Core Web Vitals and JS rendering analysis)\n\nAfter installing, run `npx playwright install chromium` to install the browser for CWV measurement.\n\nFor the desktop app, `better-sqlite3` must be compiled for Electron's Node version:\n```bash\nnpm run rebuild:electron\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}