{"_id":"sanity-plugin-seo","_rev":"168-f2b284d8089c84a10097eed98014e924","name":"sanity-plugin-seo","dist-tags":{"latest":"1.4.6"},"versions":{"1.0.0-beta":{"name":"sanity-plugin-seo","version":"1.0.0-beta","keywords":["sanity","sanity-plugin-seo"],"license":"MIT","_id":"sanity-plugin-seo@1.0.0-beta","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"dist":{"shasum":"517a33d520eb55f9d29210adc835c443c810ef21","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.0.0-beta.tgz","fileCount":48,"integrity":"sha512-ZywYJeeKUIWaeC/LYs/8NJ20PPBpjej/6sW1ROK4CYVx1frQfhxT2juHyftQgQk5TY4cd2Njh3IY7idOtem6CA==","signatures":[{"sig":"MEUCIFdxIhL/fNo5mxFnZyZU3AFMt9t45lLOJ5MmDKSPmNDnAiEAxgOcCL5ETCjlSSW5IPVsDTds+5q+5xncA0zGI8wOQSc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":149108},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"_npmVersion":"10.8.1","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"18.20.3","dependencies":{"schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^5.3.11","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18","sanity":"^3"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.0.0-beta_1720166744964_0.38984917816602116","host":"s3://npm-registry-packages"}},"1.2.2-beta":{"name":"sanity-plugin-seo","version":"1.2.2-beta","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.2.2-beta","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://github.com/bhargav-bkpatel/sanity-plugin-seo#readme","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"88678eebe9d68a476a63148d5e07d091d4ea5da6","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.2.2-beta.tgz","fileCount":50,"integrity":"sha512-mLiJQZHFBrn43i5UjKXJxZ6tobyOj3a+f3ROibqpo2VUINwolcruEUWkdN9DpJaZPB6yagsEbs++X/j72yeJcA==","signatures":[{"sig":"MEYCIQDHwceW/Vt7zgSGZHCcGLUv6IBs9804bUqVrKno8kaaLwIhAMIDvLjKGm2WsBc1oMhzVoJVcZhHCWBmJXtjtNextSzb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":194957},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"c937114b0a749784c48d4fe0b8a2aeeabaf77c33","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.8.1","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"18.20.3","dependencies":{"@sanity/ui":"^2.6.1","schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^5.3.11","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18","sanity":"^3"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.2.2-beta_1720423044186_0.003369876525912252","host":"s3://npm-registry-packages"}},"1.2.3-beta":{"name":"sanity-plugin-seo","version":"1.2.3-beta","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.2.3-beta","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://github.com/bhargav-bkpatel/sanity-plugin-seo#readme","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"14f379a38deb26cfba89a06656d6f30dad3a8f01","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.2.3-beta.tgz","fileCount":50,"integrity":"sha512-Y/rkHuWJEFIvnp9KsMo35ehSFx1LWm27smXzW6YWcBlLfT9GkZU2I3YQIPZCMySS08xxNJiArYLDDmRihOa9pA==","signatures":[{"sig":"MEQCIE+J8EqKmXvtac2duLd2qc9Uq9xF3XSXfufFg+Twcp+RAiBrDDNqT4OjxPFw94Yb7xh0a28Z/XQx64yAExXx2JtbRg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":200955},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"6515e3d1baca87d8c6047126f51bb46fc0fb99de","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.8.1","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"18.20.3","dependencies":{"@sanity/ui":"^2.6.1","schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^5.3.11","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18","sanity":"^3"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.2.3-beta_1720504152552_0.5735377404366913","host":"s3://npm-registry-packages"}},"1.2.4-beta":{"name":"sanity-plugin-seo","version":"1.2.4-beta","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.2.4-beta","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://github.com/bhargav-bkpatel/sanity-plugin-seo#readme","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"5d406c9550859c1dc422ec00cd2b4ea4acea0861","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.2.4-beta.tgz","fileCount":50,"integrity":"sha512-Q/POEEYKtKjvsoMqYqmuc7kMUh2rHFRb3MTMAbyNPGy8EJobPvieljhqz3aaMiQ7y9legaGGYDx1Kvc6XzQf/w==","signatures":[{"sig":"MEUCIQDli6UYS6EJwfVa3WhIjzba//9ZifU+/2GULAc8bJYL+gIgJ67NMKrNQGiEWhW/tAs12BJwQHibDHrqyaa2D+bc+Mo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":195317},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"6515e3d1baca87d8c6047126f51bb46fc0fb99de","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.8.1","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"18.20.3","dependencies":{"@sanity/ui":"^2.6.1","schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^5.3.11","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18","sanity":"^3"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.2.4-beta_1721106347121_0.6734961657958196","host":"s3://npm-registry-packages"}},"1.2.5":{"name":"sanity-plugin-seo","version":"1.2.5","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.2.5","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://github.com/bhargav-bkpatel/sanity-plugin-seo#readme","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"c20399ac2f9b8b83dcfe9b8072120c68c47c1299","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.2.5.tgz","fileCount":50,"integrity":"sha512-0patRjj+aM49lfg5r6TKTyJVSOdKiZeU3aeEBqf9fjXzusbMnmTja/rA6DT/jd3hXWLVXJ8hKetl6XBQEswhXw==","signatures":[{"sig":"MEYCIQDZyORvULHOUqigQOndJFzYBS4XnFtHQSFtTA+Q3f+UkwIhAPE66aicFvn0R4k2cxDTnMvYgV05lPtp1FVT+di7m81E","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":196748},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"6515e3d1baca87d8c6047126f51bb46fc0fb99de","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.8.1","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"18.20.3","dependencies":{"@sanity/ui":"^2.6.1","schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^5.3.11","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18","sanity":"^3"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.2.5_1724159237829_0.6833569461799764","host":"s3://npm-registry-packages"}},"1.2.6-alpha":{"name":"sanity-plugin-seo","version":"1.2.6-alpha","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.2.6-alpha","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://github.com/bhargav-bkpatel/sanity-plugin-seo#readme","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"a4ba919603b19601d2a2b99cfa6714f4bfa79e81","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.2.6-alpha.tgz","fileCount":50,"integrity":"sha512-Rdguas0bBu2SwodowPb9STxkYjaLclM8ronDHLnvWSRgQgmKQU0B91QR26EXB/XNpcFOO6eBaFjsAjfgRWb+lA==","signatures":[{"sig":"MEYCIQCGdt33OeF2zszitwDE5amOJ2Jh6bpG+fAW0af0Di03swIhAPuMKMfNHa3K00jm0AtM63f1FQ5GQ0rS3cwIwRJvfJCK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":224850},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"2f8268f66033dff517715ba4965a656c6ba343d5","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"9.5.1","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"18.16.0","dependencies":{"@sanity/ui":"^2.6.1","schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^5.3.11","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18","sanity":"^3"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.2.6-alpha_1737454171143_0.7967989192837563","host":"s3://npm-registry-packages-npm-production"}},"1.2.7-alpha":{"name":"sanity-plugin-seo","version":"1.2.7-alpha","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.2.7-alpha","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"d46a2077dc88d063fb3b08711e3752f35614e67d","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.2.7-alpha.tgz","fileCount":50,"integrity":"sha512-pL3v28/Npysa7LkbcGM7u9f82nl8JMd/69+ifnl4aa4GSE702yCs6uMWqu7lBQFBZM9pQ9Rk3fI8SCVtT6qgug==","signatures":[{"sig":"MEQCIFyOBN4w2eo5w4qrHUi3TjvMYxLBfC0wkAKp78jgy5MIAiAhaUs/UhLowMEpE4TICyrpOdbH55ZHmZxhaeWIXEUSqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":219239},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"2f8268f66033dff517715ba4965a656c6ba343d5","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"9.5.1","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"18.16.0","dependencies":{"@sanity/ui":"^2.6.1","schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^5.3.11","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18","sanity":"^3"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.2.7-alpha_1739339287609_0.6513776378154028","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"sanity-plugin-seo","version":"1.3.0","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.3.0","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"911fb8308af574e90324ff859beb525f59fc5879","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.3.0.tgz","fileCount":50,"integrity":"sha512-GdQCkDQhwwUPZVfcX+1ODX2LtCVQUrGOJrfA9u3rbMnlGOiHGFJo2DFRHBFe1yvTV5YMnc5HXTUWBl2MfRxP9Q==","signatures":[{"sig":"MEYCIQCWMjv8jFQ+Pnq6sHlEQ4fUnKeVUjMZhZgiF9VV4QL9OwIhAJG5zixmy+yio3tHAhvPm2G6g1F1H3AYoI6XmIFWQN8e","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":220120},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"f00dc6b5ef4b2fd9b9664f1f9a78bc4f91db1814","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.9.2","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"23.11.0","dependencies":{"@sanity/ui":"^2.6.1","schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^5.3.11","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18","sanity":"^3"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.3.0_1746437120586_0.9940533654101527","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"sanity-plugin-seo","version":"1.3.1","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.3.1","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"404fe6f91e354eeddbe9213b02020b39dd0473fc","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.3.1.tgz","fileCount":50,"integrity":"sha512-GUOLONzkl4WXFvqta5cWCTTxuEDDs5miCC4jOt3t/JcNqbcpHGX+NOP+qbDZNha/zjfP4JFXv8BgmH/exDYbbQ==","signatures":[{"sig":"MEUCIQCuaPbhbBcb0H8WcQuJ6BYO8gnjAAXAJQj9tB+fyEvpOgIgICt0GpmhXGAOMWHVZCi4+tdCmOSqtMvo1gb2MAaRIVE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304519},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"8296a1501bf131bcf7de34fdb02cf3ad0e6bb528","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.9.2","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"23.11.0","dependencies":{"@sanity/ui":"^2.6.1","schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.3.1_1753264050470_0.3292346325312563","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"sanity-plugin-seo","version":"1.3.3","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.3.3","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"6e95b985e036454aa7b5e6b472c497955e7f7613","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.3.3.tgz","fileCount":50,"integrity":"sha512-GHa+nUl2gtpY/EfLjk+8stO1iPCpk40crqtY/FlGHoZW4/YrC0gEwue+nmvxj0cVO2RAnkwsoO2fDWSFzCdKUg==","signatures":[{"sig":"MEQCIEiDeKemaLnPHomniOpAknZMlDP7ScEtdzj7DxINL2mcAiAk0d7zkJhTPi1jpMlGN3CYmHnaeODIrDYz2/TXZg5GOw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304618},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"8296a1501bf131bcf7de34fdb02cf3ad0e6bb528","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.9.2","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"23.11.0","dependencies":{"@sanity/ui":"^2.6.1","schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.3.3_1753951720068_0.547405252366395","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"sanity-plugin-seo","version":"1.3.4","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.3.4","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"f728fc0dd6be77a65fb7dc43e3819977bf27fe0b","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.3.4.tgz","fileCount":50,"integrity":"sha512-FC82rQO0aWS7DgcivJp3TG1u3Id1eAoOQItOzXgD5Li99qo+FvFCZ3DeWPcqxSKVcCvGekhN3kv3IpPZzR/Svg==","signatures":[{"sig":"MEQCIC3b2rN7lV12mzoEtIp4kjQ+NJDh/22d985XPP91hL4AAiBKH9l3tN18W6hSzVILDZQVA00WMVtSAGrrj3cxDb9cgQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304684},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"4a45cb738b74a505ca31c68b13c6cb0218863d3e","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.9.2","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"23.11.0","dependencies":{"@sanity/ui":"^2.6.1","schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.3.4_1757408672096_0.2644036734813655","host":"s3://npm-registry-packages-npm-production"}},"1.3.6":{"name":"sanity-plugin-seo","version":"1.3.6","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.3.6","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"25bf8a30989b2b88de596aef11fd7323563e69d2","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.3.6.tgz","fileCount":50,"integrity":"sha512-Q5PKdMPShO1C3hex5B+h4qJ+Jzt2cslzKiYo3jPmL6vTtx3V3ZaipoQOLgkFogPiD90qhhmyuF6EbrpT2S5Cag==","signatures":[{"sig":"MEUCICrDvYWYTcVSGUSsIfCTlhgcOd+W1Da3lws/MJu6X8kGAiEAyFALqzfJSATchY/EH4Pv68gt91XB01S2gRXK/WL6wmU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304725},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=14"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"4a45cb738b74a505ca31c68b13c6cb0218863d3e","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.9.2","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"23.11.0","dependencies":{"@sanity/ui":"^2.6.1","schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.4","eslint-config-airbnb-typescript":"^17.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^18.2.0","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^3.18.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^18.2.0","react-dom":"^18.2.0","typescript":"^5.3.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^18.2.28","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.3.6_1757412220066_0.21657367948348516","host":"s3://npm-registry-packages-npm-production"}},"1.3.7":{"name":"sanity-plugin-seo","version":"1.3.7","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.3.7","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"cebaf7bd71fe948e196d170332f84f9c51d7272f","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.3.7.tgz","fileCount":50,"integrity":"sha512-5O//sKp5uwolukknMUa5OO10znIpMG+nwd1GNL8fi68VDboKDiLKpgUPa8RaiuhY6gGNZnCUaD6Pol3X0Q6hrA==","signatures":[{"sig":"MEUCIQCSwA7pZNKMR0/0HeM4bGV50Vd6tJ+o1DIoAKfpmjoPdAIgWJ0zEMdL8cAXDihMg6Q+7K6v8w4o99iJOnb9aBt7REw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298222},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"25b8670bfc6f03f7c75394e1fa5f3ade5e31b16e","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"11.6.2","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"24.13.0","dependencies":{"schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.5"},"sanityPlugin":{"verifyPackage":{"nodeEngine":false}},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.2","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^5.0.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^19.2.2","react-dom":"^19.2.2","@sanity/ui":"^3.1.11","typescript":"^5.2.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^19.0.0","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4 || ^5","react-dom":"^18 || ^19","@sanity/ui":"^3","styled-components":"^6"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.3.7_1771495740374_0.8263193710506669","host":"s3://npm-registry-packages-npm-production"}},"1.3.8":{"name":"sanity-plugin-seo","version":"1.3.8","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.3.8","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"59669d76c30499da5a528155b8900c2790203d32","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.3.8.tgz","fileCount":50,"integrity":"sha512-0ObH+RlcaH9B5AMMYpNXSqqeukyLJz8p7qbB6a/urBZ7NUZQp0ZWHAWTn+c5FZ4J0OKqgV5ln4a6tuj8ZwBvrg==","signatures":[{"sig":"MEQCICdT16gMLI0DYZFDxaJGNyzCVE0tsZNzwLq6uLu1srxgAiA8S9kGwV5bTT0/ZmpWt8BnTSQQvwrWu3S3eaSNSwBJ5A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298084},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"5a33f0911e2d06a77bdd21dc0959e0ae7f6eefc7","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.9.4","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"22.22.1","dependencies":{"schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.5"},"sanityPlugin":{"verifyPackage":{"nodeEngine":false}},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.2","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^5.0.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^19.2.2","react-dom":"^19.2.2","@sanity/ui":"^3.1.11","typescript":"^5.2.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^19.0.0","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4 || ^5","react-dom":"^18 || ^19","@sanity/ui":"^3","styled-components":"^6"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.3.8_1779185492111_0.6783485457275871","host":"s3://npm-registry-packages-npm-production"}},"1.3.9":{"name":"sanity-plugin-seo","version":"1.3.9","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.3.9","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"b5ea5c3074d688363515fdab8a8717f45b2c05d3","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.3.9.tgz","fileCount":50,"integrity":"sha512-PPd3bP2pDKOp64PWXHxhCWVWbp6RgNuVuNS3uKaduOgN1M8OuNq75+IDy7tB64sV3KhG7fG10xTY2zhlizxSog==","signatures":[{"sig":"MEYCIQDms0nko1u79FDQA8BsaRklTvEj/Vbo8SG4WuUxM/6PGAIhAPOtAPKsLPiOf9Jg8dXb8TjI8vTVuWGh02tl4w8QBPS5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298056},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"5a33f0911e2d06a77bdd21dc0959e0ae7f6eefc7","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.9.4","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"22.22.1","dependencies":{"schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.5"},"sanityPlugin":{"verifyPackage":{"nodeEngine":false}},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.2","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^5.0.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^19.2.2","react-dom":"^19.2.2","@sanity/ui":"^3.1.11","typescript":"^5.2.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^19.0.0","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4 || ^5","react-dom":"^18 || ^19","@sanity/ui":"^3","styled-components":"^6"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.3.9_1779186574348_0.0896653541784227","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"sanity-plugin-seo","version":"1.4.0","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.4.0","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"500dbad95b6dcaa6ccfa339df2467e1e8957848d","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.4.0.tgz","fileCount":50,"integrity":"sha512-sR2xTFX20T6TF1/1OWnBssP+2qInqN9M/k0GOVIMpQ5wV6ITMSaWRsdyipT34fYeMKEGYa+OGDVZU5mVH12sgg==","signatures":[{"sig":"MEUCIG3qOqSneJ2spVY7M+ESY6v6k+hU+Zg2idQBMoDK9lU5AiEAlYkxAdGAFCae3/zhSluzM/VKWfzc1O6Xl1vUO5PhUF4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298056},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"5a33f0911e2d06a77bdd21dc0959e0ae7f6eefc7","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.9.4","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"22.22.1","dependencies":{"schema-dts":"^1.1.2","react-helmet":"^6.1.0","react-schemaorg":"^2.0.0","@sanity/incompatible-plugin":"^1.0.5"},"sanityPlugin":{"verifyPackage":{"nodeEngine":false}},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.2","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^5.0.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^19.2.2","react-dom":"^19.2.2","@sanity/ui":"^3.1.11","typescript":"^5.2.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^19.0.0","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4 || ^5","react-dom":"^18 || ^19","@sanity/ui":"^3","styled-components":"^6"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.4.0_1779188448332_0.8166120288582588","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"sanity-plugin-seo","version":"1.4.1","keywords":["sanity","sanity-plugin-seo","content","headless","cms","seo","typescript","meta-data","seo-plugin","meta-tags","schema"],"license":"MIT","_id":"sanity-plugin-seo@1.4.1","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"5572bca0d15cfb53735ff7532b847b68f66d00af","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.4.1.tgz","fileCount":118,"integrity":"sha512-vTdAOwthRA+PgyPVeHodaGwl8YXrS3w/M7s/j9W5pASw5SmGbR11LB69AOggc+fZZct/VPYkMIzY8B1WJNJTBw==","signatures":[{"sig":"MEQCIE0+Z+mCZKZjPjnBePepceqtxJoUFG/GurzlTHsxa3zrAiA1HKWMVx4sD8VqKkvWMTZWee58P6AyDN18RA+Cvi5UjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2083298},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"778f0e95f67280940d40cb2eac8dad971d7935cd","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"10.9.4","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"sanityPlugin":{"verifyPackage":{"nodeEngine":false,"sanityV2Json":false}},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.2","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^5.0.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^19.2.2","react-dom":"^19.2.2","@sanity/ui":"^3.1.11","typescript":"^5.2.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^19.0.0","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4 || ^5","react-dom":"^18 || ^19","@sanity/ui":"^3","@sanity/icons":"^3.7.4","styled-components":"^6"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.4.1_1780895781044_0.24778909031605956","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"sanity-plugin-seo","version":"1.4.2","keywords":["sanity","sanity-plugin","sanity-studio","seo","seo-plugin","meta-tags","schema-org","structured-data","open-graph","twitter-cards","seo-score","ai-suggestions","team-workflows","content-optimization","headless-cms","typescript","json-ld","hreflang","content-management","search-visibility"],"license":"MIT","_id":"sanity-plugin-seo@1.4.2","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"7086c7159e571ee4fec25a47ddc70c4635b70dac","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.4.2.tgz","fileCount":118,"integrity":"sha512-5niSbnV71ie4yjuqYULHgRgpmd+WM40G4aqcjwtWczh1sMt7XPdLW7Z85/YfYOyHXXdZslAtsM27H4f9V5WC0A==","signatures":[{"sig":"MEUCIQDXLy5hgNcvylAzRDq4Nw3dubp9ljfLNO3s5ZjGOs9gcAIgfTIfa7DupwBrSmKgqkx2ydtex7aP/AneFqh7IN9PChU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2083640},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"f43412ffc77922e1572006f8b24399598dec84af","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"11.16.0","description":"The Sanity SEO Field Plugin simplifies the process of generating SEO fields for various types of content. It enhances structured data, making your content more accessible and understandable for search engines, ultimately improving your site's visibility a","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"sanityPlugin":{"verifyPackage":{"nodeEngine":false,"sanityV2Json":false}},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.2","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^5.0.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^19.2.2","react-dom":"^19.2.2","@sanity/ui":"^3.1.11","typescript":"^5.2.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^19.0.0","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4 || ^5","react-dom":"^18 || ^19","@sanity/ui":"^3","@sanity/icons":"^3.7.4","styled-components":"^6"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.4.2_1780920959535_0.758512929635738","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"sanity-plugin-seo","version":"1.4.3","keywords":["sanity","sanity-plugin","sanity-studio","seo","seo-plugin","meta-tags","schema-org","structured-data","open-graph","twitter-cards","seo-score","ai-suggestions","team-workflows","content-optimization","headless-cms","typescript","json-ld","hreflang","content-management","search-visibility"],"license":"MIT","_id":"sanity-plugin-seo@1.4.3","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"57e42c454a9ee404b107861b9d22655691467bbd","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.4.3.tgz","fileCount":118,"integrity":"sha512-q77Gvg88ZAZADA6/xQnWhmlnnqXgrM77QO6wTpAkUMi1uHqXg4S5vZdVQxGU+PD39zIfEzPNohxTZ/ZvxILxHQ==","signatures":[{"sig":"MEQCIFiz/fw5azx3GqXd195aHijaq4lxdYxGq6mQ3uvWOHw/AiADaGUhr9Nnw7+aWdXK4pGxrUnnKjbAGotElE8G8GdGbw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2083023},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"edd695bafa671d1ed4a69b92ec8239390a541687","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"11.16.0","description":"Complete SEO toolkit for Sanity Studio with live scoring, AI suggestions, team workflows, and 30+ structured data types. Free and AI tiers live. Pro coming soon.","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"sanityPlugin":{"verifyPackage":{"nodeEngine":false,"sanityV2Json":false}},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.2","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^5.0.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^19.2.2","react-dom":"^19.2.2","@sanity/ui":"^3.1.11","typescript":"^5.2.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^19.0.0","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4 || ^5","react-dom":"^18 || ^19","@sanity/ui":"^3","@sanity/icons":"^3.7.4","styled-components":"^6"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.4.3_1780922719593_0.1364882799915681","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"sanity-plugin-seo","version":"1.4.4","keywords":["sanity","sanity-plugin","sanity-studio","seo","seo-plugin","meta-tags","schema-org","structured-data","open-graph","twitter-cards","seo-score","ai-suggestions","team-workflows","content-optimization","headless-cms","typescript","json-ld","hreflang","content-management","search-visibility"],"license":"MIT","_id":"sanity-plugin-seo@1.4.4","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"1a2f6ce35655632f768975cf48aba23c6cdd77e0","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.4.4.tgz","fileCount":118,"integrity":"sha512-ER1e33iw/oE5hKEWe7tqKhlj6YUViqtAhlEQUToQ4VkF5N1lgWt0TZJsLjKgd8+2p4cUXmuHVsJ2AiwmypjiSw==","signatures":[{"sig":"MEUCIQDRRScTUpBFKB62AQfqialwSuct8jXF/ue3sFrFxkDA3QIgKL0WOTG+cHLPfCbD46mEIh5mXLrVF7MYRaEjb4vTYBQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2083009},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"3cb91f0a47f25b602db705458da377c0ffe912d9","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"11.16.0","description":"Complete SEO toolkit for Sanity Studio with live scoring, AI suggestions, team workflows, and 30+ structured data types. Free and AI tiers live. Pro coming soon.","directories":{},"_nodeVersion":"22.22.1","dependencies":{},"sanityPlugin":{"verifyPackage":{"nodeEngine":false,"sanityV2Json":false}},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.2","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^5.0.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^19.2.2","react-dom":"^19.2.2","@sanity/ui":"^3.1.11","typescript":"^5.2.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^19.0.0","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4 || ^5","react-dom":"^18 || ^19","@sanity/ui":"^3","@sanity/icons":"^3.7.4","styled-components":"^6"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.4.4_1780924937224_0.030824868301076558","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"sanity-plugin-seo","version":"1.4.5","keywords":["sanity","sanity-plugin","sanity-studio","seo","seo-plugin","meta-tags","schema-org","structured-data","open-graph","twitter-cards","seo-score","ai-suggestions","team-workflows","content-optimization","headless-cms","typescript","json-ld","hreflang","content-management","search-visibility"],"license":"MIT","_id":"sanity-plugin-seo@1.4.5","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"homepage":"https://sanity-seo-plugin-latest.vercel.app/","bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"dist":{"shasum":"16b66aa337310971e38b749428a060fca708f329","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.4.5.tgz","fileCount":142,"integrity":"sha512-jNUo37K+T2yRhOSoA9ei7zT4eJRO+IK0xHHGKILxGx1KGBmbiZkm5GzMs/k08lDyu9WRh7IHtSn8lCOkqHvIVw==","signatures":[{"sig":"MEQCIHpOiOdcA31jTp0EuWpWteqg8wZ1DIM5evGVWcpGHT3uAiA9gGSm6ZHh82yfuP+0TddXy8C27k6IwAxgSbZWgPXnqQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2410626},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.esm.js","source":"./src/index.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","source":"./src/index.ts","default":"./dist/index.esm.js","require":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"eca46be3778fccbd66c4c16e7ab4e65fed8dc897","scripts":{"lint":"eslint .","test":"jest","build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","watch":"pkg-utils watch --strict","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","prepublishOnly":"run-s build"},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"repository":{"url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git","type":"git"},"_npmVersion":"11.16.0","description":"Complete SEO toolkit for Sanity Studio with live scoring, AI suggestions, team workflows, and 30+ structured data types. Free and AI tiers live. Pro coming soon.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"@supabase/supabase-js":"^2.108.2"},"sanityPlugin":{"verifyPackage":{"nodeEngine":false,"sanityV2Json":false}},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","react":"^19.2.2","eslint":"^8.53.0","rimraf":"^5.0.5","sanity":"^5.0.0","postcss":"^8.4.16","ts-jest":"^29.1.1","prettier":"3.0.3","react-is":"^19.2.2","react-dom":"^19.2.2","@sanity/ui":"^3.1.11","typescript":"^5.2.2","@types/jest":"^29.5.10","npm-run-all":"^4.1.5","@types/react":"^19.0.0","@vercel/node":"^5.0.0","autoprefixer":"^10.4.11","@sanity/pkg-utils":"^3.0.0","styled-components":"^6.1.15","@sanity/plugin-kit":"^3.1.10","eslint-config-next":"^13.0.0","eslint-plugin-jest":"^27.4.2","eslint-plugin-react":"^7.33.2","eslint-config-airbnb":"^19.0.4","eslint-config-sanity":"^7.0.1","eslint-plugin-import":"^2.28.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","jest-environment-jsdom":"^29.7.0","@typescript-eslint/parser":"^6.7.5","eslint-config-airbnb-base":"^15.0.0","eslint-plugin-react-hooks":"^4.6.0","prettier-plugin-packagejson":"^2.4.6","@sanity/eslint-config-studio":"^3.0.1","eslint-plugin-testing-library":"^6.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.5","eslint-import-resolver-typescript":"^3.5.1"},"peerDependencies":{"react":"^18 || ^19","sanity":"^3 || ^4 || ^5","react-dom":"^18 || ^19","@sanity/ui":"^3","@sanity/icons":"^3.7.4","styled-components":"^6"},"_npmOperationalInternal":{"tmp":"tmp/sanity-plugin-seo_1.4.5_1784208402179_0.40239141377678167","host":"s3://npm-registry-packages-npm-production"}},"1.4.6":{"name":"sanity-plugin-seo","version":"1.4.6","homepage":"https://sanity-seo-plugin.bkpatel.com/","description":"Complete SEO toolkit for Sanity Studio with live scoring, AI suggestions, team workflows, and 30+ structured data types. Free and AI tiers live. Pro coming soon.","keywords":["sanity","sanity-plugin","sanity-studio","seo","seo-plugin","meta-tags","schema-org","structured-data","open-graph","twitter-cards","seo-score","ai-suggestions","team-workflows","content-optimization","headless-cms","typescript","json-ld","hreflang","content-management","search-visibility"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git"},"bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"exports":{".":{"types":"./dist/index.d.ts","source":"./src/index.ts","import":"./dist/index.esm.js","require":"./dist/index.js","default":"./dist/index.esm.js"},"./package.json":"./package.json"},"main":"./dist/index.js","module":"./dist/index.esm.js","source":"./src/index.ts","types":"./dist/index.d.ts","scripts":{"build":"run-s clean && plugin-kit verify-package --silent && pkg-utils build --strict && pkg-utils --strict","clean":"rimraf dist","format":"prettier --write --cache --ignore-unknown .","link-watch":"plugin-kit link-watch","lint":"eslint .","prepublishOnly":"run-s build","watch":"pkg-utils watch --strict","test":"jest"},"dependencies":{"@supabase/supabase-js":"^2.108.2"},"devDependencies":{"@sanity/eslint-config-studio":"^3.0.1","@sanity/pkg-utils":"^3.0.0","@sanity/plugin-kit":"^3.1.10","@sanity/ui":"^3.1.11","@types/jest":"^29.5.10","@types/react":"^19.0.0","@typescript-eslint/eslint-plugin":"^6.7.5","@typescript-eslint/parser":"^6.7.5","@vercel/node":"^5.0.0","autoprefixer":"^10.4.11","eslint":"^8.53.0","eslint-config-airbnb":"^19.0.4","eslint-config-airbnb-base":"^15.0.0","eslint-config-airbnb-typescript":"^17.1.0","eslint-config-next":"^13.0.0","eslint-config-prettier":"^9.0.0","eslint-config-sanity":"^7.0.1","eslint-import-resolver-typescript":"^3.5.1","eslint-plugin-import":"^2.28.1","eslint-plugin-jest":"^27.4.2","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.1","eslint-plugin-react":"^7.33.2","eslint-plugin-react-hooks":"^4.6.0","eslint-plugin-testing-library":"^6.1.0","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0","npm-run-all":"^4.1.5","postcss":"^8.4.16","prettier":"3.0.3","prettier-plugin-packagejson":"^2.4.6","react":"^19.2.2","react-dom":"^19.2.2","react-is":"^19.2.2","rimraf":"^5.0.5","sanity":"^5.0.0","styled-components":"^6.1.15","ts-jest":"^29.1.1","typescript":"^5.2.2"},"peerDependencies":{"@sanity/icons":"^3.7.4","@sanity/ui":"^3","react":"^18 || ^19","react-dom":"^18 || ^19","sanity":"^3 || ^4 || ^5","styled-components":"^6"},"sanityPlugin":{"verifyPackage":{"nodeEngine":false,"sanityV2Json":false}},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"_id":"sanity-plugin-seo@1.4.6","gitHead":"facefeb56bf80a17154a55c4046cc64883790516","_nodeVersion":"20.20.2","_npmVersion":"10.8.2","dist":{"integrity":"sha512-Cg35oF1kiMiOlsy8eEQptyQkJOQezEDh2jMEw+w1P23z2fvas+OgwfnXgI1t8CYX51Yo+7w3xHLwEz5iTnawmQ==","shasum":"9a7e7f3f64675c0d315d543a9e75277ebf6ba69d","tarball":"https://registry.npmjs.org/sanity-plugin-seo/-/sanity-plugin-seo-1.4.6.tgz","fileCount":142,"unpackedSize":2410608,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/sanity-plugin-seo@1.4.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIB2MgHR2zIT5rJZc7caEHvfuaNXW0gy+nWEIEJNu3yPsAiBIdDDFUfOWyRL42CVneFqGaO49+vsjcTEuqiFDYvJxtA=="}]},"_npmUser":{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"},"directories":{},"maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sanity-plugin-seo_1.4.6_1784373061812_0.8182883346091077"},"_hasShrinkwrap":false}},"time":{"created":"2024-07-04T04:42:14.989Z","modified":"2026-07-18T11:11:02.352Z","1.0.0":"2024-07-04T04:42:15.296Z","1.0.1":"2024-07-04T11:04:47.320Z","1.0.2":"2024-07-05T06:09:50.930Z","1.0.3":"2024-07-05T06:42:16.191Z","1.0.4":"2024-07-05T07:58:49.610Z","1.0.0-beta":"2024-07-05T08:05:45.167Z","1.1.0":"2024-07-05T10:34:21.373Z","1.1.1":"2024-07-05T11:02:53.885Z","1.1.2":"2024-07-05T11:11:49.684Z","1.1.3":"2024-07-05T11:18:11.002Z","1.1.4":"2024-07-05T11:26:15.152Z","1.1.5":"2024-07-05T11:31:45.621Z","1.1.6":"2024-07-05T11:38:30.208Z","1.1.7":"2024-07-05T11:46:21.151Z","1.1.8":"2024-07-05T12:13:30.565Z","1.1.9":"2024-07-05T12:23:05.567Z","1.1.10":"2024-07-05T12:26:21.158Z","1.1.11":"2024-07-05T12:29:24.461Z","1.1.12":"2024-07-05T12:33:16.817Z","1.1.13":"2024-07-05T12:37:22.874Z","1.1.14":"2024-07-05T12:39:15.906Z","1.1.15":"2024-07-05T12:43:44.154Z","1.1.16":"2024-07-05T12:46:32.834Z","1.1.17":"2024-07-05T12:49:25.781Z","1.1.18":"2024-07-05T13:00:56.425Z","1.1.19":"2024-07-05T13:02:39.809Z","1.1.20":"2024-07-05T13:07:46.592Z","1.1.21":"2024-07-05T13:09:28.363Z","1.1.22":"2024-07-05T13:24:35.169Z","1.1.23":"2024-07-05T13:32:50.957Z","1.1.24":"2024-07-05T13:34:26.440Z","1.1.25":"2024-07-05T13:36:10.000Z","1.1.26":"2024-07-05T13:39:15.919Z","1.1.27":"2024-07-05T13:42:35.792Z","1.1.28":"2024-07-05T13:46:05.830Z","1.1.29":"2024-07-05T13:58:58.854Z","1.1.30":"2024-07-05T14:08:01.586Z","1.1.31":"2024-07-05T14:19:43.842Z","1.1.32":"2024-07-05T14:22:34.692Z","1.1.33":"2024-07-06T08:21:46.277Z","1.1.34":"2024-07-06T08:34:35.883Z","1.1.35":"2024-07-06T08:41:27.000Z","1.1.36":"2024-07-06T08:47:35.715Z","1.1.37":"2024-07-06T08:51:14.040Z","1.1.38":"2024-07-06T08:59:17.953Z","1.1.39":"2024-07-06T09:02:08.037Z","1.1.40":"2024-07-06T09:18:09.056Z","1.1.41":"2024-07-06T09:54:01.695Z","1.1.42":"2024-07-06T10:09:21.492Z","1.1.43":"2024-07-06T10:12:20.537Z","1.1.44":"2024-07-06T10:17:17.271Z","1.1.45":"2024-07-06T10:53:18.613Z","1.1.46":"2024-07-06T11:21:49.486Z","1.1.47":"2024-07-06T11:42:41.409Z","1.1.48":"2024-07-06T11:46:24.794Z","1.1.49":"2024-07-06T12:09:35.182Z","1.1.50":"2024-07-06T12:47:35.507Z","1.1.51":"2024-07-06T12:55:21.069Z","1.1.52":"2024-07-06T12:57:18.961Z","1.1.53":"2024-07-06T12:58:45.348Z","1.1.54":"2024-07-06T13:01:18.661Z","1.1.55":"2024-07-06T13:07:36.562Z","1.2.1":"2024-07-06T13:50:11.538Z","1.1.57":"2024-07-08T05:38:33.647Z","1.1.58":"2024-07-08T05:40:34.807Z","1.2.0":"2024-07-08T05:43:19.768Z","1.2.0-beta":"2024-07-08T05:54:47.211Z","1.2.1-beta":"2024-07-08T07:15:27.950Z","1.2.2-beta":"2024-07-08T07:17:24.410Z","1.2.3-beta":"2024-07-09T05:49:12.744Z","1.2.4-beta":"2024-07-16T05:05:47.328Z","1.2.6":"2024-08-20T13:06:34.331Z","1.2.5":"2024-08-20T13:07:18.027Z","1.2.8":"2025-01-21T09:35:42.235Z","1.2.6-alpha":"2025-01-21T10:09:31.298Z","1.2.7-alpha":"2025-02-12T05:48:07.814Z","1.3.0":"2025-05-05T09:25:20.771Z","1.3.1":"2025-07-23T09:47:30.636Z","1.3.2":"2025-07-31T08:45:54.143Z","1.3.3":"2025-07-31T08:48:40.309Z","1.3.4":"2025-09-09T09:04:32.277Z","1.3.5":"2025-09-09T09:21:50.263Z","1.3.6":"2025-09-09T10:03:40.247Z","1.3.7":"2026-02-19T10:09:00.517Z","1.3.8":"2026-05-19T10:11:32.246Z","1.3.9":"2026-05-19T10:29:34.493Z","1.4.0":"2026-05-19T11:00:48.537Z","1.5.0-beta.0":"2026-05-22T09:43:01.553Z","1.4.1":"2026-06-08T05:16:21.249Z","1.4.1-beta.0":"2026-06-08T11:57:16.170Z","1.4.2":"2026-06-08T12:15:59.765Z","1.4.3":"2026-06-08T12:45:19.770Z","1.4.4":"2026-06-08T13:22:17.436Z","1.4.5":"2026-07-16T13:26:42.349Z","1.4.6":"2026-07-18T11:11:02.007Z"},"bugs":{"url":"https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues"},"license":"MIT","homepage":"https://sanity-seo-plugin.bkpatel.com/","keywords":["sanity","sanity-plugin","sanity-studio","seo","seo-plugin","meta-tags","schema-org","structured-data","open-graph","twitter-cards","seo-score","ai-suggestions","team-workflows","content-optimization","headless-cms","typescript","json-ld","hreflang","content-management","search-visibility"],"repository":{"type":"git","url":"git+https://github.com/bhargav-bkpatel/sanity-plugin-seo.git"},"description":"Complete SEO toolkit for Sanity Studio with live scoring, AI suggestions, team workflows, and 30+ structured data types. Free and AI tiers live. Pro coming soon.","maintainers":[{"name":"bhargav-patel","email":"bhargav.bkpatel@gmail.com"}],"readme":"![Sanity Plugin SEO](https://raw.githubusercontent.com/bhargav-bkpatel/sanity-plugin-seo/main/public/assets/background.png)\n\n## ⚡ Sanity Plugin SEO\n\n[![npm version](https://img.shields.io/badge/npm-v1.4.0-blue)](https://www.npmjs.com/package/sanity-plugin-seo)\n[![npm downloads](https://img.shields.io/badge/downloads-22k-brightgreen)](https://www.npmjs.com/package/sanity-plugin-seo)\n[![TypeScript](https://img.shields.io/badge/types-TypeScript-blue)](https://www.typescriptlang.org/)\n\n**Sanity Studio Compatibility:**\n\n[![Sanity V3](https://img.shields.io/badge/Sanity%20V3-supported-4e5452?style=flat)](https://www.sanity.io/)\n[![Sanity V4](https://img.shields.io/badge/Sanity%20V4-supported-4e5452?style=flat)](https://www.sanity.io/)\n[![Sanity V5](https://img.shields.io/badge/Sanity%20V5-supported-4e5452?style=flat)](https://www.sanity.io/)\n\n**Framework Support:**\n\n[![Next.js](https://img.shields.io/badge/Next.js-supported-000000?logo=next.js&logoColor=white&style=flat)](https://nextjs.org/)\n[![Astro](https://img.shields.io/badge/Astro-supported-FF5D01?logo=astro&logoColor=white&style=flat)](https://astro.build/)\n[![Vue](https://img.shields.io/badge/Vue%203-supported-4FC08D?logo=vue.js&logoColor=white&style=flat)](https://vuejs.org/)\n\nThe complete SEO toolkit for Sanity Studio. Empower your team with live SEO scoring, AI-powered content suggestions, team workflows, and comprehensive structured data support.\n\n**Production-Ready:** Free and AI tiers live. Pro features coming soon with team workflows, bulk optimization, and schema management.\n\n## Demo Video\n\n![Demo](https://raw.githubusercontent.com/bhargav-bkpatel/sanity-plugin-seo/main/public/assets/demo-3.gif)\n\n## Complete Feature Set\n\nEverything from basic SEO optimization to advanced team workflows.\n\n| Feature                                                          | Free | AI  | 🔜 Pro |\n| ---------------------------------------------------------------- | :--: | :-: | :----: |\n| Live SEO Score (0–100)                                           |  ✅  | ✅  |   —    |\n| GEO Checklist (AI Overview readiness)                            |  ✅  | ✅  |   —    |\n| Meta Tags Preview + HTML snippet                                 |  ✅  | ✅  |   —    |\n| Social Preview Cards (X, Facebook, LinkedIn, WhatsApp)           |  ✅  | ✅  |   —    |\n| Focus Keyword tracking                                           |  ✅  | ✅  |   —    |\n| Robots Meta (noindex, nofollow, noarchive…)                      |  ✅  | ✅  |   —    |\n| hreflang / multi-language targeting                              |  ✅  | ✅  |   —    |\n| Open Graph & Twitter/X card fields                               |  ✅  | ✅  |   —    |\n| Additional meta tags                                             |  ✅  | ✅  |   —    |\n| Frontend integration guides (Next.js, Astro, Vue)                |  ✅  | ✅  |   —    |\n| Readability score                                                |  ✅  | ✅  |   —    |\n| AI Keyword Suggestions                                           |  —   | ✅  |   —    |\n| AI Meta Title & Description generation                           |  —   | ✅  |   —    |\n| SERP Preview (desktop + mobile)                                  |  —   |  —  |   🔜   |\n| Schema.org Wizard (30+ structured data types)                    |  —   |  —  |   🔜   |\n| Live JSON-LD preview                                             |  —   |  —  |   🔜   |\n| SEO Health Dashboard (site-wide scores)                          |  —   |  —  |   🔜   |\n| SEO Optimizer — inline bulk edit, type filter, CSV import/export |  —   |  —  |   🔜   |\n| Bulk Open Graph sync                                             |  —   |  —  |   🔜   |\n| Advanced Validation (5 checks + auto-fix)                        |  —   |  —  |   🔜   |\n| Team Workflow (Draft → Review → Approved)                        |  —   |  —  |   🔜   |\n| Workflow Dashboard (site-wide status tracking)                   |  —   |  —  |   🔜   |\n| Duplicate meta title detection                                   |  —   |  —  |   🔜   |\n| AI Bulk SEO Generation                                           |  —   |  —  |   🔜   |\n\n## What Each Tier Includes\n\n**🎁 Free** — Essential SEO tools built-in. Start optimizing immediately.\n\n**🤖 AI** — Add AI-powered suggestions. Choose from OpenAI, Anthropic, or Groq (free tier available).\n\n**👥 Pro** — Coming Soon. Team workflows, bulk optimization, advanced analytics, and schema management for enterprise teams.\n\n## Table of Contents\n\n- [Quick Start](#quick-start)\n  - [1. Install the plugin](#1-install-the-plugin)\n  - [2. Configure in Sanity Studio](#2-configure-in-sanity-studio)\n  - [3. Add SEO to Your Documents](#3-add-seo-to-your-documents)\n- [Configuration Options](#config-options)\n- [Framework Integration Guides](#nextjs-integration)\n  - [Next.js Integration](#nextjs-integration)\n  - [Astro Integration](#astro-integration)\n  - [Vue 3 / Nuxt Integration](#vue-3--nuxt-integration)\n- [GROQ Fragment & Types](#groq-fragment)\n- [Pro Features — Coming Soon](#pro-features--coming-soon)\n- [AI Provider Setup](#ai-setup)\n- [Upgrading from v1.3](#upgrading-from-v13)\n\n## Quick Start\n\n### 1. Install the plugin\n\n```bash\nnpm install sanity-plugin-seo\n```\n\n**Or with yarn/pnpm:**\n\n```bash\nyarn add sanity-plugin-seo    # or\npnpm add sanity-plugin-seo\n```\n\n**Compatibility:** Sanity Studio v3, v4, and v5\n\n## 2. Configure in Sanity Studio\n\n### Option A: Free features only\n\n```\n// sanity.config.ts\nimport { defineConfig } from \"sanity\";\nimport { seoMetaFields } from \"sanity-plugin-seo\";\n\nexport default defineConfig({\n  plugins: [seoMetaFields()],\n});\n```\n\n### Option B: With AI (OpenAI, Anthropic, or Groq)\n\nAdd AI-powered suggestions for meta titles, descriptions, and keywords.\n\n```\nimport { defineConfig } from \"sanity\";\nimport { seoMetaFields } from \"sanity-plugin-seo\";\n\nexport default defineConfig({\n  plugins: [\n    seoMetaFields({\n      aiFeature: {\n        provider: \"openai\", // 'openai' | 'anthropic' | 'groq'\n        apiKey: process.env.SANITY_STUDIO_OPENAI_KEY!,\n        model: \"gpt-4o-mini\", // optional\n      },\n      bodyFields: [\"body\"], // single field — or pass multiple, see bodyFields docs below\n      slugField: \"slug\",\n    }),\n  ],\n});\n```\n\n### Option C: With Pro license (Coming Soon)\n\nUnlock team workflows, bulk optimization, and advanced schema management.\n\n```\nseoMetaFields({\n  proFeature: process.env.SANITY_STUDIO_SEO_LICENSE!,\n  projectId: process.env.SANITY_STUDIO_PROJECT_ID!,\n});\n```\n\n| Env variable                | Value                                                                                             |\n| --------------------------- | ------------------------------------------------------------------------------------------------- |\n| `SANITY_STUDIO_SEO_LICENSE` | Your license key from Lemon Squeezy                                                               |\n| `SANITY_STUDIO_PROJECT_ID`  | Your Sanity project ID (find it in `sanity.json` or [manage.sanity.io](https://manage.sanity.io)) |\n\n> Sanity Studio env vars must be prefixed with `SANITY_STUDIO_` to be included in the browser bundle.\n\n### Complete Configuration\n\n```\nimport { defineConfig } from \"sanity\";\nimport { seoMetaFields } from \"sanity-plugin-seo\";\n\nexport default defineConfig({\n  plugins: [\n    seoMetaFields({\n      // AI provider (OpenAI, Anthropic, or Groq)\n      aiFeature: {\n        provider: \"openai\", // 'openai' | 'anthropic' | 'groq'\n        apiKey: process.env.SANITY_STUDIO_OPENAI_KEY!,\n        model: \"gpt-4o-mini\",\n      },\n      // Body content fields for AI analysis — string, string path, or Sanity path array\n      bodyFields: [\n        \"body\",                          // simple field\n        \"sections[].content\",            // array traversal\n        [\"sections\", \"columns\", \"body\"], // Sanity native path array\n      ],\n      slugField: \"slug\",\n      // Show SEO Health + Optimizer in Studio toolbar (default: true)\n      dashboard: true,\n    }),\n  ],\n});\n```\n\n## 3. Add SEO to Your Documents\n\nAdd the `seoMetaFields` type to any document schema in your project:\n\n```\n// schemas/page.ts\nexport default {\n  name: \"page\",\n  type: \"document\",\n  fields: [\n    { name: \"title\", type: \"string\" },\n    { name: \"slug\", type: \"slug\", options: { source: \"title\" } },\n    { name: \"body\", type: \"array\", of: [{ type: \"block\" }] },\n    { name: \"seo\", type: \"seoMetaFields\" },\n  ],\n};\n```\n\nThis adds a fully-featured SEO panel with four tabs:\n\n- **Basic SEO** — Meta title, description, keywords\n- **Social Sharing** — Open Graph & Twitter cards\n- **Advanced** — Robots meta, hreflang, custom tags\n- **Schema.org** — 30+ structured data types (Pro)\n\n## Configuration Options\n\nAll options are optional. The plugin works great with zero configuration.\n\n| Option               | Type                                | Default          | Description                                                                                                                         |\n| -------------------- | ----------------------------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------- |\n| **Content Fields**   |\n| `bodyField`          | `string`                            | `'body'`         | Single body field name (legacy — prefer `bodyFields`)                                                                               |\n| `bodyFields`         | `Array<string \\| string[]>`         | —                | One or more body field paths; each item is a string path (`'sections[].content'`) or a Sanity path array (`['sections','content']`) |\n| `slugField`          | `string`                            | `'slug'`         | Slug field for URL preview in SERP                                                                                                  |\n| **AI Features**      |\n| `aiFeature`          | `object`                            | —                | Enable AI keyword and content suggestions                                                                                           |\n| `aiFeature.provider` | `'openai' \\| 'anthropic' \\| 'groq'` | —                | AI provider (OpenAI/Anthropic/Groq)                                                                                                 |\n| `aiFeature.apiKey`   | `string`                            | —                | API key from your provider                                                                                                          |\n| `aiFeature.model`    | `string`                            | provider default | Model ID (e.g., `gpt-4o-mini`, `claude-haiku-4-5-20251001`)                                                                         |\n| **Pro Features**     |\n| `proFeature`         | `string`                            | —                | Your Lemon Squeezy license key                                                                                                      |\n| `projectId`          | `string`                            | —                | Your Sanity project ID — used for seat-binding (required for Pro)                                                                   |\n| **UI**               |\n| `dashboard`          | `boolean`                           | `true`           | Show SEO Health & Optimizer in Studio toolbar                                                                                       |\n\n## Framework Integration Guides\n\nChoose your framework and follow the integration guide. All guides include complete examples.\n\n### Next.js Integration\n\n### 1. Sanity client + GROQ fragment\n\n```\nnpm install @sanity/client\n```\n\n```\n// lib/sanity.ts\nimport { createClient } from \"@sanity/client\";\n\nexport const client = createClient({\n  projectId: process.env.NEXT_PUBLIC_SANITY_PROJECT_ID!,\n  dataset: process.env.NEXT_PUBLIC_SANITY_DATASET || \"production\",\n  useCdn: false,\n  apiVersion: \"2024-01-01\",\n});\n\nexport const SEO_GROQ = `seo {\n  metaTitle, metaDescription, focusKeyword,\n  nofollowAttributes, robotsMeta, seoKeywords,\n  seoStatus, seoReviewNotes,\n  metaImage { asset->{ url } },\n  openGraph { title, description, siteName, image { asset->{ url } } },\n  twitter { cardType, site, creator, handle },\n  hreflang[] { locale, url },\n  schemaOrg {\n    schemaType, name, description, url, author,\n    datePublished, dateModified,\n    price, priceCurrency, availability,\n    ratingValue, ratingCount,\n    startDate, endDate, location,\n    faqItems[] { question, answer }\n  }\n}`;\n```\n\n```\n# .env.local\nNEXT_PUBLIC_SANITY_PROJECT_ID=your-project-id\nNEXT_PUBLIC_SANITY_DATASET=production\nNEXT_PUBLIC_SITE_URL=https://your-site.com\n```\n\n### 2. SEO helpers\n\n```\n// app/_seo.ts\nimport type { Metadata } from \"next\";\n\nexport type SeoField = {\n  metaTitle?: string;\n  metaDescription?: string;\n  nofollowAttributes?: boolean;\n  robotsMeta?: string[];\n  seoKeywords?: string[];\n  seoStatus?: \"draft\" | \"review\" | \"approved\";\n  seoReviewNotes?: string;\n  metaImage?: { asset?: { url?: string } };\n  openGraph?: {\n    title?: string;\n    description?: string;\n    siteName?: string;\n    image?: { asset?: { url?: string } };\n  };\n  twitter?: { cardType?: string; site?: string; creator?: string; handle?: string };\n  hreflang?: { locale: string; url: string }[];\n  schemaOrg?: {\n    schemaType?: string;\n    name?: string;\n    description?: string;\n    url?: string;\n    author?: string;\n    datePublished?: string;\n    dateModified?: string;\n    faqItems?: { question: string; answer: string }[];\n    [key: string]: unknown;\n  };\n};\n\nexport function buildMetadata(\n  seo: SeoField | undefined,\n  fallbackTitle: string | undefined,\n  slug: string,\n): Metadata {\n  const s = seo ?? {};\n  const canonical = `${process.env.NEXT_PUBLIC_SITE_URL ?? \"\"}/${slug}`;\n  const ogImage = s.openGraph?.image?.asset?.url ?? s.metaImage?.asset?.url;\n  const robots: string[] = [];\n  if (s.nofollowAttributes) robots.push(\"noindex\", \"nofollow\");\n  s.robotsMeta?.forEach((r) => {\n    if (!robots.includes(r)) robots.push(r);\n  });\n  const languages: Record<string, string> = {};\n  s.hreflang?.forEach(({ locale, url }) => {\n    languages[locale] = url;\n  });\n\n  return {\n    title: s.metaTitle ?? fallbackTitle,\n    description: s.metaDescription,\n    ...(s.seoKeywords?.length && { keywords: s.seoKeywords.join(\", \") }),\n    ...(robots.length && { robots: robots.join(\", \") }),\n    alternates: {\n      canonical,\n      ...(Object.keys(languages).length && { languages }),\n    },\n    openGraph: {\n      title: s.openGraph?.title ?? s.metaTitle ?? fallbackTitle,\n      description: s.openGraph?.description ?? s.metaDescription,\n      url: canonical,\n      siteName: s.openGraph?.siteName,\n      ...(ogImage && { images: [{ url: ogImage }] }),\n    },\n    twitter: {\n      card: (s.twitter?.cardType as \"summary\" | \"summary_large_image\") ?? \"summary_large_image\",\n      site: s.twitter?.site,\n      creator: s.twitter?.creator ?? s.twitter?.handle,\n    },\n  };\n}\n\nexport function buildJsonLd(seo: SeoField | undefined, fallbackTitle?: string): string {\n  const schema = seo?.schemaOrg;\n  if (!schema?.schemaType) {\n    return JSON.stringify({\n      \"@context\": \"https://schema.org\",\n      \"@type\": \"WebPage\",\n      name: seo?.metaTitle ?? fallbackTitle,\n      description: seo?.metaDescription,\n    });\n  }\n  if (schema.schemaType === \"FAQPage\" && schema.faqItems?.length) {\n    return JSON.stringify({\n      \"@context\": \"https://schema.org\",\n      \"@type\": \"FAQPage\",\n      mainEntity: schema.faqItems.map((item) => ({\n        \"@type\": \"Question\",\n        name: item.question,\n        acceptedAnswer: { \"@type\": \"Answer\", text: item.answer },\n      })),\n    });\n  }\n  const { schemaType, faqItems, ...rest } = schema;\n  return JSON.stringify({ \"@context\": \"https://schema.org\", \"@type\": schemaType, ...rest });\n}\n```\n\n### 3. App Router\n\n> Next.js 15: `params` is a Promise — `await` it first.\n\n```\n// app/[slug]/page.tsx\nimport type { Metadata } from \"next\";\nimport { client, SEO_GROQ } from \"@/lib/sanity\";\nimport { buildMetadata, buildJsonLd } from \"@/app/_seo\";\n\nconst query = `*[_type == \"page\" && slug.current == $slug][0]{ title, ${SEO_GROQ} }`;\ntype Props = { params: Promise<{ slug: string }> };\n\nexport async function generateMetadata({ params }: Props): Promise<Metadata> {\n  const { slug } = await params;\n  const page = await client.fetch(query, { slug });\n  return buildMetadata(page?.seo, page?.title, slug);\n}\n\nexport default async function Page({ params }: Props) {\n  const { slug } = await params;\n  const page = await client.fetch(query, { slug });\n  if (!page)\n    return (\n      <main>\n        <p>Page not found.</p>\n      </main>\n    );\n  return (\n    <>\n      <script\n        type=\"application/ld+json\"\n        dangerouslySetInnerHTML={{ __html: buildJsonLd(page.seo, page.title) }}\n      />\n      <main>\n        <h1>{page.title}</h1>\n      </main>\n    </>\n  );\n}\n```\n\n### Pages Router\n\n```\nnpm install next-seo\n```\n\n```\n// pages/[slug].tsx\nimport { NextSeo } from \"next-seo\";\nimport { GetStaticProps } from \"next\";\nimport { client, SEO_GROQ } from \"@/lib/sanity\";\nimport type { SeoField } from \"@/app/_seo\";\n\ntype Props = { page: { title: string; slug: string; seo?: SeoField } };\n\nexport default function Page({ page }: Props) {\n  const seo = page?.seo ?? {};\n  const canonical = `${process.env.NEXT_PUBLIC_SITE_URL ?? \"\"}/${page.slug}`;\n  const ogImage = seo.openGraph?.image?.asset?.url ?? seo.metaImage?.asset?.url;\n\n  const schema = seo.schemaOrg;\n  let jsonLd: string | null = null;\n  if (schema?.schemaType === \"FAQPage\" && schema.faqItems?.length) {\n    jsonLd = JSON.stringify({\n      \"@context\": \"https://schema.org\",\n      \"@type\": \"FAQPage\",\n      mainEntity: schema.faqItems.map((i) => ({\n        \"@type\": \"Question\",\n        name: i.question,\n        acceptedAnswer: { \"@type\": \"Answer\", text: i.answer },\n      })),\n    });\n  } else if (schema?.schemaType) {\n    const { schemaType, faqItems, ...rest } = schema;\n    jsonLd = JSON.stringify({ \"@context\": \"https://schema.org\", \"@type\": schemaType, ...rest });\n  }\n\n  return (\n    <>\n      <NextSeo\n        title={seo.metaTitle}\n        description={seo.metaDescription}\n        canonical={canonical}\n        noindex={!!(seo.nofollowAttributes || seo.robotsMeta?.includes(\"noindex\"))}\n        nofollow={!!(seo.nofollowAttributes || seo.robotsMeta?.includes(\"nofollow\"))}\n        additionalMetaTags={\n          seo.seoKeywords?.length ? [{ name: \"keywords\", content: seo.seoKeywords.join(\", \") }] : []\n        }\n        additionalLinkTags={\n          seo.hreflang?.map(({ locale, url }) => ({\n            rel: \"alternate\",\n            hrefLang: locale,\n            href: url,\n          })) ?? []\n        }\n        openGraph={{\n          title: seo.openGraph?.title ?? seo.metaTitle,\n          description: seo.openGraph?.description ?? seo.metaDescription,\n          url: canonical,\n          siteName: seo.openGraph?.siteName,\n          images: ogImage ? [{ url: ogImage }] : [],\n        }}\n        twitter={{\n          cardType: seo.twitter?.cardType ?? \"summary_large_image\",\n          site: seo.twitter?.site,\n          handle: seo.twitter?.handle ?? seo.twitter?.creator,\n        }}\n      />\n      {jsonLd && <script type=\"application/ld+json\" dangerouslySetInnerHTML={{ __html: jsonLd }} />}\n      <main>\n        <h1>{page.title}</h1>\n      </main>\n    </>\n  );\n}\n\nexport const getStaticProps: GetStaticProps = async ({ params }) => {\n  const page = await client.fetch(\n    `*[_type == \"page\" && slug.current == $slug][0]{ title, \"slug\": slug.current, ${SEO_GROQ} }`,\n    { slug: params?.slug },\n  );\n  return { props: { page }, revalidate: 60 };\n};\n\nexport async function getStaticPaths() {\n  const slugs = await client.fetch(`*[_type == \"page\"].slug.current`);\n  return { paths: slugs.map((slug: string) => ({ params: { slug } })), fallback: \"blocking\" };\n}\n```\n\n### Astro Integration\n\n#### 1. Install + configure\n\n```\nnpm install @sanity/client astro-seo\n```\n\n```\n// astro.config.mjs\nimport { defineConfig } from \"astro/config\";\nexport default defineConfig({ output: \"server\" });\n```\n\n```\n# .env\nPUBLIC_SANITY_PROJECT_ID=your-project-id\nPUBLIC_SANITY_DATASET=production\nPUBLIC_SITE_URL=https://your-site.com\n```\n\n### 2. Sanity client\n\n```\n// src/lib/sanity.ts\nimport { createClient } from \"@sanity/client\";\n\nexport const client = createClient({\n  projectId: import.meta.env.PUBLIC_SANITY_PROJECT_ID,\n  dataset: import.meta.env.PUBLIC_SANITY_DATASET ?? \"production\",\n  useCdn: false,\n  apiVersion: \"2024-01-01\",\n});\n\nexport const SEO_GROQ = `seo {\n  metaTitle, metaDescription, focusKeyword,\n  nofollowAttributes, robotsMeta, seoKeywords,\n  seoStatus, seoReviewNotes,\n  metaImage { asset->{ url } },\n  openGraph { title, description, siteName, image { asset->{ url } } },\n  twitter { cardType, site, creator, handle },\n  hreflang[] { locale, url },\n  schemaOrg {\n    schemaType, name, description, url, author,\n    datePublished, dateModified,\n    price, priceCurrency, availability,\n    ratingValue, ratingCount,\n    startDate, endDate, location,\n    faqItems[] { question, answer }\n  }\n}`;\n\nexport type SeoField = {\n  metaTitle?: string;\n  metaDescription?: string;\n  nofollowAttributes?: boolean;\n  robotsMeta?: string[];\n  seoKeywords?: string[];\n  seoStatus?: string;\n  seoReviewNotes?: string;\n  metaImage?: { asset?: { url?: string } };\n  openGraph?: {\n    title?: string;\n    description?: string;\n    siteName?: string;\n    image?: { asset?: { url?: string } };\n  };\n  twitter?: { cardType?: string; site?: string; creator?: string; handle?: string };\n  hreflang?: { locale: string; url: string }[];\n  schemaOrg?: {\n    schemaType?: string;\n    faqItems?: { question: string; answer: string }[];\n    [key: string]: unknown;\n  };\n};\n\nexport function buildJsonLd(\n  schema: SeoField[\"schemaOrg\"],\n  fallbackTitle?: string,\n  fallbackDesc?: string,\n): string | null {\n  if (!schema?.schemaType) {\n    return JSON.stringify({\n      \"@context\": \"https://schema.org\",\n      \"@type\": \"WebPage\",\n      name: fallbackTitle,\n      description: fallbackDesc,\n    });\n  }\n  if (schema.schemaType === \"FAQPage\" && schema.faqItems?.length) {\n    return JSON.stringify({\n      \"@context\": \"https://schema.org\",\n      \"@type\": \"FAQPage\",\n      mainEntity: schema.faqItems.map((item) => ({\n        \"@type\": \"Question\",\n        name: item.question,\n        acceptedAnswer: { \"@type\": \"Answer\", text: item.answer },\n      })),\n    });\n  }\n  const { schemaType, faqItems, ...rest } = schema;\n  return JSON.stringify({ \"@context\": \"https://schema.org\", \"@type\": schemaType, ...rest });\n}\n```\n\n### 3. Page route\n\n```\n// src/pages/[slug].astro\nimport { SEO } from 'astro-seo'\nimport { client, SEO_GROQ, buildJsonLd } from '../lib/sanity'\n\nexport const prerender = false\n\nconst { slug } = Astro.params\nconst page = await client.fetch(\n  `*[_type == \"page\" && slug.current == $slug][0]{ title, description, ${SEO_GROQ} }`,\n  { slug },\n)\nif (!page) return Astro.redirect('/404')\n\nconst seo = page.seo ?? {}\nconst pageUrl = `${import.meta.env.PUBLIC_SITE_URL ?? ''}/${slug}`\nconst title = seo.metaTitle ?? page.title\nconst description = seo.metaDescription ?? page.description ?? ''\nconst ogImage = seo.openGraph?.image?.asset?.url ?? seo.metaImage?.asset?.url\nconst jsonLd = buildJsonLd(seo.schemaOrg, title, description)\n\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <SEO\n      title={title}\n      description={description}\n      canonical={pageUrl}\n      noindex={seo.robotsMeta?.includes('noindex') ?? false}\n      nofollow={seo.nofollowAttributes ?? false}\n      openGraph={{\n        basic: { title: seo.openGraph?.title ?? title, type: 'website', image: ogImage ?? '', url: pageUrl },\n        optional: { description: seo.openGraph?.description ?? description, siteName: seo.openGraph?.siteName },\n      }}\n      twitter={{\n        card: (seo.twitter?.cardType ?? 'summary_large_image') as any,\n        site: seo.twitter?.site,\n        creator: seo.twitter?.creator ?? seo.twitter?.handle,\n      }}\n      extend={{\n        meta: [\n          { name: 'robots', content: seo.robotsMeta?.join(', ') ?? 'index,follow' },\n          ...(seo.seoKeywords?.length ? [{ name: 'keywords', content: seo.seoKeywords.join(', ') }] : []),\n        ],\n        link: seo.hreflang?.map((h: { locale: string; url: string }) => ({ rel: 'alternate', hreflang: h.locale, href: h.url })) ?? [],\n      }}\n    />\n    {jsonLd && <script type=\"application/ld+json\" set:html={jsonLd} />}\n  </head>\n  <body>\n    <main><h1>{page.title}</h1></main>\n  </body>\n</html>\n```\n\n<details>\n<summary>Without astro-seo (native head tags)</summary>\n\n```\nimport { client, SEO_GROQ, buildJsonLd } from '../lib/sanity'\nexport const prerender = false\n\nconst { slug } = Astro.params\nconst page = await client.fetch(\n  `*[_type == \"page\" && slug.current == $slug][0]{ title, description, ${SEO_GROQ} }`,\n  { slug },\n)\nif (!page) return Astro.redirect('/404')\n\nconst seo = page.seo ?? {}\nconst pageUrl = `${import.meta.env.PUBLIC_SITE_URL ?? ''}/${slug}`\nconst title = seo.metaTitle ?? page.title\nconst description = seo.metaDescription ?? page.description ?? ''\nconst ogImage = seo.openGraph?.image?.asset?.url ?? seo.metaImage?.asset?.url\nconst jsonLd = buildJsonLd(seo.schemaOrg, title, description)\n\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <title>{title}</title>\n    <meta name=\"description\" content={description} />\n    <link rel=\"canonical\" href={pageUrl} />\n    <meta name=\"robots\" content={seo.robotsMeta?.join(', ') ?? 'index,follow'} />\n    {seo.seoKeywords?.length && <meta name=\"keywords\" content={seo.seoKeywords.join(', ')} />}\n    <meta property=\"og:title\" content={seo.openGraph?.title ?? title} />\n    <meta property=\"og:description\" content={seo.openGraph?.description ?? description} />\n    <meta property=\"og:url\" content={pageUrl} />\n    <meta property=\"og:type\" content=\"website\" />\n    {ogImage && <meta property=\"og:image\" content={ogImage} />}\n    {seo.openGraph?.siteName && <meta property=\"og:site_name\" content={seo.openGraph.siteName} />}\n    <meta name=\"twitter:card\" content={seo.twitter?.cardType ?? 'summary_large_image'} />\n    {seo.twitter?.site && <meta name=\"twitter:site\" content={seo.twitter.site} />}\n    {(seo.twitter?.creator ?? seo.twitter?.handle) && (\n      <meta name=\"twitter:creator\" content={seo.twitter.creator ?? seo.twitter.handle} />\n    )}\n    {seo.hreflang?.map((h: { locale: string; url: string }) => (\n      <link rel=\"alternate\" hreflang={h.locale} href={h.url} />\n    ))}\n    {jsonLd && <script type=\"application/ld+json\" set:html={jsonLd} />}\n  </head>\n  <body>\n    <main><h1>{page.title}</h1></main>\n  </body>\n</html>\n```\n\n</details>\n\n### Vue 3 / Nuxt Integration\n\n> Don't use `@nuxtjs/sanity` — it pulls in React packages and breaks hydration. Use `@sanity/client` directly.\n\n### Nuxt 3\n\n```\nnpm install @sanity/client\n```\n\n```\n// nuxt.config.ts\nexport default defineNuxtConfig({\n  runtimeConfig: {\n    public: {\n      sanityProjectId: process.env.NUXT_PUBLIC_SANITY_PROJECT_ID ?? \"\",\n      sanityDataset: process.env.NUXT_PUBLIC_SANITY_DATASET ?? \"production\",\n      siteUrl: process.env.NUXT_PUBLIC_SITE_URL ?? \"\",\n    },\n  },\n});\n```\n\n```\n# .env\nNUXT_PUBLIC_SANITY_PROJECT_ID=your-project-id\nNUXT_PUBLIC_SANITY_DATASET=production\nNUXT_PUBLIC_SITE_URL=https://your-site.com\n```\n\n> If you get CORS errors after client-side navigation, add `http://localhost:3000` to your project's CORS settings at [sanity.io/manage](https://sanity.io/manage).\n\n**`composables/useSanityFetch.ts`**\n\n```\nimport { createClient } from \"@sanity/client\";\n\nlet _client: ReturnType<typeof createClient> | null = null;\n\nfunction getSanityClient() {\n  if (_client) return _client;\n  const config = useRuntimeConfig();\n  _client = createClient({\n    projectId: config.public.sanityProjectId,\n    dataset: config.public.sanityDataset,\n    useCdn: false,\n    apiVersion: \"2024-01-01\",\n  });\n  return _client;\n}\n\nexport function useSanityFetch<T>(query: string, params?: Record<string, unknown>) {\n  const key = query + (params ? JSON.stringify(params) : \"\");\n  return useAsyncData<T>(key, () => getSanityClient().fetch<T>(query, params ?? {}));\n}\n```\n\n**`composables/useSeo.ts`**\n\n```\nexport type SeoField = {\n  metaTitle?: string;\n  metaDescription?: string;\n  nofollowAttributes?: boolean;\n  robotsMeta?: string[];\n  seoKeywords?: string[];\n  seoStatus?: string;\n  seoReviewNotes?: string;\n  metaImage?: { asset?: { url?: string } };\n  openGraph?: {\n    title?: string;\n    description?: string;\n    siteName?: string;\n    image?: { asset?: { url?: string } };\n  };\n  twitter?: { cardType?: string; site?: string; creator?: string; handle?: string };\n  hreflang?: { locale: string; url: string }[];\n  schemaOrg?: {\n    schemaType?: string;\n    name?: string;\n    description?: string;\n    url?: string;\n    author?: string;\n    datePublished?: string;\n    dateModified?: string;\n    faqItems?: { question: string; answer: string }[];\n    [key: string]: unknown;\n  };\n};\n\nexport const SEO_GROQ = `seo {\n  metaTitle, metaDescription, focusKeyword,\n  nofollowAttributes, robotsMeta, seoKeywords,\n  seoStatus, seoReviewNotes,\n  metaImage { asset->{ url } },\n  openGraph { title, description, siteName, image { asset->{ url } } },\n  twitter { cardType, site, creator, handle },\n  hreflang[] { locale, url },\n  schemaOrg {\n    schemaType, name, description, url, author,\n    datePublished, dateModified,\n    price, priceCurrency, availability,\n    ratingValue, ratingCount,\n    startDate, endDate, location,\n    faqItems[] { question, answer }\n  }\n}`;\n\nexport function buildJsonLd(\n  schema: SeoField[\"schemaOrg\"],\n  fallbackTitle?: string,\n  fallbackDesc?: string,\n): string | null {\n  if (!schema?.schemaType) {\n    return JSON.stringify({\n      \"@context\": \"https://schema.org\",\n      \"@type\": \"WebPage\",\n      name: fallbackTitle,\n      description: fallbackDesc,\n    });\n  }\n  if (schema.schemaType === \"FAQPage\" && schema.faqItems?.length) {\n    return JSON.stringify({\n      \"@context\": \"https://schema.org\",\n      \"@type\": \"FAQPage\",\n      mainEntity: schema.faqItems.map((item) => ({\n        \"@type\": \"Question\",\n        name: item.question,\n        acceptedAnswer: { \"@type\": \"Answer\", text: item.answer },\n      })),\n    });\n  }\n  const { schemaType, faqItems, ...rest } = schema;\n  return JSON.stringify({ \"@context\": \"https://schema.org\", \"@type\": schemaType, ...rest });\n}\n```\n\n**`pages/[slug].vue`**\n\n```\n<script setup lang=\"ts\">\nimport { SEO_GROQ, buildJsonLd, type SeoField } from \"~/composables/useSeo\";\n\nconst route = useRoute();\nconst slug = route.params.slug as string;\nconst siteUrl = useRuntimeConfig().public.siteUrl;\n\ntype Page = { title: string; slug: string; description?: string; seo?: SeoField };\n\nconst { data: page } = await useSanityFetch<Page | null>(\n  `*[_type == \"page\" && slug.current == $slug][0]{ title, \"slug\": slug.current, description, ${SEO_GROQ} }`,\n  { slug },\n);\n\nif (!page.value) throw createError({ statusCode: 404, statusMessage: \"Page not found\" });\n\nconst seo = computed(() => page.value?.seo);\nconst pageUrl = `${siteUrl}/${slug}`;\nconst title = computed(() => seo.value?.metaTitle ?? page.value?.title ?? \"\");\nconst description = computed(() => seo.value?.metaDescription ?? page.value?.description ?? \"\");\nconst ogImage = computed(\n  () => seo.value?.openGraph?.image?.asset?.url ?? seo.value?.metaImage?.asset?.url,\n);\nconst jsonLd = computed(() => buildJsonLd(seo.value?.schemaOrg, title.value, description.value));\n\nuseHead({\n  title: title.value,\n  meta: [\n    { name: \"description\", content: description.value },\n    { name: \"robots\", content: seo.value?.robotsMeta?.join(\", \") ?? \"index,follow\" },\n    ...(seo.value?.seoKeywords?.length\n      ? [{ name: \"keywords\", content: seo.value.seoKeywords.join(\", \") }]\n      : []),\n    { property: \"og:title\", content: seo.value?.openGraph?.title ?? title.value },\n    { property: \"og:description\", content: seo.value?.openGraph?.description ?? description.value },\n    { property: \"og:type\", content: \"article\" },\n    { property: \"og:url\", content: pageUrl },\n    ...(ogImage.value ? [{ property: \"og:image\", content: ogImage.value }] : []),\n    ...(seo.value?.openGraph?.siteName\n      ? [{ property: \"og:site_name\", content: seo.value.openGraph.siteName }]\n      : []),\n    { name: \"twitter:card\", content: seo.value?.twitter?.cardType ?? \"summary_large_image\" },\n    ...(seo.value?.twitter?.site\n      ? [{ name: \"twitter:site\", content: seo.value.twitter.site }]\n      : []),\n    ...(seo.value?.twitter?.creator ?? seo.value?.twitter?.handle\n      ? [\n          {\n            name: \"twitter:creator\",\n            content: seo.value?.twitter?.creator ?? seo.value?.twitter?.handle ?? \"\",\n          },\n        ]\n      : []),\n  ],\n  link: [\n    { rel: \"canonical\", href: pageUrl },\n    ...(seo.value?.hreflang?.map(({ locale, url }) => ({\n      rel: \"alternate\",\n      hreflang: locale,\n      href: url,\n    })) ?? []),\n  ],\n  script: jsonLd.value ? [{ type: \"application/ld+json\", innerHTML: jsonLd.value }] : [],\n});\n</script>\n\n<template>\n  <main>\n    <h1>{{ page?.title }}</h1>\n  </main>\n</template>\n```\n\n### Vue 3 standalone (Vite + @unhead/vue)\n\n```\nnpm install @sanity/client @unhead/vue\n```\n\n```\n// src/composables/useSeo.ts\nimport { createClient } from \"@sanity/client\";\nimport { useHead } from \"@unhead/vue\";\n\nconst client = createClient({\n  projectId: import.meta.env.VITE_SANITY_PROJECT_ID,\n  dataset: import.meta.env.VITE_SANITY_DATASET ?? \"production\",\n  useCdn: false,\n  apiVersion: \"2024-01-01\",\n});\n\ntype SeoField = {\n  metaTitle?: string;\n  metaDescription?: string;\n  nofollowAttributes?: boolean;\n  robotsMeta?: string[];\n  seoKeywords?: string[];\n  metaImage?: { asset?: { url?: string } };\n  openGraph?: {\n    title?: string;\n    description?: string;\n    siteName?: string;\n    image?: { asset?: { url?: string } };\n  };\n  twitter?: { cardType?: string; site?: string; creator?: string; handle?: string };\n  hreflang?: { locale: string; url: string }[];\n  schemaOrg?: {\n    schemaType?: string;\n    faqItems?: { question: string; answer: string }[];\n    [key: string]: unknown;\n  };\n};\n\nexport async function useSanityPage(slug: string) {\n  const page = await client.fetch<{ title: string; seo?: SeoField } | null>(\n    `*[_type == \"page\" && slug.current == $slug][0]{\n      title,\n      seo {\n        metaTitle, metaDescription, nofollowAttributes, robotsMeta, seoKeywords,\n        metaImage { asset->{ url } },\n        openGraph { title, description, siteName, image { asset->{ url } } },\n        twitter { cardType, site, creator, handle },\n        hreflang[] { locale, url },\n        schemaOrg { schemaType, name, description, url, faqItems[] { question, answer } }\n      }\n    }`,\n    { slug },\n  );\n\n  const seo = page?.seo ?? {};\n  const canonical = `${import.meta.env.VITE_SITE_URL ?? \"\"}/${slug}`;\n  const ogImage = seo.openGraph?.image?.asset?.url ?? seo.metaImage?.asset?.url;\n\n  let jsonLd: string | null = null;\n  const schema = seo.schemaOrg;\n  if (schema?.schemaType === \"FAQPage\" && schema.faqItems?.length) {\n    jsonLd = JSON.stringify({\n      \"@context\": \"https://schema.org\",\n      \"@type\": \"FAQPage\",\n      mainEntity: schema.faqItems.map((i) => ({\n        \"@type\": \"Question\",\n        name: i.question,\n        acceptedAnswer: { \"@type\": \"Answer\", text: i.answer },\n      })),\n    });\n  } else if (schema?.schemaType) {\n    const { schemaType, faqItems, ...rest } = schema;\n    jsonLd = JSON.stringify({ \"@context\": \"https://schema.org\", \"@type\": schemaType, ...rest });\n  }\n\n  useHead({\n    title: seo.metaTitle,\n    meta: [\n      { name: \"description\", content: seo.metaDescription },\n      { name: \"robots\", content: seo.robotsMeta?.join(\", \") ?? \"index,follow\" },\n      ...(seo.seoKeywords?.length\n        ? [{ name: \"keywords\", content: seo.seoKeywords.join(\", \") }]\n        : []),\n      { property: \"og:title\", content: seo.openGraph?.title ?? seo.metaTitle },\n      { property: \"og:description\", content: seo.openGraph?.description ?? seo.metaDescription },\n      { property: \"og:url\", content: canonical },\n      ...(seo.openGraph?.siteName\n        ? [{ property: \"og:site_name\", content: seo.openGraph.siteName }]\n        : []),\n      ...(ogImage ? [{ property: \"og:image\", content: ogImage }] : []),\n      { name: \"twitter:card\", content: seo.twitter?.cardType ?? \"summary_large_image\" },\n      ...(seo.twitter?.site ? [{ name: \"twitter:site\", content: seo.twitter.site }] : []),\n      ...(seo.twitter?.creator ?? seo.twitter?.handle\n        ? [{ name: \"twitter:creator\", content: seo.twitter.creator ?? seo.twitter.handle }]\n        : []),\n    ],\n    link: [\n      { rel: \"canonical\", href: canonical },\n      ...(seo.hreflang?.map(({ locale, url }) => ({\n        rel: \"alternate\",\n        hreflang: locale,\n        href: url,\n      })) ?? []),\n    ],\n    script: jsonLd ? [{ type: \"application/ld+json\", innerHTML: jsonLd }] : [],\n  });\n\n  return { page };\n}\n```\n\n## GROQ Fragment & Types\n\nCopy and use this GROQ fragment to fetch all SEO fields from your documents:\n\n```\nconst pageQuery = groq`*[_type == \"page\" && slug.current == $slug][0]{\n  title,\n  seo {\n    metaTitle, metaDescription, focusKeyword, seoKeywords,\n    nofollowAttributes, robotsMeta,\n    metaImage { asset->{ url } },\n    openGraph { title, description, siteName, image { asset->{ url } } },\n    twitter { cardType, site, creator, handle },\n    hreflang[] { locale, url },\n    schemaOrg {\n      schemaType, name, description, url, author,\n      datePublished, dateModified,\n      price, priceCurrency, availability,\n      ratingValue, ratingCount,\n      startDate, endDate, location,\n      faqItems[] { question, answer }\n    },\n    seoStatus, seoReviewNotes\n  }\n}`;\n```\n\n| Field                       | Type       | Notes                             |\n| --------------------------- | ---------- | --------------------------------- |\n| `metaTitle`                 | `string`   | Page title for search engines     |\n| `metaDescription`           | `string`   | Page description                  |\n| `focusKeyword`              | `string`   | Primary keyword                   |\n| `seoKeywords`               | `string[]` | Additional keywords               |\n| `nofollowAttributes`        | `boolean`  | Noindex toggle                    |\n| `robotsMeta`                | `string[]` | e.g. `['noindex', 'nofollow']`    |\n| `metaImage.asset.url`       | `string`   | Fallback OG/Twitter image         |\n| `openGraph.title`           | `string`   | OG title                          |\n| `openGraph.description`     | `string`   | OG description                    |\n| `openGraph.siteName`        | `string`   | OG site name                      |\n| `openGraph.image.asset.url` | `string`   | OG image                          |\n| `twitter.cardType`          | `string`   | e.g. `summary_large_image`        |\n| `twitter.site`              | `string`   | Twitter @account                  |\n| `twitter.creator`           | `string`   | Twitter @author                   |\n| `hreflang[].locale`         | `string`   | BCP 47 locale code                |\n| `hreflang[].url`            | `string`   | Alternate URL for that locale     |\n| `schemaOrg.schemaType`      | `string`   | Schema.org type                   |\n| `seoStatus`                 | `string`   | `draft` \\| `review` \\| `approved` |\n| `seoReviewNotes`            | `string`   | Reviewer notes                    |\n\n## Body Fields (`bodyFields`)\n\n`bodyFields` accepts an array where each item is either a **string path** or a **Sanity path array**:\n\n```ts\nseoMetaFields({\n  bodyFields: [\n    \"body\", // simple field\n    \"excerpt\", // plain string or Portable Text\n    \"sections[].content\", // string with '[]. ' array traversal\n    \"sections[].columns[].body\", // nested array traversal\n    [\"sections\", \"columns\", \"content\"], // Sanity native path array\n  ],\n});\n```\n\n**Path formats**\n\n| Item                              | Resolves to                                                  |\n| --------------------------------- | ------------------------------------------------------------ |\n| `\"body\"`                          | `document.body`                                              |\n| `\"sections[].content\"`            | `.content` from every item in `document.sections`            |\n| `\"sections[].columns[].body\"`     | nested array traversal                                       |\n| `[\"sections\", \"columns\", \"body\"]` | `document.sections.columns.body` (direct path, no iteration) |\n\nFields are resolved in order — earlier fields are higher priority when the AI prompt trims to 2000 characters.\n\n> `bodyField: \"body\"` (single string) still works and is kept for backwards compatibility. `bodyFields` takes precedence when both are set.\n\n## Free Features\n\n### Readability Score\n\nCalculates a Flesch-Kincaid Grade Level for your content and shows it with color-coded feedback directly beneath the body field.\n\n| Grade | Meaning                                    |\n| ----- | ------------------------------------------ |\n| 1–6   | Very easy — general public                 |\n| 7–8   | Easy — ideal for most blog posts           |\n| 9–12  | Average — acceptable for technical content |\n| 13+   | Difficult — academic/specialist            |\n\nGreen = Grade ≤ 8, Amber = 9–12, Red = 13+.\n\n## Pro Features (Coming Soon)\n\nAdvanced team workflows, bulk optimization, and analytics for enterprise teams. All features are in development and launching soon.\n\n> **Get notified when Pro launches:** Star the [GitHub repo](https://github.com/bhargav-bkpatel/sanity-plugin-seo) or watch the [npm package](https://www.npmjs.com/package/sanity-plugin-seo)\n\n### SERP Preview\n\nDesktop and mobile Google search mockup with pixel-accurate title/description truncation.\n\n### Schema.org Wizard\n\nGuided form for 30 structured data types. Fills out only the fields relevant to the selected type and shows a live JSON-LD preview as you type.\n\nSupported types: Article, Blog Post, Product, FAQ Page, Local Business, Event, Organization, Web Page, Video, Recipe, Person, Course, Job Posting, Breadcrumb, News Article, How-To Guide, Review, Software/App, Book, Movie, Service, Professional Service, Medical Condition, Dataset, Podcast, Podcast Episode, Tourist Attraction, Accommodation, Sports Team, Collection Page, About Page.\n\n### Advanced Validation\n\n5 checks with one-click fixes where possible:\n\n| Check                                   |      Auto-fixable       |\n| --------------------------------------- | :---------------------: |\n| Unique meta title (GROQ query)          |            —            |\n| Open Graph image present                |            —            |\n| Open Graph title set                    | ✅ Copy from meta title |\n| Focus keyword in meta title             |            —            |\n| Meta description length (100–160 chars) |            —            |\n\nProgress bar + \"Fix all\" button. Each auto-fix shows a 2.5-second inline confirmation.\n\n### Team Workflow\n\nThree-status pipeline: **Draft → Needs SEO Review → SEO Approved**\n\n- Click any step to jump to it\n- Quick-action buttons (Request Review / Mark Approved / Reset to Draft)\n- Review Notes field for feedback between team members\n- `seoStatus` and `seoReviewNotes` stored on the document, queryable via GROQ\n\n### SEO Health Dashboard\n\nSite-wide score overview for all documents.\n\n- Stat cards with average score, issue counts, pages missing OG\n- Filter by score range (Poor / Needs Work / Good) or issue type\n- Paginated list with score bar, type badge, and last-updated date\n- Click any row to open the document\n\n### SEO Optimizer\n\nFix queue for all documents with SEO issues.\n\n- Inline editing — expand a row to edit meta title, description, focus keyword, OG title, OG description\n- Type filter dropdown\n- **Sync Open Graph** bulk action — copies meta title/description to OG fields for selected pages\n- **Import/Export CSV** — edit in a spreadsheet and re-import\n- Inline result log after every bulk operation\n\n### Workflow Dashboard\n\nTop-level tool that shows every document's review status in one place.\n\n- Stat cards (All / Draft / Needs Review / Approved) — click to filter\n- Inline status actions per row — no need to open the document\n- Expand a row to see SEO issues and add review notes\n- Direct link to open any document in the editor\n\n### AI Bulk SEO Generation — Coming Soon\n\nGenerate meta titles and descriptions for every page using your configured AI provider. Pick a target field in the SEO Optimizer, select pages, and let it run.\n\n## Pro License Setup\n\n1. Purchase a license at [sanity-seo-plugin.bkpatel.com](https://sanity-seo-plugin.bkpatel.com/)\n2. Add all three values to your `.env` file:\n\n```bash\nSANITY_STUDIO_SEO_LICENSE=XXXX-XXXX-XXXX-XXXX\nSANITY_STUDIO_PROJECT_ID=your-sanity-project-id\n```\n\n3. Pass them to the plugin in a single config object:\n\n```\n// sanity.config.ts\nimport { defineConfig } from \"sanity\";\nimport { seoMetaFields } from \"sanity-plugin-seo\";\n\nexport default defineConfig({\n  plugins: [\n    seoMetaFields({\n      proFeature: process.env.SANITY_STUDIO_SEO_LICENSE!,\n      projectId: process.env.SANITY_STUDIO_PROJECT_ID!,\n    }),\n  ],\n});\n```\n\n**Where to find your Sanity project ID:** open `sanity.json` in your Studio root, or go to [manage.sanity.io](https://manage.sanity.io) → your project → Settings.\n\n> Sanity Studio env vars must be prefixed with `SANITY_STUDIO_` to be included in the browser bundle.\n\n## AI Provider Setup\n\nThree AI providers supported. Choose based on your needs and budget.\n\n### OpenAI (Paid)\n\n```\nseoMetaFields({\n  aiFeature: {\n    provider: \"openai\",\n    apiKey: process.env.SANITY_STUDIO_OPENAI_KEY!,\n    model: \"gpt-4o-mini\",\n  },\n  bodyFields: [\"body\"],\n});\n```\n\nRecommended: `gpt-4o-mini` (fast), `gpt-4o` (better quality)\n\n### Anthropic (Paid)\n\n```\nseoMetaFields({\n  aiFeature: {\n    provider: \"anthropic\",\n    apiKey: process.env.SANITY_STUDIO_ANTHROPIC_KEY!,\n    model: \"claude-haiku-4-5-20251001\",\n  },\n  bodyFields: [\"body\"],\n});\n```\n\n**Recommended models:** `claude-haiku-4-5-20251001` (fast & cheap), `claude-sonnet-4-6` (best quality)\n\n### Groq (Free)\n\n```\nseoMetaFields({\n  aiFeature: {\n    provider: \"groq\",\n    apiKey: process.env.SANITY_STUDIO_GROQ_KEY!,\n    model: \"llama-3.3-70b-versatile\",\n  },\n  bodyFields: [\"body\"],\n});\n```\n\n**Free API:** Sign up at [console.groq.com](https://console.groq.com)  \n**Recommended models:** `llama-3.3-70b-versatile`, `mixtral-8x7b-32768`\n\n> ⚠️ **Security Note:** API keys are bundled in the browser. Always use restricted API keys with minimal permissions, and prefix env vars with `SANITY_STUDIO_`.\n\n## Upgrading from v1.3 to v1.4\n\n**Good news:** No schema migrations needed. All existing SEO fields continue to work. Just update your config.\n\n### What Changed\n\nThe basic setup works exactly the same:\n\n```\n// v1.3 and v1.4 — no changes needed\nplugins: [seoMetaFields()];\n```\n\n**New in v1.4:** AI and Pro features are now available with renamed config keys:\n\n| Feature        | Config Key (v1.4) |\n| -------------- | ----------------- |\n| AI suggestions | `aiFeature`       |\n| Pro license    | `proFeature`      |\n\nSee [AI Provider Setup](#ai-provider-setup) and [Pro License Setup](#pro-license-setup--coming-soon) for configuration examples.\n\n### New Fields in v1.4\n\nThese new schema fields are optional and automatically included:\n\n| Field                | Type       | Purpose                                                    |\n| -------------------- | ---------- | ---------------------------------------------------------- |\n| `focusKeyword`       | `string`   | Primary target keyword for tracking                        |\n| `robotsMeta`         | `string[]` | Indexing control (noindex, nofollow, noarchive, nosnippet) |\n| `hreflang`           | `array`    | Alternate language/regional URLs                           |\n| `additionalMetaTags` | `array`    | Custom name/content meta tag pairs                         |\n| `schemaOrg`          | `object`   | Schema.org structured data (Pro feature)                   |\n| `seoStatus`          | `string`   | Workflow status: draft, review, approved (Pro feature)     |\n| `seoReviewNotes`     | `string`   | Reviewer feedback and notes (Pro feature)                  |\n\nExisting documents work fine without these new fields — they're completely optional.\n\n## Free Features Deep Dive\n\nEverything you need to optimize your content for search engines without leaving Sanity Studio.\n\n- **Live SEO Score** — Real-time scoring (0-100) with detailed breakdown of what's missing or needs improvement\n- **GEO Checklist** — Validates content structure for Google's AI Overview eligibility\n- **Meta Tags Preview** — See exactly how your page appears in Google search results\n- **Social Preview Cards** — X, Facebook, LinkedIn, and WhatsApp preview rendering\n- **Readability Score** — Flesch-Kincaid grade level analysis with color-coded feedback\n- **Robots Meta Control** — Set noindex, nofollow, noarchive, and nosnippet flags\n- **hreflang / Multi-language** — Target alternate versions for different locales\n- **Additional Meta Tags** — Add custom meta tags for any use case\n- **Frontend Integration Guides** — Ready-to-use code for Next.js, Astro, Vue, and Nuxt\n\n## TypeScript Types\n\n```\ninterface SeoData {\n  metaTitle?: string;\n  metaDescription?: string;\n  focusKeyword?: string;\n  seoKeywords?: string[];\n  nofollowAttributes?: boolean;\n  robotsMeta?: string[];\n  metaImage?: { asset: { url: string } };\n  openGraph?: {\n    title?: string;\n    description?: string;\n    siteName?: string;\n    image?: { asset: { url: string } };\n  };\n  twitter?: {\n    cardType?: string;\n    site?: string;\n    creator?: string;\n    handle?: string;\n  };\n  hreflang?: { locale: string; url: string }[];\n  schemaOrg?: {\n    schemaType?: string;\n    name?: string;\n    description?: string;\n    url?: string;\n    author?: string;\n    datePublished?: string;\n    dateModified?: string;\n    price?: string;\n    priceCurrency?: string;\n    availability?: string;\n    ratingValue?: string;\n    ratingCount?: string;\n    startDate?: string;\n    endDate?: string;\n    location?: string;\n    faqItems?: { question: string; answer: string }[];\n  };\n  seoStatus?: \"draft\" | \"review\" | \"approved\";\n  seoReviewNotes?: string;\n}\n```\n\n## Support & Community\n\n- **Bug Reports:** [GitHub Issues](https://github.com/bhargav-bkpatel/sanity-plugin-seo/issues)\n- **NPM Package:** [sanity-plugin-seo](https://www.npmjs.com/package/sanity-plugin-seo)\n\n## Creator\n\nBuilt by [Bhargav Patel](https://bkpatel.com/)\n\n## License\n\nMIT — Free and AI features are open source. Pro coming soon.\n","readmeFilename":"README.md"}