{"_id":"@dariodario/geochecker","_rev":"12-9eddf317471336de70b3072d4d9bddd5","name":"@dariodario/geochecker","dist-tags":{"latest":"2.6.1"},"versions":{"0.1.0":{"name":"@dariodario/geochecker","version":"0.1.0","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"author":{"url":"https://dariodario.com","name":"Dario Dario","email":"hello@dariodario.com"},"license":"MIT","_id":"@dariodario/geochecker@0.1.0","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"homepage":"https://github.com/dariodario-com/geochecker#readme","bugs":{"url":"https://github.com/dariodario-com/geochecker/issues"},"bin":{"geochecker":"dist/cli.js"},"dist":{"shasum":"94ebc763713ecb871dbfba4d91a6454f6f9b5941","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-0.1.0.tgz","fileCount":73,"integrity":"sha512-p2HsAWwerXvi92boyKl23Q3s0zJ2Qlag3kG6Meb5OBnCub7Gk65Etd5oTN5JkuaqPVQYFPQOTI4zd2xSpNGVHQ==","signatures":[{"sig":"MEYCIQDL77enWgO0CbrILuNCVFJ9iBtRq6rPv/4lZz7KRyxl9gIhALM/I3EPjaE/wftgkvWYMCPYvwYkaYl/wdUv7wXlVY59","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145867},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"12ac882fda9edd02a52e8cbd7fddaea9944d5254","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"repository":{"url":"git+https://github.com/dariodario-com/geochecker.git","type":"git"},"_npmVersion":"10.9.7","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"node-html-parser":"^7.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/geochecker_0.1.0_1777825405125_0.12101367896222426","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@dariodario/geochecker","version":"1.0.0","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"author":{"url":"https://dariodario.com","name":"Dario Dario","email":"hello@dariodario.com"},"license":"MIT","_id":"@dariodario/geochecker@1.0.0","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"homepage":"https://github.com/dariodario-com/geochecker#readme","bugs":{"url":"https://github.com/dariodario-com/geochecker/issues"},"bin":{"geochecker":"dist/cli.js"},"dist":{"shasum":"e4f0b14d5d3cc65fb92c4f72fdb5de41c04ddb27","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-1.0.0.tgz","fileCount":73,"integrity":"sha512-75j+6FED6gjo9NEW2D5psEdJn2n1LiHo14lBS4xgY9u86P78Cu5AYREWp1gO6gPBOvzOp8UVIVB/oHZoOO95lA==","signatures":[{"sig":"MEUCIQDuxNTx0xuywBXO9SY+SernXDaJpuDxTJXdkG5JCeIDxAIgcOVVloBtzmNW6grHUGK+xSv7jluh7HwHE2Z7q7B4kb0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145867},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"20d0c27e647c9294a9674cb2a4963da0ae3e6c2b","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"repository":{"url":"git+https://github.com/dariodario-com/geochecker.git","type":"git"},"_npmVersion":"10.9.7","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"node-html-parser":"^7.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/geochecker_1.0.0_1777825488712_0.4733985393379805","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@dariodario/geochecker","version":"1.0.3","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"author":{"url":"https://dariodario.com","name":"Dario Dario","email":"hello@dariodario.com"},"license":"MIT","_id":"@dariodario/geochecker@1.0.3","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"homepage":"https://github.com/dariodario-com/geochecker#readme","bugs":{"url":"https://github.com/dariodario-com/geochecker/issues"},"bin":{"geochecker":"dist/cli.js"},"dist":{"shasum":"33aa1ad15a0d1e104efce0a97dbc91083cb8586d","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-1.0.3.tgz","fileCount":73,"integrity":"sha512-ae+eEivb+EgQhgblniY+QAKgoE4Kl2HTLyf9+nss/KMutDJJAF5eM08jJlhxV6kU4GrNkGj5/k72oH/OLLUszg==","signatures":[{"sig":"MEQCIAl/pV3Dx4u+PmmKnuAxMVVqOPcyAJ864t0Rq9LghwDrAiAFrEMZGR8kACbx8GRpQ1s1qVQ+SdzOBqtrKj6zPQp0DQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":145867},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"208ad56a7fd1077e07d9e321982fe34885f63b3c","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"repository":{"url":"git+https://github.com/dariodario-com/geochecker.git","type":"git"},"_npmVersion":"11.9.0","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"node-html-parser":"^7.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/geochecker_1.0.3_1777827778064_0.43720569290949096","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@dariodario/geochecker","version":"1.1.0","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"author":{"url":"https://dariodario.com","name":"Dario Dario","email":"hello@dariodario.com"},"license":"MIT","_id":"@dariodario/geochecker@1.1.0","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"homepage":"https://github.com/dariodario-com/geochecker#readme","bugs":{"url":"https://github.com/dariodario-com/geochecker/issues"},"bin":{"geochecker":"dist/cli.js"},"dist":{"shasum":"59341745d5c9b2fc48e50fa09e4860c68b5ff798","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-1.1.0.tgz","fileCount":77,"integrity":"sha512-XPeCNaHiXz0Zzq2XddLw+JHw/UgRiXw9hST8cFpY3LPwrwDugR8tteB++rhaxopddl+lBXfFmhOTJc7MacUw9g==","signatures":[{"sig":"MEUCIEMSXo8IDoNM1dx9RdcI+ryX5wWf7MPBUD2UxDFxXTPyAiEA7kHn4hxgMkIRV+l4q1HqGePu3GRrJD7NcgvXCnGHcUg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164090},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"4ebd7dba588cef37b3696397f7333619a732ff2e","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"repository":{"url":"git+https://github.com/dariodario-com/geochecker.git","type":"git"},"_npmVersion":"11.9.0","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"node-html-parser":"^7.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/geochecker_1.1.0_1777895293029_0.21523296088196164","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@dariodario/geochecker","version":"2.0.0","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"author":{"url":"https://dariodario.com","name":"Dario Dario","email":"hello@dariodario.com"},"license":"MIT","_id":"@dariodario/geochecker@2.0.0","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"homepage":"https://github.com/dariodario-com/geochecker#readme","bugs":{"url":"https://github.com/dariodario-com/geochecker/issues"},"bin":{"geochecker":"dist/cli.js"},"dist":{"shasum":"dcf8abb1365890b03450c999ca857884e1418c7a","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-2.0.0.tgz","fileCount":78,"integrity":"sha512-ggLwIqRqki/xEaZuJ9XoSJbOMakjIaYuYo3CZUw6Qe7tH2othzs3X3dbrT9q2TIx59jNbUUn+xl2mhcIFVXy4Q==","signatures":[{"sig":"MEYCIQDWqV4VkJOTOBtfkg13F1x/nxarSZu+eaPtVpE3I+6STwIhAL2hos8NYTkP2Dwnsj9Sg/4NQNbgQlNRk+WKwl2UE1k0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":177590},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"31f82f13ddfc4012d06661c76f00c52bc77c3860","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"repository":{"url":"git+https://github.com/dariodario-com/geochecker.git","type":"git"},"_npmVersion":"11.9.0","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"node-html-parser":"^7.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/geochecker_2.0.0_1783525818033_0.740850628622002","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@dariodario/geochecker","version":"2.1.0","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"author":{"url":"https://dariodario.com","name":"Dario Dario","email":"hello@dariodario.com"},"license":"MIT","_id":"@dariodario/geochecker@2.1.0","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"homepage":"https://github.com/dariodario-com/geochecker#readme","bugs":{"url":"https://github.com/dariodario-com/geochecker/issues"},"bin":{"geochecker":"dist/cli.js"},"dist":{"shasum":"9107cb836591978d2b1a087477fe07b9469cb852","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-2.1.0.tgz","fileCount":83,"integrity":"sha512-S911pS0wjcy3kulbA+PNwV68b0Z6magm1LgewUIpKhTQB932sqEwO8pz53zxpydNmEupTugUJn6KdxTyNxZXqA==","signatures":[{"sig":"MEYCIQCT7mzUQpClccczJRczFZO+vj36BX/5qOnKmiEFHRDXXAIhALpv1Lf0YkWLiIvwmx9HsYAOrclFjAVYIcWiEHQB9VtE","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206335},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"56fe825f1ca5750797bcb187c2b38a09491ff485","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"repository":{"url":"git+https://github.com/dariodario-com/geochecker.git","type":"git"},"_npmVersion":"11.9.0","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"node-html-parser":"^7.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/geochecker_2.1.0_1783691982841_0.7986284943997273","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@dariodario/geochecker","version":"2.2.0","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"author":{"url":"https://dariodario.com","name":"Dario Dario","email":"hello@dariodario.com"},"license":"MIT","_id":"@dariodario/geochecker@2.2.0","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"homepage":"https://github.com/dariodario-com/geochecker#readme","bugs":{"url":"https://github.com/dariodario-com/geochecker/issues"},"bin":{"geochecker":"dist/cli.js"},"dist":{"shasum":"92e017abe705ee06b455d020ffceac3320202c31","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-2.2.0.tgz","fileCount":83,"integrity":"sha512-16FZrWxjnFgfr//824Pyh6pLyvf/WdEinM9GM84IpyNkTmH6Iex5A/f5HkZ6pn3AlTetGJXCndpC52i3ILT4bw==","signatures":[{"sig":"MEUCIQCZAn6GcwECFJN7fD966uarysFALBdeAFypldMiMfVmTwIgbhsLePo+pZhXMwcta/ebkPXYnbwsdLSpPXowsVvJAyQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":213759},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"ea6fa0d5f3add09a230e20164b5278bf2ca7184c","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"repository":{"url":"git+https://github.com/dariodario-com/geochecker.git","type":"git"},"_npmVersion":"11.9.0","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"node-html-parser":"^7.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/geochecker_2.2.0_1788449339119_0.7947566594878432","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@dariodario/geochecker","version":"2.3.0","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"author":{"url":"https://dariodario.com","name":"Dario Dario","email":"hello@dariodario.com"},"license":"MIT","_id":"@dariodario/geochecker@2.3.0","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"homepage":"https://github.com/dariodario-com/geochecker#readme","bugs":{"url":"https://github.com/dariodario-com/geochecker/issues"},"bin":{"geochecker":"dist/cli.js"},"dist":{"shasum":"7afed309285aa52da40288fca3688364f9370f60","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-2.3.0.tgz","fileCount":88,"integrity":"sha512-Mb0WE/Y1Qdc5o10IQ/2uUXiigTc4psQf5NRRiWEsPQs9JzYJHHpgyQvtFaMt0uCvxczE53u8oLCLEyPuIdEfUA==","signatures":[{"sig":"MEQCIDHuLt5QilNzxo+u0w6fk01kViI/UUIhPf0KyuLA2kONAiB06MXPHs09KE0/RYD0sp4dAzgYDtbHeowH+L1JhqVH6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243597},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"4c355142ff6267eed39b22da59ccfd831db8abf4","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"repository":{"url":"git+https://github.com/dariodario-com/geochecker.git","type":"git"},"_npmVersion":"11.9.0","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"node-html-parser":"^7.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/geochecker_2.3.0_1788539531613_0.952957346750424","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@dariodario/geochecker","version":"2.4.0","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"author":{"url":"https://dariodario.com","name":"Dario Dario","email":"hello@dariodario.com"},"license":"MIT","_id":"@dariodario/geochecker@2.4.0","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"homepage":"https://github.com/dariodario-com/geochecker#readme","bugs":{"url":"https://github.com/dariodario-com/geochecker/issues"},"bin":{"geochecker":"dist/cli.js"},"dist":{"shasum":"ef5fc89587faa35024cf3b1b6dddc6f0494190b4","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-2.4.0.tgz","fileCount":88,"integrity":"sha512-QeYReS+bi+c4VTp8xRRYgbB9ELLvt8xW/Mq6ud5WFTIEDhYGpYKMqmqVvk6NThEOjl51wn3f3h3wARmmr4jsXQ==","signatures":[{"sig":"MEYCIQD/iSEvyYWC8r6QRipRXAyVPAzcHUKqYP01LfIeCyQS5gIhAKNE/icPd8C31Q6XOwDUTiYP3NvGr8voeizsg7BgLsA9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":248290},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"a8ec17d535432efaddb46fe738f7591687b59783","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"repository":{"url":"git+https://github.com/dariodario-com/geochecker.git","type":"git"},"_npmVersion":"11.9.0","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"node-html-parser":"^7.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/geochecker_2.4.0_1788541140581_0.23012171558013828","host":"s3://npm-registry-packages-npm-production"}},"2.5.0":{"name":"@dariodario/geochecker","version":"2.5.0","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"author":{"url":"https://dariodario.com","name":"Dario Dario","email":"hello@dariodario.com"},"license":"MIT","_id":"@dariodario/geochecker@2.5.0","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"homepage":"https://github.com/dariodario-com/geochecker#readme","bugs":{"url":"https://github.com/dariodario-com/geochecker/issues"},"bin":{"geochecker":"dist/cli.js"},"dist":{"shasum":"ae83de388d5eeb8c6256b64286eb1d2431730540","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-2.5.0.tgz","fileCount":88,"integrity":"sha512-tWmnD4u2N2pHm2mOT3les+PD4LhUL0bllddQ0qEHpZfpd7zdxwnXA0wkiSt9H2h4Zfv9i4YauTQ5h4c3FyYoiw==","signatures":[{"sig":"MEYCIQDOCgldQbEeSnf9RTlZXuUNL5yELn+nsaHd3ACXfxVDBgIhANx+0TatuFFQ2DdwhcrYLkixz1J9Z1K5djskrnx5tQ2s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251931},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"b28da361f2091f2e31e3ec0b9a63ac95be4f5f76","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"repository":{"url":"git+https://github.com/dariodario-com/geochecker.git","type":"git"},"_npmVersion":"11.9.0","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"node-html-parser":"^7.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/geochecker_2.5.0_1788595824663_0.764045723270872","host":"s3://npm-registry-packages-npm-production"}},"2.6.0":{"name":"@dariodario/geochecker","version":"2.6.0","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"author":{"url":"https://dariodario.com","name":"Dario Dario","email":"hello@dariodario.com"},"license":"MIT","_id":"@dariodario/geochecker@2.6.0","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"homepage":"https://github.com/dariodario-com/geochecker#readme","bugs":{"url":"https://github.com/dariodario-com/geochecker/issues"},"bin":{"geochecker":"dist/cli.js"},"dist":{"shasum":"61f5214cab105be4d3506435dc7d77a2fa0bd723","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-2.6.0.tgz","fileCount":88,"integrity":"sha512-HudIxpUzk8BWrtfksL7HoW9PONgbpiqvmcmO+lFugQWDLZh/UAPoK0T1A6fmtus/76X4fw+8WzZUTcYs8xs2bA==","signatures":[{"sig":"MEYCIQD2IvWJpQAeUgTChoR8LffgIGoQzT2dddiJl1K848DI9QIhAOdxDYLxzTass7l+s3ZsiSblfaWmfQDIWHVNlSXl1uqL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257331},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.17"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"e06dd23387a802e6499f579cb763878438b39fcf","scripts":{"dev":"tsc --watch","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"repository":{"url":"git+https://github.com/dariodario-com/geochecker.git","type":"git"},"_npmVersion":"11.9.0","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","directories":{},"_nodeVersion":"24.11.1","dependencies":{"node-html-parser":"^7.1.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^22.10.0"},"_npmOperationalInternal":{"tmp":"tmp/geochecker_2.6.0_1789032426682_0.45480472801975114","host":"s3://npm-registry-packages-npm-production"}},"2.6.1":{"name":"@dariodario/geochecker","version":"2.6.1","description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","license":"MIT","author":{"name":"Dario Dario","email":"hello@dariodario.com","url":"https://dariodario.com"},"homepage":"https://github.com/dariodariolabs/geochecker#readme","repository":{"type":"git","url":"git+https://github.com/dariodariolabs/geochecker.git"},"bugs":{"url":"https://github.com/dariodariolabs/geochecker/issues"},"keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"bin":{"geochecker":"dist/cli.js"},"engines":{"node":">=18.17"},"scripts":{"build":"tsc","typecheck":"tsc --noEmit","test":"node --experimental-strip-types --test 'tests/**/*.test.ts'","dev":"tsc --watch","prepublishOnly":"npm run build"},"dependencies":{"node-html-parser":"^7.1.0"},"devDependencies":{"@types/node":"^22.10.0","typescript":"^5.9.3"},"gitHead":"95329c822ca470e5f2370e1da1c55638c573b131","_id":"@dariodario/geochecker@2.6.1","_nodeVersion":"24.11.1","_npmVersion":"11.9.0","dist":{"integrity":"sha512-PNJBwsM9h17/vsHM1MIyUveEf8FhKGnTEheK1HMkg7hhKS+HMKWYDp1VItuf7PaMvCm0mApTRkbUaGEOauBaWw==","shasum":"acada5f24a97401ab6ef2bf650a9a47e7cf96183","tarball":"https://registry.npmjs.org/@dariodario/geochecker/-/geochecker-2.6.1.tgz","fileCount":88,"unpackedSize":257331,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICOPEF+dT9eKhW1WJesw92DPX9EHvNE6ZYnt796BJ1WBAiEAohT/6cG+Xq3odpZFIf28qNSvQ1iVFLnnCu0TCFhSo1g="}]},"_npmUser":{"name":"dariodario-com","email":"hello@dariodario.com"},"directories":{},"maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/geochecker_2.6.1_1789045486323_0.3622415698962189"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-03T16:23:25.046Z","modified":"2026-09-10T13:04:46.608Z","0.1.0":"2026-05-03T16:23:25.257Z","1.0.0":"2026-05-03T16:24:48.888Z","1.0.3":"2026-05-03T17:02:58.210Z","1.1.0":"2026-05-04T11:48:13.185Z","2.0.0":"2026-07-08T15:50:18.191Z","2.1.0":"2026-07-10T13:59:43.011Z","2.2.0":"2026-09-03T15:28:59.253Z","2.3.0":"2026-09-04T16:32:11.763Z","2.4.0":"2026-09-04T16:59:00.717Z","2.5.0":"2026-09-05T08:10:24.802Z","2.6.0":"2026-09-10T09:27:06.841Z","2.6.1":"2026-09-10T13:04:46.459Z"},"bugs":{"url":"https://github.com/dariodariolabs/geochecker/issues"},"author":{"name":"Dario Dario","email":"hello@dariodario.com","url":"https://dariodario.com"},"license":"MIT","homepage":"https://github.com/dariodariolabs/geochecker#readme","keywords":["geo","generative-engine-optimization","ai-search","llm-seo","seo","structured-data","schema","llms-txt","site-audit"],"repository":{"type":"git","url":"git+https://github.com/dariodariolabs/geochecker.git"},"description":"Open-source Generative Engine Optimization (GEO) scorer. Check any site's readiness for AI search.","maintainers":[{"name":"dariodario-com","email":"hello@dariodario.com"}],"readme":"![GEO Checker — by Dario Dario](https://dariodario.com/og.png)\n\n# GEO Checker\n\n> Check any site's readiness for AI search with our open-source Generative Engine Optimization (GEO) checker.\n\n[![npm](https://img.shields.io/npm/v/@dariodario/geochecker.svg)](https://www.npmjs.com/package/@dariodario/geochecker)\n[![license](https://img.shields.io/npm/l/@dariodario/geochecker.svg)](./LICENSE)\n\nGEO (Generative Engine Optimization) is the practice of structuring web pages so that LLMs — ChatGPT, Claude, Gemini, Perplexity, Google AI Overviews — can find, understand, and cite your content.\n\nGEO Checker scores any URL across seven categories — twelve checks — with concrete, actionable findings.\n\n## Quick start\n\n```bash\nnpx @dariodario/geochecker https://example.com\n```\n\n```\nURL:     https://example.com/\nScore:   42/100  (F)\n\nSTRUCTURE  (25/100)\n  ✗ schema           0/100  No structured data detected.\n  ✗ structure       25/100  Heading structure has gaps: no H2 sections; thin content (17 words).\n\nCITABILITY  (60/100)\n  • citability      60/100  Page has factual claims but no clear source attribution.\n\nCRAWLABILITY  (80/100)\n  ✓ crawlability    80/100  Robots.txt allows AI crawlers.\n\n…\n```\n\n## What it scores\n\n| Category | What it measures | Why LLMs care |\n|---|---|---|\n| **Structure** | Schema.org JSON-LD, heading hierarchy, semantic HTML landmarks | LLMs use structured data to identify entities, articles, authors, products |\n| **Citability** | Author bylines, publish dates, source attribution, factual density | LLMs preferentially cite content with clear authorship and verifiable claims |\n| **Crawlability** | `robots.txt` policy for AI crawlers, by **purpose** (search / live-fetch / training) | If you block the AI *search* crawlers you're invisible to those engines — but blocking *training-only* crawlers is a legitimate opt-out that does **not** reduce citation |\n| **Freshness** | Last-modified dates, content recency signals | LLMs weight recent content higher for time-sensitive queries |\n| **Authority** | Outbound links, mentions of credentialed sources, internal linking depth | LLMs use authority signals when picking which source to cite |\n| **Renderability** | Whether the primary content is in the raw server HTML vs. requiring JavaScript to appear | GPTBot, ClaudeBot, PerplexityBot and most LLM fetchers don't run JS — a client-rendered SPA looks blank to them |\n| **Indexability** | `noindex` (meta *and* `X-Robots-Tag`), canonical tags, sitemap discoverability | AI search products that build on a search index inherit its exclusions — a `noindex` page is invisible to them no matter how good it is |\n\nOn-page **answerability (AEO)** signals are folded into the categories they belong to:\n**Structure** rewards question-form headings backed by a self-contained answer, and its\nschema check rewards `FAQPage`/`QAPage` wired to `acceptedAnswer` — both make content\ndirectly extractable by answer engines.\n\nThe scoring model also *reserves* an **`answerability`** category for the judgement no\nparser can make — whether the prose actually says anything worth quoting. Nothing in\nthis package fills it: that needs a language model, and this package makes **zero\nthird-party API calls**. Supply it yourself through `extraChecks` (below) if you want\nit; the category and its weight are already there.\n\nEach check returns a score, a finding, a detailed explanation, and a concrete fix.\n\n> **A good page score is necessary, not sufficient.** The single strongest driver of AI citations in 2025–2026 studies is **off-page authority** — how often your brand is mentioned across the web (Reddit, YouTube, Wikipedia, review sites, earned media). A page scanner can't see that. Use this tool to remove on-page blockers; win the citation with brand presence the scanner can't measure.\n>\n> **On `llms.txt`:** it's reported informationally and does **not** affect your score. As of 2026 no major AI search engine consumes it for citation (Ahrefs found ~97% of `llms.txt` files get zero bot requests); it's a developer coding-agent convention, not an AI-search signal.\n\n## Programmatic usage\n\n```ts\nimport { runChecks } from \"@dariodario/geochecker\";\n\nconst report = await runChecks(\"https://example.com\");\nconsole.log(report.overall);          // 0–100\nconsole.log(report.categories);       // per-category scores\nconsole.log(report.checks);           // every individual check + fix\n```\n\n### Adding your own checks\n\n`extraChecks` takes checks of your own — including ones that call an API you hold the\nkey for. They run alongside the built-ins but are isolated from them: **a caller-supplied\ncheck that throws is dropped and reported through `onCheckError`, while the scan\ncompletes.** A built-in that throws still fails the scan. The asymmetry is deliberate —\na built-in that cannot run means the score itself is wrong, but your optional signal\ngoing down should cost you that section and nothing else.\n\n```ts\nconst report = await runChecks(\"https://example.com\", {\n  extraChecks: [myCheck],\n  onCheckError: (err) => console.warn(\"extra check skipped:\", err),\n});\n```\n\n### Streaming\n\nFor live UIs that show findings as they come in:\n\n```ts\nimport { runChecksStream } from \"@dariodario/geochecker\";\n\nfor await (const evt of runChecksStream(\"https://example.com\")) {\n  if (evt.type === \"fetched\") console.log(\"page fetched\");\n  else if (evt.type === \"check\") console.log(evt.result.id, evt.result.score);\n  else if (evt.type === \"done\") console.log(\"score:\", evt.report.overall);\n}\n```\n\n### Custom checks\n\n```ts\nimport { runChecks, defineCheck } from \"@dariodario/geochecker\";\n\nconst wordCountCheck = defineCheck(async (page) => {\n  const text = page.html.replace(/<[^>]+>/g, \" \");\n  const words = text.trim().split(/\\s+/).length;\n  return {\n    id: \"word-count\",\n    category: \"structure\",\n    score: words >= 300 ? 100 : Math.round((words / 300) * 100),\n    status: words >= 300 ? \"pass\" : \"warn\",\n    finding: `Page has ${words} words.`,\n    detail: \"LLMs prefer pages with substantive content (300+ words).\",\n    fix: \"Expand the page with detailed coverage of the topic.\",\n    weight: 1,\n  };\n});\n\nconst report = await runChecks(\"https://example.com\", {\n  extraChecks: [wordCountCheck],\n});\n```\n\n## CLI options\n\n| Flag | Description |\n|---|---|\n| `--json` | Output the full report as JSON (machine-readable) |\n| `--category <name>` | Show only one category (`structure`, `citability`, `crawlability`, `freshness`, `authority`, `renderability`, `indexability`) |\n| `--min-score <n>` | Exit with code 1 if overall < `n`. Use as a CI quality gate. |\n| `-h`, `--help` | Show help |\n\n### As a CI gate\n\n```yaml\n# .github/workflows/seo.yml\n- run: npx @dariodario/geochecker https://your-staging-site.com --min-score 75\n```\n\n## Hosted version\n\nThe hosted version at **[dariodario.com/geochecker](https://dariodario.com/geochecker)** runs this same engine plus the judgement this package deliberately leaves out: a language model reads the page — and up to two more pages of the site — and fills the `answerability` category, alongside what Google knows about the business (Maps listing, real-user Core Web Vitals). Reports get a shareable permalink and a PDF download. Free.\n\n## Contributing\n\nPRs welcome — particularly for new checks. Please open a [Discussion](https://github.com/dariodariolabs/geochecker/discussions) first if proposing a substantial addition.\n\n```bash\ngit clone https://github.com/dariodariolabs/geochecker\ncd geochecker\nnpm install\nnpm run build\nnpm test\n```\n\n## Releasing (maintainers)\n\nManual: tag pushes only run build/test in CI; `npm publish` runs from a maintainer's laptop.\n\n```bash\nnpm version patch  # or minor / major — bumps package.json + creates tag\ngit push --follow-tags\nnpm publish --access public\n```\n\n`npm publish` will prompt for browser OTP if `npm login` has expired. The CI workflow on the tag push runs typecheck/build/test as a release-readiness gate; a green check means the tarball would have built cleanly.\n\n## About\n\nBuilt and maintained by [Dario Dario](https://dariodario.com), an AI-native studio in Stockholm. We design and ship AI agents for SMEs.\n\n- Web: [dariodario.com](https://dariodario.com)\n- Contact: hello@dariodario.com\n- Twitter / X: [@dariodario_com](https://twitter.com/dariodario_com)\n\n## License\n\n[MIT](./LICENSE) — do anything.\n","readmeFilename":"README.md"}