{"_id":"@enfyra/nuxt-seo","_rev":"32-e8317be17c3866aa5a69082b909cb4dd","name":"@enfyra/nuxt-seo","dist-tags":{"latest":"0.1.26"},"versions":{"0.1.0":{"name":"@enfyra/nuxt-seo","version":"0.1.0","_id":"@enfyra/nuxt-seo@0.1.0","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"309984c76f0ed014d6e8a3f45da95442bdd49f85","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.0.tgz","fileCount":17,"integrity":"sha512-XXImOH+xn9bOVywhFlDQz2hs8KEgBMNlunE4D/5S5A5KFsAMpLgxt83nngyIWQk7knbSCp84/O/jtvgp3JSd7g==","signatures":[{"sig":"MEUCIQD7hsr+goAylkJqxsswQTprae5R7iae5+1XwhJB2PHK8wIgTKihEebxN9944BEpZwiBudmMt0MsuEqHiUEf01ssUYk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46580},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"a31b54bd0839a20c249be9538117afd68fe06621","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.0_1764886409461_0.7320767008607274","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@enfyra/nuxt-seo","version":"0.1.1","_id":"@enfyra/nuxt-seo@0.1.1","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"4c704dd32a7a2faffe4b97cf812f34ecd0a44d45","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.1.tgz","fileCount":17,"integrity":"sha512-JgVBB2b+4yPU6+Re25morw98zY9MJ5jMWT3ewGtZgf+8Bb1Fjei607iSkPN1UTTCOBsj47G2GWAKPN/C1HUkwA==","signatures":[{"sig":"MEUCIQDzJfyNweil4m1zacWnz9vkQ0KIBp/s4a2wIJR0ln4eBQIgFvZXLL6/dpn6GaNS3GsjrlYbRvT/FnGTPFVjPGXvtdI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47467},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"a31b54bd0839a20c249be9538117afd68fe06621","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.1_1764886917627_0.007339706054583228","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@enfyra/nuxt-seo","version":"0.1.2","_id":"@enfyra/nuxt-seo@0.1.2","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"db71fd57877ed5e8dafa7ca23148b2dc173c379c","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.2.tgz","fileCount":17,"integrity":"sha512-S8Fzv2kRLm0lSQAY+Tl3jSOpacnyjuCrBdrF3WVDwnHVpcWEMobgqZET2CiCuijaNqVrZJ4XeNKUYUfp6YF/gw==","signatures":[{"sig":"MEQCIBJWpU4HYvJ7RCw8GOq218CaKvKIXMa5KXFiuBSR8tc8AiBPZfSyTeT8lArJ5YMabQxVr5iKKCTVMWMInDYk5V9ADg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47467},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"a31b54bd0839a20c249be9538117afd68fe06621","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.2_1764886942528_0.1398601122823233","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@enfyra/nuxt-seo","version":"0.1.3","_id":"@enfyra/nuxt-seo@0.1.3","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"e8adeb84f7743c38bb7f23d9a4e13b04fe74cd13","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.3.tgz","fileCount":17,"integrity":"sha512-3PrSvfb6Kn8zNzE7FDhRW+GJcV+MHxCCwnurqL9Rkcm44uppZVDErljv4Y5BYvwcyq7Hyj/wvHIZdn8WsB+hjA==","signatures":[{"sig":"MEUCIAkpl91y49V4he2bPk1OCxk/Zoa9N2RnZX26/ZoS9xihAiEAkcL8751kFob1NoVMCICwDcscF6kM0RWurcxdzMNuIzo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47467},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"a31b54bd0839a20c249be9538117afd68fe06621","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.3_1764887029223_0.0014521558092763787","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@enfyra/nuxt-seo","version":"0.1.4","_id":"@enfyra/nuxt-seo@0.1.4","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"0657d49d21124c561eb500c4175cd428f5457a65","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.4.tgz","fileCount":17,"integrity":"sha512-11MMSnXKtUQZk/MSO2kq1m3Y30LY4/F//QBC4V6r7b45H6tc52TPcQK3OPkW+Ndi7z/plNSx7UQ9sNPQIVMLCA==","signatures":[{"sig":"MEQCIF0NZ7u0pvREiOex2T+TiPBC6F8BhyK9o4raN20wVm2yAiAJH8EI42BEBBVvyi3rVUczn/a/MsqSfyIQKAcR1Qohog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47433},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"a31b54bd0839a20c249be9538117afd68fe06621","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.4_1764887159256_0.6814925855131833","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@enfyra/nuxt-seo","version":"0.1.5","_id":"@enfyra/nuxt-seo@0.1.5","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"a372b4ef6b4265077cd189922c4cb9853035de29","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.5.tgz","fileCount":17,"integrity":"sha512-E0UNjP66ch2njBIE/iaxWFCdhjY0svoYqwvI1byPevrqSJr0KXjZk8L6pHugA/gSJ8YxTw/dhZoR0SGDKthPzQ==","signatures":[{"sig":"MEUCIHF0RUu5FT+/w5+h3fleq+AljvJwNC6zWLLCR5ZFR3OfAiEAt8vSFAgPBsij34rwZ04RjkQGG7H6rJ0FayUbNqxSB8w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49257},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"a31b54bd0839a20c249be9538117afd68fe06621","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.5_1764887258767_0.8045653843233374","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@enfyra/nuxt-seo","version":"0.1.6","_id":"@enfyra/nuxt-seo@0.1.6","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"70f9ca25bc2561de952c2f6b1ca317d4bb1ec4f6","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.6.tgz","fileCount":17,"integrity":"sha512-q3CfoffmIfJzrkpE0un7JQlRQiykpi2JZR2gsEGsSR05lKexIr5CldHLHPmBTQodbiJ6v52ijnpQiNbc2CUg2w==","signatures":[{"sig":"MEUCIAacfZGSq44tJfb0HSc9s8aOTpz/VUEA7/k8YbA/AzduAiEAn/AFu/woNKjkLPdA47pQJl5dAYwm2ZcrzNUEgrPJ3Go=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49819},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"a31b54bd0839a20c249be9538117afd68fe06621","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.6_1764887536546_0.6910914167236339","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@enfyra/nuxt-seo","version":"0.1.7","_id":"@enfyra/nuxt-seo@0.1.7","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"a35d62b9c686e032b9b4a4f731b41727716519c4","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.7.tgz","fileCount":17,"integrity":"sha512-DtxgPF07frp74UHPLtSzmXtAmElsqZFOLKG2pM+h+tq0Yzc0+FYFaGgAoLY5S1fzNr6ZqnMcHe0D6TROCAYH2A==","signatures":[{"sig":"MEYCIQC5dm7IBsa1/puYe8Tf5Lpx4YeQXp6liXeEPHrfhxaQVAIhANytlzhzy8e8iAp0Pq0ZrOW+WvX5qEO8g1te4s41dVjB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49799},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"a31b54bd0839a20c249be9538117afd68fe06621","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.7_1764887743149_0.980761844732253","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@enfyra/nuxt-seo","version":"0.1.8","_id":"@enfyra/nuxt-seo@0.1.8","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"b1d5aa0298627536cc59dbf122c0ce807210c732","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.8.tgz","fileCount":17,"integrity":"sha512-1snDgyCUsJn5Gi0wd6czvf+kEVH8lkOdwEXJlUlN2aPPb9zyUWLt2cVqT/Stuma9OrqIvHx6YDgB9Ncd1qtodQ==","signatures":[{"sig":"MEUCIC6xpi3IrsV2iql/iMILBP8Nsy33Q7mG/k7BXXhfLDM+AiEAhIj2qEVr3q/z6ejHKWRFiMwM5GpkW+31PpsA1Qg+yeI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49602},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"a31b54bd0839a20c249be9538117afd68fe06621","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.8_1764888027288_0.6124938096318497","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@enfyra/nuxt-seo","version":"0.1.9","_id":"@enfyra/nuxt-seo@0.1.9","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"fee2e1df34f0328616518be0b0d2293e9531c4fb","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.9.tgz","fileCount":17,"integrity":"sha512-9BFaKzz5XuMvGTYVxQcwOLsqqRJ0xhE78uE8u4Nvm51ZaEsvsWLnmXsecEU2jdGxHsQ+f3yXFmWXz/2dljECmQ==","signatures":[{"sig":"MEYCIQCzAA+X/4Z3PArxcfzmoirYaVjFN/Syg1bA6rLD5YZBDAIhAJlGH+0SZhQhB/9Pf3HupmWg+bHHq/illxVE74+lOOw+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53616},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"a31b54bd0839a20c249be9538117afd68fe06621","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.9_1764888293720_0.21524769542230415","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@enfyra/nuxt-seo","version":"0.1.10","_id":"@enfyra/nuxt-seo@0.1.10","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"87d636a0d07bdd3919bad38958e22db89a93bca0","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.10.tgz","fileCount":17,"integrity":"sha512-zz6/xOCBgalPJB6xLIu8nw7XbygVCbUj3JiuxurjJwf+GCa0Ld0COiGy1NSvGamiuZybEWbaz/vSr9vv3vQP8Q==","signatures":[{"sig":"MEQCIHO7ILWwDjOs0NujIW/jh0tkStF60aOXLYWgMUcgrUw6AiAulYa6aqozzAq2IkIi1Yir+aEmmuZoxx97J5essFlTpg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57004},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"f282631514c7af574c6074ac5934466b5b532de8","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"h3":"^1.15.0","sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.10_1764942121254_0.9716719848221576","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@enfyra/nuxt-seo","version":"0.1.11","_id":"@enfyra/nuxt-seo@0.1.11","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"b06362b46acc336caa7723fe1a87bfcea9014704","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.11.tgz","fileCount":17,"integrity":"sha512-3qs7TTV1kJEG+sL8j3pYsO/Bkt1cu71RtyPJTUpoblgmTtdjKj4WpEfsr2y4+U20nLWwbGdii+uz2eOm27VaQg==","signatures":[{"sig":"MEUCIEsjeTr6hgo74fbPsUK0UQUcPPOukm6yJjvIBP4pg4qPAiEAmTZ0vIgyf9VD0qItG396//QaBX//w1p9S8HFnnLCeaQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56974},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"f282631514c7af574c6074ac5934466b5b532de8","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"h3":"^1.15.0","sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.11_1764942870562_0.8944664051525848","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@enfyra/nuxt-seo","version":"0.1.12","keywords":["nuxt","nuxt-module","nuxt4","seo","meta-tags","open-graph","twitter-cards","structured-data","json-ld","sitemap","robots-txt","og-image","pwa","webmanifest"],"author":{"email":"dothinh115@gmail.com"},"license":"MIT","_id":"@enfyra/nuxt-seo@0.1.12","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"homepage":"https://github.com/enfyra/nuxt-seo#readme","bugs":{"url":"https://github.com/enfyra/nuxt-seo/issues"},"dist":{"shasum":"2708debea1abb0ea868c4b55e8387f31376c89dd","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.12.tgz","fileCount":16,"integrity":"sha512-jhg6gb04kdHxRaw+9SHR51fE00T3ONewJ275prmLc4R5MOHNJ2edCmgGUNUQC1b/Ap7HiKWVdSyOQdJm5jDVNg==","signatures":[{"sig":"MEUCIA6ELcShCfjNFlLpTn2oOYIqHEOzHkH/KEi+p+ATwzXkAiEAiT7k3beEGIIshO46CYYeziGwQ8+LmyTQ3naM7FAZv0g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":56995},"main":"./module.ts","type":"module","types":"./module.d.ts","exports":{".":{"types":"./module.d.ts","import":"./module.ts"},"./types":{"types":"./src/types.ts","import":"./src/types.ts"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts"},"gitHead":"b2d0dcf542b858afa5bba54e8bca19069c5caf1c","_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"git+https://github.com/enfyra/nuxt-seo.git","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"h3":"^1.15.0","sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.0.0"},"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.12_1765027084970_0.7629706868196289","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@enfyra/nuxt-seo","version":"0.1.18","keywords":["nuxt","nuxt-module","nuxt4","seo","meta-tags","open-graph","twitter-cards","structured-data","json-ld","sitemap","robots-txt","og-image","pwa","webmanifest"],"author":{"email":"dothinh115@gmail.com"},"license":"MIT","_id":"@enfyra/nuxt-seo@0.1.18","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"homepage":"https://github.com/enfyra/nuxt-seo#readme","bugs":{"url":"https://github.com/enfyra/nuxt-seo/issues"},"dist":{"shasum":"33d567a4344e1c25dd5652bee670413fbd4191c8","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.18.tgz","fileCount":19,"integrity":"sha512-hNR9whOfyXqNGeKKe010nyT/CUh0xePXfJUdGyd7miIWtY2IeEcR0dKRPSFehgqqDxO/mrFV7PleIF+iDHdv5w==","signatures":[{"sig":"MEYCIQCqIY9ir7xVuG0Y6KjLGplv5ef3VbrJXkdRx5Ei33fnRwIhANGoagffVh/7gLTAB9V/6eQ5gV9Q1qNMKhAkWK8prbNj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":67822},"main":"./dist/module.mjs","type":"module","types":"./dist/types.d.mts","exports":{".":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup":"./src/server/middleware/og-warmup.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup.ts":"./src/server/middleware/og-warmup.ts"},"gitHead":"e55796cf6f375d1e719a40b805a00c5cb3947449","scripts":{"dev":"nuxt dev playground","lint":"eslint .","test":"vitest run","prepack":"nuxt-module-build build","lint:fix":"eslint . --fix","test:watch":"vitest watch","dev:prepare":"nuxt-module-build build --stub && nuxt-module-build prepare && nuxi prepare playground"},"_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"git+https://github.com/enfyra/nuxt-seo.git","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"h3":"^1.15.0","sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"typesVersions":{"*":{".":["./dist/types.d.mts"]}},"_hasShrinkwrap":false,"devDependencies":{"nuxt":"^4.0.0","eslint":"^9.39.1","vitest":"^4.0.15","typescript":"~5.9.3","@types/node":"^20.0.0","@nuxt/test-utils":"^3.21.0","@types/node-fetch":"^2.6.13","@nuxt/eslint-config":"^1.11.0","@nuxt/module-builder":"^1.0.2"},"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.18_1765719516247_0.7467094539212691","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@enfyra/nuxt-seo","version":"0.1.19","keywords":["nuxt","nuxt-module","nuxt4","seo","meta-tags","open-graph","twitter-cards","structured-data","json-ld","sitemap","robots-txt","og-image","pwa","webmanifest"],"author":{"email":"dothinh115@gmail.com"},"license":"MIT","_id":"@enfyra/nuxt-seo@0.1.19","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"homepage":"https://github.com/enfyra/nuxt-seo#readme","bugs":{"url":"https://github.com/enfyra/nuxt-seo/issues"},"dist":{"shasum":"1251bba76992128f940a75f1eba5a7bcd496fc0c","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.19.tgz","fileCount":19,"integrity":"sha512-cPPJINuOQIry+raRoUnPia0Ys61mIkmY7bDFSEVZWB4fdQZYmYvtupxgeyoG1bfZduaO1hqd17JKMcZxXrhcXg==","signatures":[{"sig":"MEUCIQCrxGiQ/yuUMUBrjBTR8acAefawOSp3UaGM4dQV6oG5hAIgAg2GLhITg0LoIkzpgd1OGnQUDD4sAfow68pDjylFWGE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70673},"main":"./dist/module.mjs","type":"module","types":"./dist/types.d.mts","exports":{".":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup":"./src/server/middleware/og-warmup.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup.ts":"./src/server/middleware/og-warmup.ts"},"gitHead":"e55796cf6f375d1e719a40b805a00c5cb3947449","scripts":{"dev":"nuxt dev playground","lint":"eslint .","test":"vitest run","prepack":"nuxt-module-build build","lint:fix":"eslint . --fix","test:watch":"vitest watch","dev:prepare":"nuxt-module-build build --stub && nuxt-module-build prepare && nuxi prepare playground"},"_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"git+https://github.com/enfyra/nuxt-seo.git","type":"git"},"_npmVersion":"11.6.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.9.0","dependencies":{"h3":"^1.15.0","sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"typesVersions":{"*":{".":["./dist/types.d.mts"]}},"_hasShrinkwrap":false,"devDependencies":{"nuxt":"^4.0.0","eslint":"^9.39.1","vitest":"^4.0.15","typescript":"~5.9.3","@types/node":"^20.0.0","@nuxt/test-utils":"^3.21.0","@types/node-fetch":"^2.6.13","@nuxt/eslint-config":"^1.11.0","@nuxt/module-builder":"^1.0.2"},"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.19_1765720727412_0.9056182355288931","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"@enfyra/nuxt-seo","version":"0.1.20","keywords":["nuxt","nuxt-module","nuxt4","seo","meta-tags","open-graph","twitter-cards","structured-data","json-ld","sitemap","robots-txt","og-image","pwa","webmanifest"],"author":{"email":"dothinh115@gmail.com"},"license":"MIT","_id":"@enfyra/nuxt-seo@0.1.20","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"183ff5d3c8073024d89b146fcadf235f723921ec","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.20.tgz","fileCount":29,"integrity":"sha512-Nq0fSHAxJhGz3e+Jsp2bb0Wg7MCOLMZU3dhAApIGn8naLJTxNL25Om19Yt7jebRQJajRM398i2dRyS5GHthXQw==","signatures":[{"sig":"MEQCIH7zONkQQRhwxaFs+CHogdFzAUcJxkEvbXzlE3qPdqCRAiB5vGpEpqgcKtfPw4WQfs3kz+Z9FpdZ4EpbVf2bZStTEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72385},"main":"./dist/module.mjs","type":"module","types":"./dist/types.d.mts","exports":{".":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup":"./src/server/middleware/og-warmup.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup.ts":"./src/server/middleware/og-warmup.ts"},"scripts":{"dev":"nuxt dev playground","lint":"eslint .","test":"vitest run","prepack":"nuxt-module-build build","lint:fix":"eslint . --fix","test:watch":"vitest watch","dev:prepare":"nuxt-module-build build --stub && nuxt-module-build prepare && nuxi prepare playground"},"_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"https://github.com/enfyra/nuxt-seo","type":"git"},"description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"dependencies":{"h3":"^1.15.0","sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"typesVersions":{"*":{".":["./dist/types.d.mts"]}},"_hasShrinkwrap":false,"devDependencies":{"nuxt":"^4.0.0","eslint":"^9.39.1","vitest":"^4.0.15","typescript":"~5.9.3","@types/node":"^20.0.0","@nuxt/test-utils":"^3.21.0","@types/node-fetch":"^2.6.13","@nuxt/eslint-config":"^1.11.0","@nuxt/module-builder":"^1.0.2"},"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.20_1767811345299_0.40876489466390464","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@enfyra/nuxt-seo","version":"0.1.21","keywords":["nuxt","nuxt-module","nuxt4","seo","meta-tags","open-graph","twitter-cards","structured-data","json-ld","sitemap","robots-txt","og-image","pwa","webmanifest"],"author":{"email":"dothinh115@gmail.com"},"license":"MIT","_id":"@enfyra/nuxt-seo@0.1.21","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"882f3748b64c63aa7438325609b52e62e2395593","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.21.tgz","fileCount":29,"integrity":"sha512-XLmu+4HDBg2aDEBtTwkxrT3WzF/JIfOuf7lqbyXARgZFe4kRzoCnPHz36+C8jGkeAUX5pUxGSLbQnfX8T8lPmg==","signatures":[{"sig":"MEYCIQCiuTtGSeVJYtkzSg7ZQroksge4427ky6QjSukTUKDHLQIhAIb2JCDTk7/KxN2E6Ejtr18VYWsGHRdUH9lJ1YUngipG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72437},"main":"./dist/module.mjs","type":"module","types":"./dist/types.d.mts","exports":{".":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup":"./src/server/middleware/og-warmup.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup.ts":"./src/server/middleware/og-warmup.ts"},"scripts":{"dev":"nuxt dev playground","lint":"eslint .","test":"vitest run","prepack":"nuxt-module-build build","lint:fix":"eslint . --fix","test:watch":"vitest watch","dev:prepare":"nuxt-module-build build --stub && nuxt-module-build prepare && nuxi prepare playground"},"_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"https://github.com/enfyra/nuxt-seo","type":"git"},"description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"dependencies":{"h3":"^1.15.0","sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"typesVersions":{"*":{".":["./dist/types.d.mts"]}},"_hasShrinkwrap":false,"devDependencies":{"nuxt":"^4.0.0","eslint":"^9.39.1","vitest":"^4.0.15","typescript":"~5.9.3","@types/node":"^20.0.0","@nuxt/test-utils":"^3.21.0","@types/node-fetch":"^2.6.13","@nuxt/eslint-config":"^1.11.0","@nuxt/module-builder":"^1.0.2"},"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.21_1767811736230_0.8436875273704347","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"@enfyra/nuxt-seo","version":"0.1.22","keywords":["nuxt","nuxt-module","nuxt4","seo","meta-tags","open-graph","twitter-cards","structured-data","json-ld","sitemap","robots-txt","og-image","pwa","webmanifest"],"author":{"email":"dothinh115@gmail.com"},"license":"MIT","_id":"@enfyra/nuxt-seo@0.1.22","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"24ea5809fd9a21f91cb9a2b231866d0e20466d07","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.22.tgz","fileCount":29,"integrity":"sha512-JMBgWHVXyEdjZRrx7OLrFIzjJMcL+7GppMZd6qwDARXRHm+fbOpWW+6hwCqKQ+20zmW+cfirM59OgewmSGC4wg==","signatures":[{"sig":"MEUCICbUhNrXXBmEY1+BXX5/+1DeqD5CqJ2hv4ccMO9wSHeVAiEAj5SCetmib0/77f0d4pIjIEe7hDUxieT8eHXLhWz2ykU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":72315},"main":"./dist/module.mjs","type":"module","types":"./dist/types.d.mts","exports":{".":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup":"./src/server/middleware/og-warmup.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup.ts":"./src/server/middleware/og-warmup.ts"},"scripts":{"dev":"nuxt dev playground","lint":"eslint .","test":"vitest run","prepack":"nuxt-module-build build","lint:fix":"eslint . --fix","test:watch":"vitest watch","dev:prepare":"nuxt-module-build build --stub && nuxt-module-build prepare && nuxi prepare playground"},"_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"https://github.com/enfyra/nuxt-seo","type":"git"},"description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"dependencies":{"h3":"^1.15.0","sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"typesVersions":{"*":{".":["./dist/types.d.mts"]}},"_hasShrinkwrap":false,"devDependencies":{"nuxt":"^4.0.0","eslint":"^9.39.1","vitest":"^4.0.15","typescript":"~5.9.3","@types/node":"^20.0.0","@nuxt/test-utils":"^3.21.0","@types/node-fetch":"^2.6.13","@nuxt/eslint-config":"^1.11.0","@nuxt/module-builder":"^1.0.2"},"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.22_1767811793871_0.8603259892853221","host":"s3://npm-registry-packages-npm-production"}},"0.1.23":{"name":"@enfyra/nuxt-seo","version":"0.1.23","keywords":["nuxt","nuxt-module","nuxt4","seo","meta-tags","open-graph","twitter-cards","structured-data","json-ld","sitemap","robots-txt","og-image","pwa","webmanifest"],"author":{"email":"dothinh115@gmail.com"},"license":"MIT","_id":"@enfyra/nuxt-seo@0.1.23","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"dist":{"shasum":"1826c19f99ce8f6d7a709b40bcec4ea3e8cdfafd","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.23.tgz","fileCount":29,"integrity":"sha512-tRS+YeKDS7iqs4i0ehNp8H4S3WZXWNMDFH1MmxugYoDWzXoHqj0t5oZfSx63zXNSW10cXsK2P1Mn6bCE24WLMA==","signatures":[{"sig":"MEYCIQDK6XDXq6Ryy5xzaud6huUekBBAP+O3f+k8ZVCGpUIf0gIhAN1AFtEdusqaLFsLraWyGBnbGou61R8CEm8OOJqiMdVO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74632},"main":"./dist/module.mjs","type":"module","types":"./dist/types.d.mts","exports":{".":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup":"./src/server/middleware/og-warmup.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup.ts":"./src/server/middleware/og-warmup.ts"},"scripts":{"dev":"nuxt dev playground","lint":"eslint .","test":"vitest run","prepack":"nuxt-module-build build","lint:fix":"eslint . --fix","test:watch":"vitest watch","dev:prepare":"nuxt-module-build build --stub && nuxt-module-build prepare && nuxi prepare playground"},"_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"https://github.com/enfyra/nuxt-seo","type":"git"},"description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"dependencies":{"h3":"^1.15.0","sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"typesVersions":{"*":{".":["./dist/types.d.mts"]}},"_hasShrinkwrap":false,"devDependencies":{"nuxt":"^4.0.0","eslint":"^9.39.1","vitest":"^4.0.15","typescript":"~5.9.3","@types/node":"^20.0.0","@nuxt/test-utils":"^3.21.0","@types/node-fetch":"^2.6.13","@nuxt/eslint-config":"^1.11.0","@nuxt/module-builder":"^1.0.2"},"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.23_1778780249661_0.8676138685312909","host":"s3://npm-registry-packages-npm-production"}},"0.1.24":{"name":"@enfyra/nuxt-seo","version":"0.1.24","keywords":["nuxt","nuxt-module","nuxt4","seo","meta-tags","open-graph","twitter-cards","structured-data","json-ld","sitemap","robots-txt","og-image","pwa","webmanifest"],"author":{"email":"dothinh115@gmail.com"},"license":"MIT","_id":"@enfyra/nuxt-seo@0.1.24","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"homepage":"https://github.com/enfyra/nuxt-seo#readme","bugs":{"url":"https://github.com/enfyra/nuxt-seo/issues"},"dist":{"shasum":"7aa57c909b373d57eaa122bdb68d4b5a81b28fd1","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.24.tgz","fileCount":20,"integrity":"sha512-Hz8IuzmYFJhk6HGa2RF+otxH6BmFl5kBWvmKYc9e3B+LuYp/TRZerWTghD4TECwlv6GVy/72VmmQNQgwSJdFOw==","signatures":[{"sig":"MEQCICMjHYZ7O9dUPO4BLOE/Pz48NBv6i3zQAfp62N/zWfwzAiBt7qttnoKdKIS/0pH29VNLf+5F8KtI5dx7k1lA6xvovg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82017},"main":"./dist/module.mjs","type":"module","types":"./dist/types.d.mts","exports":{".":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup":"./src/server/middleware/og-warmup.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup.ts":"./src/server/middleware/og-warmup.ts"},"gitHead":"50789378a6134abb3f57298e0ed851a5365e05f0","scripts":{"dev":"nuxt dev playground","lint":"eslint .","test":"vitest run","prepack":"nuxt-module-build build","lint:fix":"eslint . --fix","test:watch":"vitest watch","dev:prepare":"nuxt-module-build build --stub && nuxt-module-build prepare && nuxi prepare playground"},"_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"git+https://github.com/enfyra/nuxt-seo.git","type":"git"},"_npmVersion":"11.13.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.17.0","dependencies":{"h3":"^1.15.0","sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"typesVersions":{"*":{".":["./dist/types.d.mts"]}},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.0","devDependencies":{"nuxt":"^4.0.0","eslint":"^9.39.1","vitest":"^4.0.15","typescript":"~5.9.3","@types/node":"^20.0.0","@nuxt/test-utils":"^3.21.0","@types/node-fetch":"^2.6.13","@nuxt/eslint-config":"^1.11.0","@nuxt/module-builder":"^1.0.2"},"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.24_1787203421737_0.720561405023052","host":"s3://npm-registry-packages-npm-production"}},"0.1.25":{"name":"@enfyra/nuxt-seo","version":"0.1.25","keywords":["nuxt","nuxt-module","nuxt4","seo","meta-tags","open-graph","twitter-cards","structured-data","json-ld","sitemap","robots-txt","og-image","pwa","webmanifest"],"author":{"email":"dothinh115@gmail.com"},"license":"MIT","_id":"@enfyra/nuxt-seo@0.1.25","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"homepage":"https://github.com/enfyra/nuxt-seo#readme","bugs":{"url":"https://github.com/enfyra/nuxt-seo/issues"},"dist":{"shasum":"5c1062bf379cebed6cab3d07c408a54c08f6395e","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.25.tgz","fileCount":20,"integrity":"sha512-pFRHFeJTvtl76W/6r33AOnDIgrJsUxrvMRSPgU+1BwuRv6Zy5Gx3mji6C+Pz5LoJ66oaetsKijWXfrJH7bIxtg==","signatures":[{"sig":"MEQCIHWCOXiDkH/kkEYR+RkScxr9L6eabqR/vwua5Q6eM0UIAiAjpmPva2krhvl9kI8Yxc+TfTCd7KYYu00bQYAzlK0V5w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82548},"main":"./dist/module.mjs","type":"module","types":"./dist/types.d.mts","exports":{".":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./src/server/routes/og":"./src/server/routes/og.ts","./src/composables/useSEO":{"types":"./src/composables/useSEO.ts","import":"./src/composables/useSEO.ts"},"./src/types/nuxt-imports":{"types":"./src/types/nuxt-imports.d.ts"},"./src/server/routes/og.ts":"./src/server/routes/og.ts","./src/server/routes/robots":"./src/server/routes/robots.ts","./src/server/routes/sitemap":"./src/server/routes/sitemap.ts","./src/composables/usePageSEO":{"types":"./src/composables/usePageSEO.ts","import":"./src/composables/usePageSEO.ts"},"./src/server/routes/robots.ts":"./src/server/routes/robots.ts","./src/server/routes/sitemap.ts":"./src/server/routes/sitemap.ts","./src/server/routes/webmanifest":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup":"./src/server/middleware/og-warmup.ts","./src/server/routes/webmanifest.ts":"./src/server/routes/webmanifest.ts","./src/server/middleware/og-warmup.ts":"./src/server/middleware/og-warmup.ts"},"gitHead":"50789378a6134abb3f57298e0ed851a5365e05f0","scripts":{"dev":"nuxt dev playground","lint":"eslint .","test":"vitest run","prepack":"nuxt-module-build build","lint:fix":"eslint . --fix","test:watch":"vitest watch","dev:prepare":"nuxt-module-build build --stub && nuxt-module-build prepare && nuxi prepare playground"},"_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"repository":{"url":"git+https://github.com/enfyra/nuxt-seo.git","type":"git"},"_npmVersion":"11.13.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","directories":{},"_nodeVersion":"24.17.0","dependencies":{"h3":"^1.15.0","sharp":"^0.34.5","@nuxt/kit":"^4.0.0","puppeteer-core":"^24.32.0","@sparticuz/chromium":"^141.0.0"},"typesVersions":{"*":{".":["./dist/types.d.mts"]}},"_hasShrinkwrap":false,"packageManager":"yarn@4.17.0","devDependencies":{"nuxt":"^4.0.0","eslint":"^9.39.1","vitest":"^4.0.15","typescript":"~5.9.3","@types/node":"^20.0.0","@nuxt/test-utils":"^3.21.0","@types/node-fetch":"^2.6.13","@nuxt/eslint-config":"^1.11.0","@nuxt/module-builder":"^1.0.2"},"peerDependencies":{"nuxt":"^4.0.0","@nuxt/kit":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nuxt-seo_0.1.25_1787204156849_0.6181651672618482","host":"s3://npm-registry-packages-npm-production"}},"0.1.26":{"name":"@enfyra/nuxt-seo","version":"0.1.26","packageManager":"yarn@4.17.0","description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","type":"module","main":"./dist/module.mjs","types":"./dist/types.d.mts","typesVersions":{"*":{".":["./dist/types.d.mts"]}},"keywords":["nuxt","nuxt-module","nuxt4","seo","meta-tags","open-graph","twitter-cards","structured-data","json-ld","sitemap","robots-txt","og-image","pwa","webmanifest"],"license":"MIT","author":{"email":"dothinh115@gmail.com"},"exports":{".":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"},"./types":{"types":"./dist/types.d.mts","import":"./dist/module.mjs"}},"repository":{"type":"git","url":"git+https://github.com/enfyra/nuxt-seo.git"},"peerDependencies":{"@nuxt/kit":"^4.0.0","nuxt":"^4.0.0"},"dependencies":{"@nuxt/kit":"^4.0.0","@sparticuz/chromium":"^141.0.0","defu":"^6.1.4","h3":"^1.15.0","puppeteer-core":"^24.32.0","sharp":"^0.34.5"},"scripts":{"prepack":"nuxt-module-build build","dev":"nuxt dev playground","dev:prepare":"nuxt-module-build build --stub && nuxt-module-build prepare && nuxi prepare playground","test":"vitest run","test:watch":"vitest watch","lint":"eslint .","lint:fix":"eslint . --fix"},"devDependencies":{"@nuxt/eslint-config":"^1.11.0","@nuxt/module-builder":"^1.0.2","@nuxt/test-utils":"^3.21.0","@types/node":"^20.0.0","@types/node-fetch":"^2.6.13","eslint":"^9.39.1","nuxt":"^4.0.0","typescript":"~5.9.3","vitest":"^4.0.15","vue-tsc":"^3.3.10"},"gitHead":"50789378a6134abb3f57298e0ed851a5365e05f0","_id":"@enfyra/nuxt-seo@0.1.26","bugs":{"url":"https://github.com/enfyra/nuxt-seo/issues"},"homepage":"https://github.com/enfyra/nuxt-seo#readme","_nodeVersion":"24.17.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-Cc7TYTR9unlTfYuXPkPMfLFsg4koy5qYOQhZv93tv/sjZz88/2OP3PqdhVrwSDFEBHo2i8acOKs99CfySQyAYw==","shasum":"ffd7c2edd7b6da69c4d71379a90fb14d997560c9","tarball":"https://registry.npmjs.org/@enfyra/nuxt-seo/-/nuxt-seo-0.1.26.tgz","fileCount":31,"unpackedSize":71533,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCYaE04MI3LG86iAX+ZMMovvf/5EaJRqcEF/SawHKAnWAIgUE68+VqSK21ZM7ECRAE5BPuwZ+NNVbVyJF5edPPl8Yw="}]},"_npmUser":{"name":"dothinh","email":"dothinh115@gmail.com"},"directories":{},"maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nuxt-seo_0.1.26_1787205493601_0.9988637478658142"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-04T22:13:29.359Z","modified":"2026-08-20T05:58:13.895Z","0.1.0":"2025-12-04T22:13:29.619Z","0.1.1":"2025-12-04T22:21:57.785Z","0.1.2":"2025-12-04T22:22:22.667Z","0.1.3":"2025-12-04T22:23:49.375Z","0.1.4":"2025-12-04T22:25:59.416Z","0.1.5":"2025-12-04T22:27:38.914Z","0.1.6":"2025-12-04T22:32:16.711Z","0.1.7":"2025-12-04T22:35:43.331Z","0.1.8":"2025-12-04T22:40:27.432Z","0.1.9":"2025-12-04T22:44:53.882Z","0.1.10":"2025-12-05T13:42:01.422Z","0.1.11":"2025-12-05T13:54:30.685Z","0.1.12":"2025-12-06T13:18:05.104Z","0.1.13":"2025-12-09T02:03:07.975Z","0.1.14":"2025-12-09T02:13:47.891Z","0.1.15":"2025-12-14T13:26:18.629Z","0.1.16":"2025-12-14T13:30:03.423Z","0.1.17":"2025-12-14T13:31:59.237Z","0.1.18":"2025-12-14T13:38:36.402Z","0.1.19":"2025-12-14T13:58:47.583Z","0.1.20":"2026-01-07T18:42:25.452Z","0.1.21":"2026-01-07T18:48:56.384Z","0.1.22":"2026-01-07T18:49:54.012Z","0.1.23":"2026-05-14T17:37:29.879Z","0.1.24":"2026-08-20T05:23:41.888Z","0.1.25":"2026-08-20T05:35:57.015Z","0.1.26":"2026-08-20T05:58:13.759Z"},"bugs":{"url":"https://github.com/enfyra/nuxt-seo/issues"},"author":{"email":"dothinh115@gmail.com"},"license":"MIT","homepage":"https://github.com/enfyra/nuxt-seo#readme","keywords":["nuxt","nuxt-module","nuxt4","seo","meta-tags","open-graph","twitter-cards","structured-data","json-ld","sitemap","robots-txt","og-image","pwa","webmanifest"],"repository":{"type":"git","url":"git+https://github.com/enfyra/nuxt-seo.git"},"description":"A powerful, configurable SEO module for Nuxt 4 with automatic OG image generation","maintainers":[{"name":"dothinh","email":"dothinh115@gmail.com"}],"readme":"# @enfyra/nuxt-seo\n\nA powerful SEO optimization tool for Nuxt 4 that provides comprehensive SEO features including meta tags, Open Graph, Twitter Cards, structured data, robots.txt, sitemap generation, and automatic OG image generation.\n\nOptimized by [Enfyra Team](https://enfyra.io).\n\n## Features\n\n- ✅ **Meta Tags**: Title, description, keywords, robots\n- ✅ **Open Graph**: Full OG tags support for social media sharing\n- ✅ **Twitter Cards**: Summary large image cards\n- ✅ **Structured Data**: JSON-LD schema.org markup (Organization, Website, WebPage, Article, Product, etc.)\n- ✅ **Robots.txt**: Dynamic generation with configurable rules\n- ✅ **Sitemap.xml**: Automatic sitemap generation from page configurations\n- ✅ **Web Manifest**: PWA support with configurable icons and manifest properties\n- ✅ **OG Image Generation**: Automatic screenshot-based OG image generation with caching\n- ✅ **Full TypeScript Support**: Complete type definitions with IntelliSense\n- ✅ **Auto-imports**: Zero-config auto-imports for all composables (`usePageSEO`, `useSEO`)\n- ✅ **Type-safe Configuration**: Type-safe config in `nuxt.config.ts` with autocomplete\n- ✅ **Per-page Configuration**: Configure SEO per page in `nuxt.config.ts` or runtime\n- ✅ **Global Configuration**: Set defaults for all pages\n- ✅ **Disable SEO**: Easy toggle for staging/testing environments\n\n## Installation\n\n```bash\nyarn add @enfyra/nuxt-seo\n```\n\n## Configuration\n\nAdd the module to your `nuxt.config.ts`:\n\n```typescript\nexport default defineNuxtConfig({\n  modules: ['@enfyra/nuxt-seo'],\n  \n  seo: {\n    enabled: true, // Set to false to disable SEO (useful for staging)\n    siteUrl: 'https://example.com',\n    siteName: 'My Website',\n    defaultLocale: 'en',\n    defaultImage: '/og-image.png',\n    defaultType: 'website', // 'website' | 'article' | 'product' | 'profile'\n    \n    // Per-page SEO configuration\n    pages: {\n      '/': {\n        title: 'Homepage - My Website',\n        description: 'Welcome to my website',\n        keywords: ['keyword1', 'keyword2'],\n        changefreq: 'daily',\n        priority: 1.0,\n        structuredData: {\n          '@type': 'SoftwareApplication',\n          name: 'My App',\n          // ... more structured data\n        }\n      },\n      '/about': {\n        title: 'About Us',\n        description: 'Learn more about our company',\n        changefreq: 'monthly',\n        priority: 0.8\n      }\n    },\n    \n    // Robots.txt configuration\n    robots: {\n      enabled: true,\n      disallow: ['/api/', '/admin/'],\n      sitemap: true,\n      sitemapPath: '/sitemap.xml'\n    },\n    \n    // Social media configuration\n    social: {\n      twitter: {\n        site: '@yourhandle',\n        creator: '@yourhandle'\n      },\n      facebook: {\n        appId: 'your-app-id'\n      }\n    },\n    \n    // Web Manifest configuration (PWA)\n    webmanifest: {\n      icons: [\n        {\n          src: '/icon-192x192.png',\n          sizes: '192x192',\n          type: 'image/png',\n        },\n        {\n          src: '/icon-512x512.png',\n          sizes: '512x512',\n          type: 'image/png',\n        },\n      ],\n      start_url: '/',\n      display: 'standalone',\n      background_color: '#ffffff',\n      theme_color: '#000000',\n    }\n  }\n})\n```\n\n## TypeScript & Auto-imports\n\n### 🎯 Zero-Configuration Auto-imports\n\n**No manual imports required!** All composables are automatically available in your Nuxt app:\n\n- ✅ `usePageSEO` - Automatically imported\n- ✅ `useSEO` - Automatically imported\n- ✅ Full TypeScript IntelliSense support\n- ✅ Type-safe configuration in `nuxt.config.ts`\n\n### 📦 Importing Types\n\nIf you need to use types in your code, you can import them:\n\n```typescript\nimport type { \n  SEOConfig, \n  ModuleOptions,\n  OgImageConfig,\n  WebManifestConfig\n} from '@enfyra/nuxt-seo'\n```\n\n### 🔍 Type Definitions\n\nThe module provides complete TypeScript definitions for:\n\n- `SEOConfig` - Main SEO configuration interface\n- `ModuleOptions` - Module configuration options\n- `OgImageConfig` - OG image generation configuration\n- `WebManifestConfig` - Web manifest (PWA) configuration\n- `RobotsConfig` - Robots.txt configuration\n\nAll types are automatically available in your IDE with full IntelliSense support.\n\n## Usage\n\n### Auto-imported Composables\n\n**No manual imports needed!** The module automatically imports `usePageSEO` and `useSEO` composables. Just use them directly in your components:\n\n### Basic Usage in Pages\n\n```vue\n<script setup lang=\"ts\">\n// Automatically uses config from nuxt.config.ts for current route\nusePageSEO()\n</script>\n\n<template>\n  <div>Your page content</div>\n</template>\n```\n\n### Override SEO in Pages\n\n```vue\n<script setup lang=\"ts\">\n// Override with page-specific config\nusePageSEO({\n  title: 'Custom Page Title',\n  description: 'Custom description for this page',\n  keywords: ['custom', 'keywords'],\n  image: '/custom-og-image.png'\n})\n</script>\n```\n\n### Advanced Usage with Structured Data\n\n```vue\n<script setup lang=\"ts\">\nusePageSEO({\n  title: 'Article Title',\n  description: 'Article description',\n  type: 'article',\n  publishedTime: '2024-01-01T00:00:00Z',\n  modifiedTime: '2024-01-02T00:00:00Z',\n  author: 'John Doe',\n  structuredData: {\n    '@type': 'Article',\n    headline: 'Article Title',\n    description: 'Article description',\n    author: {\n      '@type': 'Person',\n      name: 'John Doe'\n    },\n    publisher: {\n      '@type': 'Organization',\n      name: 'My Website'\n    }\n  }\n})\n</script>\n```\n\n### Using `useSEO` Directly\n\n```vue\n<script setup lang=\"ts\">\n// For more control, use useSEO directly\nconst { meta, structuredData } = useSEO({\n  title: 'Page Title',\n  description: 'Page description',\n  url: 'https://example.com/page',\n  image: '/og-image.png',\n  type: 'website'\n})\n</script>\n```\n\n### Reactive usage (using `computed` / state)\n\nBoth `usePageSEO` and `useSEO` accept either a **plain config object** or a **function that returns a config object**, so you can safely use reactive state/computed values.\n\n```vue\n<script setup lang=\"ts\">\nconst article = computed(() => ({\n  title: 'Article Title',\n  description: 'Article description',\n  image: '/article-og.png',\n}))\n\n// Option 1: Use a function to read reactive values each time (recommended)\nusePageSEO(() => ({\n  title: article.value.title,\n  description: article.value.description,\n  image: article.value.image,\n  type: 'article',\n}))\n\n// Option 2: Use directly with useSEO\nconst { meta, structuredData } = useSEO(() => ({\n  title: article.value.title,\n  description: article.value.description,\n  url: `https://example.com/blog/article`,\n  image: article.value.image,\n  type: 'article',\n}))\n</script>\n```\n\n## API Reference\n\n### Module Options\n\n```typescript\ninterface ModuleOptions {\n  enabled?: boolean // Enable/disable SEO globally\n  siteUrl?: string // Your site URL\n  siteName?: string // Your site name\n  defaultLocale?: string // Default locale (e.g., 'en', 'en_US')\n  defaultImage?: string // Default OG image path\n  defaultType?: 'website' | 'article' | 'product' | 'profile' // Default OG type\n  pages?: Record<string, PageSEOConfig> // Per-page configuration shape\n  robots?: RobotsConfig // Robots.txt configuration\n  social?: SocialConfig // Social media configuration shape\n  ogImage?: OgImageConfig // Dynamic OG image generation configuration\n  webmanifest?: WebManifestConfig // Web manifest (PWA) configuration\n}\n```\n\n### SEOConfig\n\n```typescript\ninterface SEOConfig {\n  title?: string\n  description?: string\n  keywords?: string[]\n  image?: string\n  url?: string\n  type?: 'website' | 'article' | 'product' | 'profile'\n  author?: string\n  publishedTime?: string\n  modifiedTime?: string\n  siteName?: string\n  locale?: string\n  alternateLocales?: string[]\n  noindex?: boolean\n  nofollow?: boolean\n  canonical?: string\n  structuredData?: Record<string, any> | Record<string, any>[]\n}\n```\n\n### PageSEOConfig\n\nDocumentation shape for `pages` entries. It extends `SEOConfig` with:\n\n```typescript\ninterface PageSEOConfig extends SEOConfig {\n  changefreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never'\n  priority?: number // 0.0 to 1.0\n  lastmod?: string // ISO date string\n}\n```\n\n### SocialConfig\n\nDocumentation shape for `social` configuration:\n\n```typescript\ninterface SocialConfig {\n  twitter?: {\n    site?: string\n    creator?: string\n  }\n  facebook?: {\n    appId?: string\n  }\n}\n```\n\n### OgImageConfig\n\n```typescript\ninterface OgImageConfig {\n  enabled?: boolean\n  route?: string // Public route for generated images (default: /_enfyra/nuxt-seo/og)\n  viewport?: {\n    width?: number\n    height?: number\n  }\n  quality?: number\n  format?: 'png' | 'jpeg' | 'webp'\n  cache?: {\n    ttl?: number\n    memoryTtl?: number\n  }\n  warmup?: {\n    enabled?: boolean\n    origin?: string\n    paths?: string[]\n    delay?: number\n    concurrency?: number\n    includeFacebook?: boolean\n  }\n}\n```\n\n### Composables\n\n#### `usePageSEO(pageConfig?: Partial<SEOConfig> | (() => Partial<SEOConfig>))`\n\nComposable to set SEO for the current page. Automatically merges:\n1. Global defaults from `nuxt.config.ts`\n2. Per-page config from `nuxt.config.ts` (based on current route)\n3. Runtime config passed to the composable (highest priority)\n\n**Returns:** Result from `useSEO()`\n\n**Example (static object):**\n```typescript\nusePageSEO({\n  title: 'Custom Title',\n  description: 'Custom Description',\n})\n```\n\n**Example (reactive, using function):**\n```typescript\nconst title = computed(() => `Blog - ${post.value.title}`)\n\nusePageSEO(() => ({\n  title: title.value,\n  description: post.value.excerpt,\n  image: post.value.image,\n}))\n```\n\n#### `useSEO(config: SEOConfig | (() => SEOConfig))`\n\nCore SEO composable that sets meta tags, Open Graph, Twitter Cards, and structured data.\n\n**Returns:**\n```typescript\n{\n  meta: Record<string, any>\n  structuredData?: Record<string, any> | Record<string, any>[]\n}\n```\n\n**Example:**\n```typescript\nconst { meta, structuredData } = useSEO({\n  title: 'Page Title',\n  description: 'Page Description',\n  url: 'https://example.com/page'\n})\n```\n\n## Components\n\n### SEOHead\n\nComponent for rendering structured data (JSON-LD).\n\n```vue\n<script setup lang=\"ts\">\nimport { SEOHead } from '@enfyra/nuxt-seo/src/components/SEOHead'\n\nconst seoConfig = {\n  title: 'Page Title',\n  description: 'Page Description',\n  structuredData: {\n    '@type': 'WebPage',\n    // ... more structured data\n  }\n}\n</script>\n\n<template>\n  <SEOHead :config=\"seoConfig\" />\n</template>\n```\n\n### Breadcrumbs\n\nComponent for breadcrumb navigation with structured data.\n\n```vue\n<script setup lang=\"ts\">\nimport { Breadcrumbs } from '@enfyra/nuxt-seo/src/components/Breadcrumbs'\n\nconst breadcrumbItems = [\n  { name: 'Home', url: '/' },\n  { name: 'Category', url: '/category' },\n  { name: 'Current Page', url: '/category/page' }\n]\n</script>\n\n<template>\n  <Breadcrumbs :items=\"breadcrumbItems\" />\n</template>\n```\n\n## Production setup: canonical URLs, locales, and crawler routes\n\nFor a production site, configure every public route in `seo.pages` so the generated sitemap has an explicit crawl policy. `siteUrl` must be the public origin with no trailing slash. Do not point it at an internal API or admin host.\n\nFor localized Nuxt i18n routes, derive the canonical URL from the active locale and pass it to `usePageSEO`. Add the other locale codes with `alternateLocales`; this produces `og:locale` and `og:locale:alternate` metadata. Keep the sitemap entries aligned with those public URLs.\n\n```ts\nconst { locale, t } = useI18n()\nconst canonicalPath = computed(() => locale.value === 'vi' ? '/vi' : '/')\nconst canonicalUrl = computed(() => `https://example.com${canonicalPath.value}`)\n\nusePageSEO(() => ({\n  title: t('seo.title'),\n  description: t('seo.description'),\n  url: canonicalUrl.value,\n  canonical: canonicalUrl.value,\n  locale: locale.value === 'vi' ? 'vi_VN' : 'en_US',\n  alternateLocales: locale.value === 'vi' ? ['en_US'] : ['vi_VN'],\n}))\n```\n\nKeep non-public routes such as maintenance or preview pages out of `seo.pages`, add them to `robots.disallow`, and set `noindex: true` and `nofollow: true` in that route's `usePageSEO` call. A robots rule alone is not a noindex directive for a page that has already been crawled.\n\nThe module owns `/site.webmanifest`; do not also ship `public/site.webmanifest` or add a second manual manifest link. Configure the manifest entirely through `seo.webmanifest` so browsers receive the application name, colors, display mode, and existing icon files from one source of truth.\n\n## OG Image Generation\n\nThe module can automatically generate OG images by taking screenshots of your pages. This feature is disabled by default and can be enabled in your configuration.\n\n### Configuration\n\n```typescript\n// nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['@enfyra/nuxt-seo'],\n  seo: {\n    ogImage: {\n      enabled: true,\n      route: '/_enfyra/nuxt-seo/og',\n      viewport: {\n        width: 1440,\n        height: 754,\n      },\n      quality: 85,\n      format: 'webp',\n      cache: {\n        ttl: 24 * 60 * 60 * 1000, // 24 hours\n        memoryTtl: 60 * 60 * 1000, // 1 hour\n      },\n    }\n  }\n})\n```\n\n### Usage\n\nOnce enabled, the module automatically creates an endpoint at `ogImage.route` (default `/_enfyra/nuxt-seo/og`). The namespaced default stays separate from `/api/**` proxies and other modules. Pass the page path with the `path` query parameter and use that URL as the page image:\n\n```vue\n<script setup lang=\"ts\">\nconst config = useRuntimeConfig()\nconst seoConfig = config.public.seo\nconst siteUrl = seoConfig?.siteUrl || 'https://example.com'\nconst ogRoute = seoConfig?.ogImage?.route || '/_enfyra/nuxt-seo/og'\nconst route = useRoute()\n\nusePageSEO({\n  title: 'My Page Title',\n  description: 'My page description',\n  image: `${siteUrl}${ogRoute}?path=${encodeURIComponent(route.path)}`,\n})\n</script>\n```\n\nFor a static route, pass the route path directly:\n\n```vue\n<script setup lang=\"ts\">\nusePageSEO({\n  title: 'Pricing',\n  description: 'Plans and pricing',\n  image: '/_enfyra/nuxt-seo/og?path=%2Fpricing',\n})\n</script>\n```\n\nFor dynamic content, keep the path stable and put the dynamic title/description in the rendered page. The image generator screenshots the page itself, so the OG image reflects what the page displays at that route:\n\n```vue\n<script setup lang=\"ts\">\nconst route = useRoute()\nconst article = await fetchArticle(route.params.slug)\n\nusePageSEO(() => ({\n  title: article.title,\n  description: article.excerpt,\n  type: 'article',\n  image: `/_enfyra/nuxt-seo/og?path=${encodeURIComponent(route.path)}`,\n}))\n</script>\n```\n\nYou can preview an image directly in the browser:\n\n```text\nhttp://localhost:3000/_enfyra/nuxt-seo/og?path=%2Fmy-page\n```\n\nAdd the `og-hide` class to elements that should be hidden only from generated OG screenshots:\n\n```vue\n<template>\n  <CookieBanner class=\"og-hide\" />\n</template>\n```\n\n### Social image URLs and fallback behavior\n\nUse an absolute public URL for the `image` field when a page is shared outside the site. For generated images, build that URL from `siteUrl` and the route path. Do not use a relative OG route as the final Open Graph value: crawlers that do not preserve the original origin can resolve it incorrectly.\n\n```ts\nconst siteUrl = 'https://example.com'\nconst route = useRoute()\n\nusePageSEO({\n  title: 'Pricing',\n  description: 'Compare plans and pricing.',\n  image: `${siteUrl}/_enfyra/nuxt-seo/og?path=${encodeURIComponent(route.path)}`,\n})\n```\n\n`defaultImage` is a fallback only. It is used when a screenshot cannot be generated, so it should be a public static image with a stable absolute or site-relative URL. Prefer a 1200×630 image; social crawlers can display a different aspect ratio, but their card crop will be more reliable at that size.\n\n```ts\nseo: {\n  siteUrl: 'https://example.com',\n  defaultImage: '/og-fallback.png',\n}\n```\n\n### Startup cache warm-up\n\nOG capture is intentionally lazy by default: the first `/_enfyra/nuxt-seo/og` request may take several seconds while Chromium renders the page. Enable `warmup` to generate selected public pages in the background after Nitro begins listening. This does not delay application readiness. If a warm-up request fails, the module logs a warning; later OG requests still retry generation and can redirect to `defaultImage` if capture fails.\n\nWhen `paths` is omitted, the module warms every route in `seo.pages`. Set `includeFacebook` when you also want to pre-generate the separate 1200×630 JPEG cache used for Facebook crawlers. Keep `concurrency` low because each task launches a browser process.\n\n```ts\nseo: {\n  ogImage: {\n    enabled: true,\n    warmup: {\n      enabled: true,\n      paths: ['/', '/pricing'],\n      delay: 1000,\n      concurrency: 1,\n      includeFacebook: true,\n    },\n  },\n}\n```\n\n### How It Works\n\n1. **Screenshot Capture**: Uses Puppeteer to capture screenshots of your pages\n2. **Image Optimization**: Converts to WebP/JPEG format with configurable quality\n3. **Caching**: Two-tier caching system:\n   - **Memory cache**: Fast access for frequently requested images (1 hour default)\n   - **File cache**: Persistent cache stored in `.enfyra-og-cache/` directory (24 hours default)\n4. **Automatic URL Detection**: Automatically detects the correct URL based on request headers (supports staging/production)\n5. **Crawler Handling**: Facebook crawlers automatically receive a 1200x630 JPEG image and trigger background cache warmup for the crawled page\n\n### Requirements\n\n- **Development**: Requires Chrome/Chromium installed locally\n- **Production**: Uses `@sparticuz/chromium` for serverless environments (Vercel, Netlify, etc.)\n\n### Environment Variables\n\n- `CHROME_PATH`: Custom path to Chrome/Chromium executable (optional, for development)\n\n### Cache Management\n\nCache files are stored in `.enfyra-og-cache/` directory. You can safely delete this folder to clear the cache. The cache key is based on the page path and host, so different environments (staging/production) have separate caches.\n\n### Fallback Image\n\nSet `defaultImage` to provide a fallback when screenshot generation fails. Absolute URLs are redirected as-is, and relative paths are resolved against the current request host:\n\n```typescript\nexport default defineNuxtConfig({\n  modules: ['@enfyra/nuxt-seo'],\n  seo: {\n    siteUrl: 'https://example.com',\n    defaultImage: '/og-fallback.png',\n    ogImage: {\n      enabled: true,\n    },\n  },\n})\n```\n\n### Performance\n\n- **First request**: ~2-5 seconds (screenshot generation)\n- **Cached requests**: <100ms (served from cache)\n- **File size**: ~100-150KB (WebP format, 1440x754)\n\n## Server Routes\n\nThe module automatically generates:\n\n### `/site.webmanifest`\n\nWeb App Manifest file for PWA support. The manifest is automatically generated based on your configuration. If no icons are configured, the manifest will be generated without icons to prevent errors.\n\n**Configuration:**\n\n```typescript\n// nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['@enfyra/nuxt-seo'],\n  seo: {\n    webmanifest: {\n      icons: [\n        {\n          src: '/icon-192x192.png',\n          sizes: '192x192',\n          type: 'image/png',\n        },\n        {\n          src: '/icon-512x512.png',\n          sizes: '512x512',\n          type: 'image/png',\n        },\n      ],\n      start_url: '/',\n      display: 'standalone', // 'fullscreen' | 'standalone' | 'minimal-ui' | 'browser'\n      background_color: '#ffffff',\n      theme_color: '#000000',\n    }\n  }\n})\n```\n\n**WebManifestConfig Interface:**\n\n```typescript\ninterface WebManifestConfig {\n  icons?: Array<{\n    src: string\n    sizes: string\n    type?: string\n    purpose?: string\n  }>\n  start_url?: string\n  display?: 'fullscreen' | 'standalone' | 'minimal-ui' | 'browser'\n  background_color?: string\n  theme_color?: string\n}\n```\n\n**Important Notes:**\n\n- **Icons are optional**: If you don't configure icons, the manifest will be generated without them. This prevents errors when icon files don't exist.\n- **Automatic link tag**: The module automatically adds a `<link rel=\"manifest\">` tag to your pages pointing to `/site.webmanifest`.\n- **Default values**: If not configured, defaults are:\n  - `start_url`: `/`\n  - `display`: `standalone`\n  - `background_color`: `#ffffff`\n  - `theme_color`: `#000000`\n\n**Example Output:**\n\n```json\n{\n  \"name\": \"My Website\",\n  \"short_name\": \"My Website\",\n  \"description\": \"Website description\",\n  \"start_url\": \"/\",\n  \"display\": \"standalone\",\n  \"background_color\": \"#ffffff\",\n  \"theme_color\": \"#000000\",\n  \"icons\": [\n    {\n      \"src\": \"/icon-192x192.png\",\n      \"sizes\": \"192x192\",\n      \"type\": \"image/png\"\n    },\n    {\n      \"src\": \"/icon-512x512.png\",\n      \"sizes\": \"512x512\",\n      \"type\": \"image/png\"\n    }\n  ]\n}\n```\n\n### `/robots.txt`\n\nDynamically generated based on your configuration:\n\n```\nUser-Agent: *\nAllow: /\nDisallow: /api/\nDisallow: /admin/\n\nSitemap: https://example.com/sitemap.xml\n```\n\n### `/sitemap.xml`\n\nAutomatically generated from your page configurations:\n\n```xml\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">\n  <url>\n    <loc>https://example.com/</loc>\n    <lastmod>2024-01-01</lastmod>\n    <changefreq>daily</changefreq>\n    <priority>1.0</priority>\n  </url>\n  <!-- More URLs -->\n</urlset>\n```\n\n## TypeScript Support\n\n### 🚀 Full TypeScript Support\n\nThe module is built with TypeScript from the ground up and provides:\n\n- ✅ **Auto-imported Composables**: `usePageSEO` and `useSEO` are automatically available with full type inference\n- ✅ **Type-safe Configuration**: All configuration options in `nuxt.config.ts` are fully typed with IntelliSense\n- ✅ **Complete Type Definitions**: All interfaces, types, and configurations are fully typed\n- ✅ **IntelliSense Support**: Full autocomplete and type checking in VS Code, WebStorm, and other IDEs\n- ✅ **Type Inference**: Automatic type inference for reactive configurations\n\n### 📝 Type Definitions\n\nAll types are exported and available for import:\n\n```typescript\nimport type { \n  SEOConfig,           // Main SEO configuration\n  ModuleOptions,       // Module configuration\n  OgImageConfig,       // OG image generation config\n  WebManifestConfig,   // Web manifest (PWA) config\n  RobotsConfig,        // Robots.txt config\n  SitemapRoute,        // Sitemap route entry\n  SitemapHandler       // Custom sitemap handler\n} from '@enfyra/nuxt-seo'\n```\n\n### 💡 Type-safe Usage Examples\n\n```typescript\n// Type-safe configuration in nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['@enfyra/nuxt-seo'],\n  seo: {\n    siteUrl: 'https://example.com', // ✅ Type-checked\n    defaultType: 'website',         // ✅ Literal type: 'website' | 'article' | 'product' | 'profile'\n    ogImage: {\n      enabled: true,                  // ✅ Type-checked\n      format: 'webp',                // ✅ Literal type: 'png' | 'jpeg' | 'webp'\n      quality: 85,                   // ✅ Number type\n    }\n  }\n})\n```\n\n```vue\n<script setup lang=\"ts\">\n// ✅ usePageSEO is auto-imported with full type inference\n// ✅ All parameters are type-checked\nusePageSEO({\n  title: 'My Page',           // ✅ string\n  description: 'Description',  // ✅ string\n  type: 'article',            // ✅ 'website' | 'article' | 'product' | 'profile'\n  keywords: ['tag1', 'tag2'], // ✅ string[]\n  image: '/og.png',           // ✅ string\n})\n\n// ✅ Reactive usage with type inference\nconst article = computed(() => ({\n  title: 'Article Title',\n  description: 'Article description',\n}))\n\nusePageSEO(() => ({\n  title: article.value.title,      // ✅ Type-safe access\n  description: article.value.description,\n}))\n</script>\n```\n\n### 🔧 Troubleshooting TypeScript\n\nIf you encounter TypeScript errors:\n\n1. **Restart TypeScript Server**: In VS Code, press `Cmd/Ctrl + Shift + P` → \"TypeScript: Restart TS Server\"\n2. **Run Nuxt Prepare**: `yarn nuxt prepare`\n3. **Check Module Installation**: Ensure `@enfyra/nuxt-seo` is in `node_modules`\n4. **Verify Auto-imports**: Check that composables are available without imports (they should be!)\n\n## Examples\n\n### Example 1: Basic Setup\n\n```typescript\n// nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['@enfyra/nuxt-seo'],\n  seo: {\n    enabled: true,\n    siteUrl: 'https://example.com',\n    siteName: 'My Website',\n    defaultLocale: 'en',\n    defaultImage: '/og-image.png'\n  }\n})\n```\n\n```vue\n<!-- pages/index.vue -->\n<script setup lang=\"ts\">\nusePageSEO()\n</script>\n```\n\n### Example 2: Article Page\n\n```vue\n<!-- pages/blog/[slug].vue -->\n<script setup lang=\"ts\">\nconst route = useRoute()\nconst article = await fetchArticle(route.params.slug)\n\nusePageSEO({\n  title: article.title,\n  description: article.excerpt,\n  type: 'article',\n  publishedTime: article.publishedAt,\n  modifiedTime: article.updatedAt,\n  author: article.author.name,\n  image: article.image,\n  structuredData: {\n    '@type': 'Article',\n    headline: article.title,\n    description: article.excerpt,\n    image: article.image,\n    datePublished: article.publishedAt,\n    dateModified: article.updatedAt,\n    author: {\n      '@type': 'Person',\n      name: article.author.name\n    }\n  }\n})\n</script>\n```\n\n### Example 3: Product Page\n\n```vue\n<!-- pages/products/[id].vue -->\n<script setup lang=\"ts\">\nconst route = useRoute()\nconst product = await fetchProduct(route.params.id)\n\nusePageSEO({\n  title: product.name,\n  description: product.description,\n  type: 'product',\n  image: product.image,\n  structuredData: {\n    '@type': 'Product',\n    name: product.name,\n    description: product.description,\n    image: product.image,\n    brand: product.brand,\n    offers: {\n      '@type': 'Offer',\n      price: product.price,\n      priceCurrency: 'USD',\n      availability: product.inStock ? 'InStock' : 'OutOfStock'\n    }\n  }\n})\n</script>\n```\n\n### Example 4: Disable SEO for Staging\n\n```typescript\n// nuxt.config.ts\nexport default defineNuxtConfig({\n  modules: ['@enfyra/nuxt-seo'],\n  seo: {\n    enabled: process.env.NODE_ENV === 'production', // Disable in staging\n    siteUrl: 'https://example.com',\n    // ... rest of config\n  }\n})\n```\n\n## Best Practices\n\n1. **Always set `siteUrl`**: Required for canonical URLs and OG tags\n2. **Use per-page config**: Configure SEO in `nuxt.config.ts` for static pages\n3. **Override at runtime**: Use `usePageSEO()` for dynamic content\n4. **Provide structured data**: Enhances search engine understanding\n5. **Set appropriate `changefreq` and `priority`**: Helps search engines crawl efficiently\n6. **Use unique titles and descriptions**: Avoid duplicate content\n7. **Optimize images**: Use high-quality images for OG tags (1200x630px recommended)\n\n## Troubleshooting\n\n### SEO not working?\n\n1. Check `seo.enabled` is `true` in `nuxt.config.ts`\n2. Verify `siteUrl` is set correctly\n3. Check browser console for errors\n4. Ensure you're calling `usePageSEO()` in your pages\n\n### Types or Auto-imports not working?\n\n1. **Restart TypeScript Server**: In VS Code, press `Cmd/Ctrl + Shift + P` → \"TypeScript: Restart TS Server\"\n2. **Run Nuxt Prepare**: `yarn nuxt prepare` to regenerate types\n3. **Check Module Installation**: Ensure `@enfyra/nuxt-seo` is properly installed in `node_modules`\n4. **Verify Auto-imports**: Composables should be available without imports - if not, check your Nuxt version (requires Nuxt 4+)\n5. **Clear Cache**: Delete `.nuxt` folder and run `yarn nuxt prepare` again\n\n### Robots.txt not generating?\n\n1. Check `robots.enabled` is `true`\n2. Verify the route `/robots.txt` is accessible\n3. Check server logs for errors\n\n### OG image not generating?\n\n1. Check `seo.ogImage.enabled` is `true`\n2. Verify `/_enfyra/nuxt-seo/og?path=%2Fyour-page` is accessible\n3. In development, install Chrome/Chromium or set `CHROME_PATH`\n4. Make sure the target page path renders successfully before the screenshot request\n5. Delete `.enfyra-og-cache/` if you need to force regeneration\n\n## License\n\nMIT\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n","readmeFilename":"README.md"}