{"id":219256,"date":"2025-01-14T15:53:57","date_gmt":"2025-01-14T15:53:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/local-seo-by-ankit-rawat\/"},"modified":"2026-08-22T14:12:24","modified_gmt":"2026-08-22T14:12:24","slug":"local-seo-by-ankit-rawat","status":"publish","type":"plugin","link":"https:\/\/te.wordpress.org\/plugins\/local-seo-by-ankit-rawat\/","author":8919718,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"4.1.0","stable_tag":"4.1.0","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Local SEO By Ankit Rawat","header_author":"Ankit Rawat","header_description":"Adds Local Schema using JSON-LD with support for logo, images, and social media profiles.","assets_banners_color":"7abab3","last_updated":"2026-08-22 14:12:24","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/ankitrawat.com\/products\/local-seo-by-ankit-rawat\/","header_author_uri":"https:\/\/ankitrawat.com","rating":5,"author_block_rating":0,"active_installs":40,"downloads":1346,"num_ratings":3,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1":{"tag":"1.1","author":"ankitrawat","date":"2025-01-14 15:53:44"},"2.0":{"tag":"2.0","author":"ankitrawat","date":"2025-01-15 12:31:08"},"2.1":{"tag":"2.1","author":"ankitrawat","date":"2025-01-16 01:09:51"},"3.0":{"tag":"3.0","author":"ankitrawat","date":"2025-02-01 05:50:49"},"3.1":{"tag":"3.1","author":"ankitrawat","date":"2025-02-01 07:23:34"},"3.2":{"tag":"3.2","author":"ankitrawat","date":"2025-03-19 13:53:21"},"3.3":{"tag":"3.3","author":"ankitrawat","date":"2025-05-14 13:03:52"},"4.0":{"tag":"4.0","author":"ankitrawat","date":"2026-08-18 08:35:47"},"4.0.0":{"tag":"4.0.0","author":"ankitrawat","date":"2026-08-18 10:03:32"},"4.0.1":{"tag":"4.0.1","author":"ankitrawat","date":"2026-08-22 05:20:40"},"4.0.2":{"tag":"4.0.2","author":"ankitrawat","date":"2026-08-22 05:56:55"},"4.1.0":{"tag":"4.1.0","author":"ankitrawat","date":"2026-08-22 14:12:24"}},"upgrade_notice":{"4.1.0":"<p>Settings screen redesign with Schema Health score, Schema Preview, duplicate plugin detection, inline validation, and activation notice. No settings or schema changes.<\/p>","4.0.2":"<p>Fixed support button rendering on hosts with script optimization. No settings or schema changes.<\/p>","4.0.1":"<p>Maintenance release: verified WordPress 7.1 compatibility, updated official product page URL. No settings or schema changes.<\/p>","4.0.0":"<p>Major release: settings move into a namespaced option. Existing 3.3 values are copied automatically. Old generic options are not deleted. Google Business Profile claims in earlier readmes were never implemented and have been removed from the documentation.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":3},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3223299,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3223299,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500-rtl.png":{"filename":"banner-1544x500-rtl.png","revision":3223298,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3223298,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250-rtl.png":{"filename":"banner-772x250-rtl.png","revision":3223298,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3223298,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1","2.0","2.1","3.0","3.1","3.2","3.3","4.0","4.0.0","4.0.1","4.0.2","4.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3222812,"resolution":"1","location":"assets","locale":"","width":600,"height":805},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3222812,"resolution":"2","location":"assets","locale":"","width":1911,"height":1018},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3222812,"resolution":"3","location":"assets","locale":"","width":1202,"height":652}},"screenshots":{"1":"Settings screen for business details and schema toggle."}},"plugin_section":[],"plugin_tags":[37556,1122,1117,286],"plugin_category":[55],"plugin_contributors":[236932],"plugin_business_model":[],"class_list":["post-219256","plugin","type-plugin","status-publish","hentry","plugin_tags-local-business","plugin_tags-local-seo","plugin_tags-schema","plugin_tags-woocommerce","plugin_category-seo-and-marketing","plugin_contributors-ankitrawat","plugin_committers-ankitrawat"],"banners":{"banner":"https:\/\/ps.w.org\/local-seo-by-ankit-rawat\/assets\/banner-772x250.png?rev=3223298","banner_2x":"https:\/\/ps.w.org\/local-seo-by-ankit-rawat\/assets\/banner-1544x500.png?rev=3223298","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/local-seo-by-ankit-rawat\/assets\/icon-128x128.png?rev=3223299","icon_2x":"https:\/\/ps.w.org\/local-seo-by-ankit-rawat\/assets\/icon-256x256.png?rev=3223299","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/local-seo-by-ankit-rawat\/assets\/screenshot-1.png?rev=3222812","caption":"Settings screen for business details and schema toggle."},{"src":"https:\/\/ps.w.org\/local-seo-by-ankit-rawat\/assets\/screenshot-2.png?rev=3222812","caption":""},{"src":"https:\/\/ps.w.org\/local-seo-by-ankit-rawat\/assets\/screenshot-3.png?rev=3222812","caption":""}],"raw_content":"<!--section=description-->\n<p>Local SEO By Ankit Rawat adds JSON-LD structured data for a single business location. You enter name, address, phone, geo coordinates, logo, images, social profile URLs, and price range. When schema is enabled, those values are printed in the site <code>head<\/code> as <code>application\/ld+json<\/code>.<\/p>\n\n<p>For more information, visit the <a href=\"https:\/\/ankitrawat.com\/products\/local-seo-by-ankit-rawat\/\">official Local SEO By Ankit Rawat website<\/a>.<\/p>\n\n<p>This plugin does <strong>not<\/strong> connect to Google Business Profile, import reviews, manage opening hours, or change canonical URLs or robots directives.<\/p>\n\n<h4>What it does<\/h4>\n\n<ul>\n<li>Settings screen (capability: <code>manage_options<\/code>) for one business profile.<\/li>\n<li>Optional sitewide LocalBusiness-family JSON-LD for: LocalBusiness, Restaurant, Hotel, ProfessionalService, Store.<\/li>\n<li>Optional WooCommerce Product JSON-LD on product pages (any business type, when WooCommerce is active and the setting is on).<\/li>\n<li>When the type is Store and product schema is enabled, up to five published products are listed in a Schema.org <code>OfferCatalog<\/code> (<code>hasOfferCatalog<\/code> with <code>ListItem<\/code> entries) on the <strong>front page<\/strong>, the <strong>posts index (home)<\/strong>, and the <strong>WooCommerce shop<\/strong>. The catalog is not added on every URL.<\/li>\n<\/ul>\n\n<p>Developers can change catalog placement with the <code>local_seo_by_ankit_rawat_embed_store_catalog<\/code> filter. Version 3.3 attached an invalid <code>product<\/code> property on essentially every URL; 4.0.0 does not restore that structure.<\/p>\n\n<h4>What it does not do<\/h4>\n\n<ul>\n<li>Google Business Profile \/ Google My Business API synchronization.<\/li>\n<li>Review collection, aggregation, or review schema from manually entered ratings.<\/li>\n<li>Opening hours, menus, reservations, or hotel amenity schema.<\/li>\n<li>Multiple locations.<\/li>\n<li>Frontend widgets, shortcodes, or extra CSS\/JS on the public site.<\/li>\n<\/ul>\n\n<h4>Developer filters<\/h4>\n\n<p>See <code>docs\/ARCHITECTURE.md<\/code> for hook names. You can disable output if another SEO plugin already emits equivalent JSON-LD. Catalog placement is controlled with <code>local_seo_by_ankit_rawat_embed_store_catalog<\/code> (default: front page, home, and shop).<\/p>\n\n<h3>Upgrade From 3.3<\/h3>\n\n<ol>\n<li>Back up the database.<\/li>\n<li>Install 4.0.0 over 3.3 (same plugin folder).<\/li>\n<li>Activate or open wp-admin so migration can run.<\/li>\n<li>Confirm settings on the Local SEO screen.<\/li>\n<li>Do not expect Google Business Profile sync; it was never implemented.<\/li>\n<\/ol>\n\n<h3>Troubleshooting<\/h3>\n\n<ul>\n<li>Schema missing: confirm \u201cEnable schema\u201d is checked and you are viewing the public site, not wp-admin.<\/li>\n<li>Product schema missing: WooCommerce must be active, product schema enabled, and you must be on a product page. The setting is shown whenever WooCommerce is active, for any business type.<\/li>\n<li>Store catalog missing: business type must be Store, product schema enabled, published products must exist, and you must be on the front page, home, or shop (unless a filter changes placement).<\/li>\n<li>Stale 3.3 schema: the old <code>local_seo_json_ld_schema<\/code> transient is deleted during migration.<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin includes an optional \"support the developer\" link on its admin settings page. When clicked, it opens an external payment page hosted by <a href=\"https:\/\/razorpay.com\/\">Razorpay<\/a>.<\/p>\n\n<ul>\n<li>The link (<code>https:\/\/razorpay.me\/@hridyaa<\/code>) appears <strong>only<\/strong> on the plugin's own settings page, not on the public site.<\/li>\n<li><strong>No external scripts are loaded.<\/strong> The link is a standard HTML anchor; no JavaScript from Razorpay runs on your site.<\/li>\n<li>Payment processing is handled entirely by Razorpay. The plugin does not process, store, or transmit payment information.<\/li>\n<li>Supporting development is completely voluntary and does not affect plugin functionality.<\/li>\n<li>Razorpay's <a href=\"https:\/\/razorpay.com\/terms\/\">Terms of Service<\/a> and <a href=\"https:\/\/razorpay.com\/privacy\/\">Privacy Policy<\/a> apply to any payment made through the link.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>local-seo-by-ankit-rawat<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the Plugins screen.<\/li>\n<li>Open <strong>Local SEO By Ankit Rawat<\/strong> in the admin menu.<\/li>\n<li>Enter business details and enable schema only when the data is accurate.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20my%203.3%20settings%20be%20kept%3F\"><h3>Will my 3.3 settings be kept?<\/h3><\/dt>\n<dd><p>Yes. On first admin load or activation after upgrade, values are copied into <code>local_seo_by_ankit_rawat_options<\/code>. The old option keys remain in the database.<\/p><\/dd>\n<dt id=\"why%20is%20my%20google%20api%20key%20missing%20from%20the%20new%20screen%3F\"><h3>Why is my Google API key missing from the new screen?<\/h3><\/dt>\n<dd><p>Version 3.3 stored <code>google_my_business_api_key<\/code> but never used it. 4.0.0 does not copy that secret into the new option and does not display it. The old option is left in the database until you delete it yourself.<\/p><\/dd>\n<dt id=\"how%20do%20i%20test%20the%20schema%3F\"><h3>How do I test the schema?<\/h3><\/dt>\n<dd><p>Use <a href=\"https:\/\/search.google.com\/test\/rich-results\">Google\u2019s Rich Results Test<\/a> after enabling schema and filling in real NAP data.<\/p><\/dd>\n<dt id=\"does%20this%20slow%20the%20site%20down%3F\"><h3>Does this slow the site down?<\/h3><\/dt>\n<dd><p>There is no frontend CSS or JavaScript. Schema is built from one option (and, for Store catalogs, up to five WooCommerce product queries). Version 3.3\u2019s hour-long transient was removed because it served stale data after settings changes.<\/p><\/dd>\n<dt id=\"where%20does%20the%20store%20product%20catalog%20appear%3F\"><h3>Where does the Store product catalog appear?<\/h3><\/dt>\n<dd><p>By default only on the front page, the posts index (home), and the WooCommerce shop. Product pages already have Product JSON-LD and do not receive the catalog. To change that, use the <code>local_seo_by_ankit_rawat_embed_store_catalog<\/code> filter.<\/p><\/dd>\n<dt id=\"can%20this%20duplicate%20yoast%2C%20rank%20math%2C%20or%20woocommerce%20schema%3F\"><h3>Can this duplicate Yoast, Rank Math, or WooCommerce schema?<\/h3><\/dt>\n<dd><p>Yes. Use the <code>local_seo_by_ankit_rawat_output_local_schema<\/code> and <code>local_seo_by_ankit_rawat_output_product_schema<\/code> filters to turn off this plugin\u2019s output when another plugin already provides it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>4.1.0<\/h4>\n\n<ul>\n<li>Redesigned settings screen with business-owner-friendly labels and help text.<\/li>\n<li>Card-based settings interface grouped by Business Info, Location, Contact, and WooCommerce.<\/li>\n<li>WordPress Media Library picker and preview for the business logo field.<\/li>\n<li>Schema Health score: a deterministic 0\u201310 completeness indicator with actionable recommendations.<\/li>\n<li>Schema Preview card with inline JSON-LD viewer, Copy JSON button, and Google Rich Results Test link.<\/li>\n<li>Detection of potential duplicate structured data from Yoast SEO, Rank Math, and All in One SEO.<\/li>\n<li>Inline validation errors for logo URL, phone number, latitude, longitude, currency code, image URLs, and social profile URLs.<\/li>\n<li>Dismissible activation admin notice guiding new users to the settings page.<\/li>\n<\/ul>\n\n<h4>4.0.2<\/h4>\n\n<ul>\n<li>Fixed support button not rendering on hosts with JavaScript optimization (LiteSpeed Cache, etc.).<\/li>\n<li>Replaced external Razorpay script embed with a simple payment link \u2014 no external JavaScript loaded.<\/li>\n<\/ul>\n\n<h4>4.0.1<\/h4>\n\n<ul>\n<li>Verified WordPress 7.1 compatibility (no code changes required; Settings API, Options API, and wp_head output are unaffected by 7.1 changes).<\/li>\n<li>Added optional support\/donation button on the settings page (voluntary, powered by Razorpay).<\/li>\n<li>Updated official product page URL.<\/li>\n<li>Cleaned development artifacts from repository.<\/li>\n<\/ul>\n\n<h4>4.0.0<\/h4>\n\n<ul>\n<li>Namespaced settings option and 3.3 migration (legacy options are not deleted).<\/li>\n<li>JSON-LD encoding uses JSON_HEX_TAG to prevent script breakout.<\/li>\n<li>No placeholder NAP in public schema.<\/li>\n<li>Allowlisted business types.<\/li>\n<li>WooCommerce detection no longer uses <code>woocommerce_params<\/code>.<\/li>\n<li>Store products emitted as OfferCatalog with ListItem entries (limit 5, published only) on the front page, home, and shop by default.<\/li>\n<li>Documentation matches actual features.<\/li>\n<li>GPL license file, uninstall handler, tests, and coding-standard configs.<\/li>\n<\/ul>\n\n<h4>3.3<\/h4>\n\n<ul>\n<li>Compatibility fix.<\/li>\n<\/ul>\n\n<h4>3.2<\/h4>\n\n<ul>\n<li>WooCommerce product schema and modular file layout.<\/li>\n<\/ul>\n\n<h4>3.1<\/h4>\n\n<ul>\n<li>Sanitization and caching tweaks.<\/li>\n<\/ul>\n\n<h4>3.0<\/h4>\n\n<ul>\n<li>Geo fields and unused Google My Business settings fields.<\/li>\n<\/ul>","raw_excerpt":"Outputs LocalBusiness JSON-LD from a settings screen, with optional WooCommerce product structured data.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/219256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=219256"}],"author":[{"embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ankitrawat"}],"wp:attachment":[{"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=219256"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=219256"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=219256"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=219256"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=219256"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/te.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=219256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}