{"id":641,"date":"2021-11-16T19:35:26","date_gmt":"2021-11-16T19:35:26","guid":{"rendered":"https:\/\/organicdigital.co\/blog\/?p=641"},"modified":"2026-05-17T09:09:25","modified_gmt":"2026-05-17T08:09:25","slug":"how-to-do-local-seo-for-multiple-stores-using-localbusiness-schema-and-google-tag-manager","status":"publish","type":"post","link":"https:\/\/daveashworth.co\/blog\/how-to-do-local-seo-for-multiple-stores-using-localbusiness-schema-and-google-tag-manager\/","title":{"rendered":"How To:  Do Local SEO for Multiple Stores Using LocalBusiness Schema and Google Tag Manager"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/daveashworth.co\/blog\/how-to-do-local-seo-for-multiple-stores-using-localbusiness-schema-and-google-tag-manager\/#The_Story_Behind_This_Case_Study\" >The Story Behind This Case Study<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/daveashworth.co\/blog\/how-to-do-local-seo-for-multiple-stores-using-localbusiness-schema-and-google-tag-manager\/#Managing_Multiple_Google_Business_Listings\" >Managing Multiple Google Business Listings<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/daveashworth.co\/blog\/how-to-do-local-seo-for-multiple-stores-using-localbusiness-schema-and-google-tag-manager\/#Create_A_Master_Spreadsheet_with_All_Store_Data\" >Create A Master Spreadsheet with All Store Data<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/daveashworth.co\/blog\/how-to-do-local-seo-for-multiple-stores-using-localbusiness-schema-and-google-tag-manager\/#Set_Up_A_Custom_Variable_To_Identify_The_Store_Page\" >Set Up A Custom Variable To Identify The Store Page<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/daveashworth.co\/blog\/how-to-do-local-seo-for-multiple-stores-using-localbusiness-schema-and-google-tag-manager\/#Import_Store_Data_Into_Google_Tag_Manager_via_Look_Up_Tables\" >Import Store Data Into Google Tag Manager via Look Up Tables<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/daveashworth.co\/blog\/how-to-do-local-seo-for-multiple-stores-using-localbusiness-schema-and-google-tag-manager\/#Create_A_LocalBusiness_Schema_Template\" >Create A LocalBusiness Schema Template<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/daveashworth.co\/blog\/how-to-do-local-seo-for-multiple-stores-using-localbusiness-schema-and-google-tag-manager\/#So_What_Happens_Next\" >So What Happens Next?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/daveashworth.co\/blog\/how-to-do-local-seo-for-multiple-stores-using-localbusiness-schema-and-google-tag-manager\/#In_Summary\" >In Summary<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Story_Behind_This_Case_Study\"><\/span>The Story Behind This Case Study<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Following a <a href=\"https:\/\/daveashworth.co\/services-and-consultancy\/website-migrations-consultant\/\">migration<\/a> and site launch 12 months ago, I have been working with the country store chain <a href=\"https:\/\/www.moleonline.com\/\" target=\"_blank\" rel=\"noopener\">Mole Valley Farmers<\/a> to <a href=\"https:\/\/daveashworth.co\/services-and-consultancy\/\">enhance their organic visibility<\/a> and drive more relevant traffic to the site.\u00a0\u00a0 In this time I&#8217;ve carried out various optimisations including site speed, core web vitals, category page optimisation and <a href=\"https:\/\/daveashworth.co\/blog\/how-to-do-dynamic-product-meta-data-in-magento-using-gtm\/\">dynamic product page optimisation<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As well as an online presence, <a href=\"https:\/\/www.moleonline.com\/storelocator\" target=\"_blank\" rel=\"noopener\">Mole Valley Farmers have over 50 country stores nationwide<\/a> so optimising <a href=\"https:\/\/daveashworth.co\/blog\/full-list-of-all-google-my-business-gmb-profile-categories\/\">Google Business Listings <\/a>and individual store pages is a must for local search, in particular a wide range of \u201cnear me\u201d searches.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, optimising 50+ individual business listings and pages is going to be quite time consuming if we were to do this on a store by store basis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So, I donned my <a href=\"https:\/\/daveashworth.co\/skills\/local-seo-consultant\/\">Local SEO Consultant<\/a> cap and we took to the following steps:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Managing_Multiple_Google_Business_Listings\"><\/span>Managing Multiple Google Business Listings<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fortunately for me, the client already uses <a href=\"https:\/\/uberall.com\/en-gb\" target=\"_blank\" rel=\"noopener\">UberAll<\/a>, a tool which allows you to manage business listings in bulk across a number of local listing platforms including Google Business Listings.\u00a0 It also allows you to easily import and export store data which is key to what we want to achieve.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In terms of <a href=\"https:\/\/daveashworth.co\/skills\/local-seo-consultant\/\">Local SEO<\/a> and business listings, I tend to follow the following steps (beyond entering standard business info) when optimsing a listing:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>A) Implement a non spammy brand name for your store.&nbsp; <\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avoid keyword stuffing.\u00a0 For a site with multiple stores such as this, I\u2019d go with:<br><br><em>Brand Name<\/em> \u2013 <em>location<br><\/em><br>e.g.<br><br>Mole Country Stores &#8211; Alnwick<br><br>B)<strong>Amend the page URLs to include the following UTM parameters:<\/strong><br><br>?<em>utm_source=googlemaps&amp;utm_medium=organic<\/em><br><br>e.g.<br><br><a href=\"https:\/\/www.moleonline.com\/storelocator\/index\/store\/0\/alnwick\/?utm_source=googlemaps&amp;utm_medium=organic\" target=\"_blank\" rel=\"noopener\">https:\/\/www.moleonline.com\/storelocator\/index\/store\/0\/alnwick\/?utm_source=googlemaps&amp;utm_medium=organic<\/a><br><br>this then allows you to <a href=\"https:\/\/daveashworth.co\/blog\/how-to-track-google-business-profile-listing-traffic\/\">track how much traffic you get via organic map listings<\/a> in search:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"288\" height=\"455\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/source_medium.png\" alt=\"source \/ medium\" class=\"wp-image-642\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/source_medium.png 288w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/source_medium-190x300.png 190w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/source_medium-95x150.png 95w\" sizes=\"(max-width: 288px) 100vw, 288px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Create_A_Master_Spreadsheet_with_All_Store_Data\"><\/span>Create A Master Spreadsheet with All Store Data<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once you have exported\/compiled your multiple store data you can put this into a spreadsheet which contains the following data used to optimise listings:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ID \/ name (basically, the store location)<\/li>\n\n\n\n<li>Website URL<\/li>\n\n\n\n<li>Google Map Listing URL<\/li>\n\n\n\n<li>Business Listing Name<\/li>\n\n\n\n<li>Website Address<\/li>\n\n\n\n<li>City<\/li>\n\n\n\n<li>County<\/li>\n\n\n\n<li>Postcode<\/li>\n\n\n\n<li>Country<\/li>\n\n\n\n<li>Phone Number<\/li>\n\n\n\n<li>Email<\/li>\n\n\n\n<li>Latitude<\/li>\n\n\n\n<li>Longitude<\/li>\n\n\n\n<li>Opening hours\n<ul class=\"wp-block-list\">\n<li>This is split across two columns for each day to show the opening and closing time<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">You should then end up with a file that looks something like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"985\" height=\"384\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/spreadsheet_data.jpg\" alt=\"spreadsheet data\" class=\"wp-image-643\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/spreadsheet_data.jpg 985w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/spreadsheet_data-300x117.jpg 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/spreadsheet_data-150x58.jpg 150w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/spreadsheet_data-768x299.jpg 768w\" sizes=\"(max-width: 985px) 100vw, 985px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Before we import this data, we need to be able to identify each store in <a href=\"https:\/\/daveashworth.co\/skills\/google-tag-manager-consultant\/\">Google Tag Manager<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Set_Up_A_Custom_Variable_To_Identify_The_Store_Page\"><\/span><strong>Set Up A Custom Variable To Identify The Store Page<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">First of all, we need a way to identify each store page individually, for that, we will use the H1 tag.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Using the inspector tool, we can get the CSS Selector path:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"602\" height=\"462\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/css_selector.png\" alt=\"CSS Selector\" class=\"wp-image-644\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/css_selector.png 602w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/css_selector-300x230.png 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/css_selector-150x115.png 150w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Which we then use to create a custom variable called \u201cH1 store name\u201d which is of the variable type \u201cDOM Element\u201d and Selection Method is \u201cCSS Selector\u201d as follows:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"518\" height=\"371\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/custom_variable.png\" alt=\"custom variable\" class=\"wp-image-645\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/custom_variable.png 518w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/custom_variable-300x215.png 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/custom_variable-150x107.png 150w\" sizes=\"(max-width: 518px) 100vw, 518px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Then, as you navigate each store page you can see the variable populate within Google Tag Assistant:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"602\" height=\"269\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/tag_assistant.png\" alt=\"Google Tag Assistant\n\" class=\"wp-image-646\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/tag_assistant.png 602w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/tag_assistant-300x134.png 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/tag_assistant-150x67.png 150w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now we know what store we are on, we can use this to pull in the relevant store data:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Import_Store_Data_Into_Google_Tag_Manager_via_Look_Up_Tables\"><\/span><strong>Import Store Data Into Google Tag Manager via Look Up Tables<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In simplistic terms, Look Up tables are a mini database which we can use to associate data with a specific input \u2013 in this case, the location name.&nbsp;&nbsp; For every column in the spreadsheet, we can associate the <em>location name with the website URL, city, postcode, map listing URL etc.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once populated, they will look like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"602\" height=\"487\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/lookup_table.png\" alt=\"look up table\" class=\"wp-image-647\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/lookup_table.png 602w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/lookup_table-300x243.png 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/lookup_table-150x121.png 150w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Note: the input variable is the name of the custom variable we set previously:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{{H1 Store Name}}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So when \u201cAlnwick\u201d is passed in, the variable {{Store \u2013 URL}} is set to output accordingly<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Again though, creating look up tables for 50 stores each with 28 unique properties is a real pain in the arse if you were to do it manually.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But you don\u2019t need to.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you don\u2019t know already <a href=\"https:\/\/twitter.com\/SimoAhava\" target=\"_blank\" rel=\"noopener\">Simo Ahava<\/a> is the Godfather of all things tag manager, so it should come as no surprise that he\u2019s come up with a relatively quick and easy way to create large look up tables.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.simoahava.com\/analytics\/lookup-table-generator-google-tag-manager\/\" target=\"_blank\" rel=\"noopener\">Follow this link to find out how to do it<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When you\u2019ve got to grips with that, you will find yourself using Google Sheets as follows to create and populate your tables:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"944\" height=\"439\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/populated_variables.jpg\" alt=\"populated table\" class=\"wp-image-652\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/populated_variables.jpg 944w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/populated_variables-300x140.jpg 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/populated_variables-150x70.jpg 150w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/populated_variables-768x357.jpg 768w\" sizes=\"(max-width: 944px) 100vw, 944px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Once you\u2019ve done that for each property \/ column in the spreadsheet, you have a data set contained within look up tables we can use to populate a <a href=\"https:\/\/daveashworth.co\/blog\/how-to-implement-localbusiness-schema-markup-and-why\/\">localBusiness schema<\/a> template:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"602\" height=\"380\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/user_defined_variables.png\" alt=\"user defined variables\" class=\"wp-image-649\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/user_defined_variables.png 602w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/user_defined_variables-300x189.png 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/user_defined_variables-150x95.png 150w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Then when you navigate to a store page, you will see the variables are populated according to the location variable set by the H1 tag:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"602\" height=\"521\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/populated_variables.png\" alt=\"Populated variables\" class=\"wp-image-650\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/populated_variables.png 602w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/populated_variables-300x260.png 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/populated_variables-150x130.png 150w\" sizes=\"(max-width: 602px) 100vw, 602px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Create_A_LocalBusiness_Schema_Template\"><\/span><strong>Create A LocalBusiness Schema Template<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You can find out more about <a href=\"https:\/\/jsonld.com\/local-business\/\" target=\"_blank\" rel=\"noopener\">LocalBusiness Schema via JSON and what properties to use here<\/a> but here is a copy of the template I\u2019ll be using:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;script type=\"application\/ld+json\"&gt;\n{\n\t\"@context\" : \"http:\/\/schema.org\",\n\t\"@type\" : \"LocalBusiness\",\n\t\"name\" : \"{{Store - Name}}\",\n\t\"url\" : \"{{Store - URL}}\",\n\t\"logo\": \"https:\/\/moleonline.com\/media\/wysiwyg\/mole_valley_logo.png\",\n\t\"image\": \"https:\/\/lh5.googleusercontent.com\/p\/AF1QipNg3sC47D2PVbLuFqJysbvyG5P21U2ccR2SiShT=w426-h240-k-no\",\n\t\"hasMap\": \"{{Store - hasMap}}\",\n\t\"telephone\": \"{{Store - Telephone}}\",\n    \t\"email\": \"{{Store - Email}}\",\n\t\"address\": \n\t{\n\t\t\"@type\": \"PostalAddress\",\n\t\t\"streetAddress\": \"{{Store - Street Address}}\",\n\t\t\"addressLocality\": \"{{Store - Locality}}\",\n\t\t\"addressRegion\": \"{{Store - Region}}\",\n\t\t\"postalCode\": \"{{Store - Postcode}}\",\n\t\t\"addressCountry\": \"UK\"\n\t},\n\t\"geo\": \n\t{\n\t\t\"@type\": \"GeoCoordinates\",\n\t\t\"latitude\": \"{{Store - Latitude}}\",\n\t\t\"longitude\": \"{{Store - Longitude}}\"\n\t}, \t\t\n\t\"openingHoursSpecification\": \n\t&#91;\n\t\t{\n\t\t\t\"@type\": \"OpeningHoursSpecification\",\n\t\t\t\"dayOfWeek\": \n\t\t\t&#91;\n\t\t\t\t\"Monday\"\n\t\t\t],\n\t\t\t\"opens\": \"{{Store - Mon Open}}\",\n\t\t\t\"closes\": \"{{Store - Mon Close}}\"\n\t\t},\n\t\t{\n\t\t\t\"@type\": \"OpeningHoursSpecification\",\n\t\t\t\"dayOfWeek\": \n\t\t\t&#91;\n\t\t\t\t\"Tuesday\"\n\t\t\t],\n\t\t\t\"opens\": \"{{Store - Tue Open}}\",\n\t\t\t\"closes\": \"{{Store - Tue Close}}\"\n\t\t},\n\t\t{\n\t\t\t\"@type\": \"OpeningHoursSpecification\",\n\t\t\t\"dayOfWeek\": \n\t\t\t&#91;\n\t\t\t\t\"Wednesday\"\n\t\t\t],\n\t\t\t\"opens\": \"{{Store - Wed Open}}\",\n\t\t\t\"closes\": \"{{Store - Wed Close}}\"\n\t\t},\n\t\t{\n\t\t\t\"@type\": \"OpeningHoursSpecification\",\n\t\t\t\"dayOfWeek\": \n\t\t\t&#91;\n\t\t\t\t\"Thursday\"\n\t\t\t],\n\t\t\t\"opens\": \"{{Store - Thu Open}}\",\n\t\t\t\"closes\": \"{{Store - Thu Close}}\"\n\t\t},\n\t\t{\n\t\t\t\"@type\": \"OpeningHoursSpecification\",\n\t\t\t\"dayOfWeek\": \n\t\t\t&#91;\n\t\t\t\t\"Friday\"\n\t\t\t],\n\t\t\t\"opens\": \"{{Store - Fri Open}}\",\n\t\t\t\"closes\": \"{{Store - Fri Close}}\"\n\t\t},\n\t\t{\n\t\t\t\"@type\": \"OpeningHoursSpecification\",\n\t\t\t\"dayOfWeek\": \n\t\t\t&#91;\n\t\t\t\t\"Saturday\"\n\t\t\t],\n\t\t\t\"opens\": \"{{Store - Sat Open}}\",\n\t\t\t\"closes\": \"{{Store - Sat Close}}\"\n\t\t},\n\t\t{\n\t\t\t\"@type\": \"OpeningHoursSpecification\",\n\t\t\t\"dayOfWeek\": \n\t\t\t&#91;\n\t\t\t\t\"Sunday\"\n\t\t\t],\n\t\t\t\"opens\": \"{{Store - Sun Open}}\",\n\t\t\t\"closes\": \"{{Store - Sun Close}}\"\n\t\t}\n\t],\n\t\"sameAs\" : \n\t&#91;\n\t\t\"https:\/\/www.facebook.com\/molevalleyfarmers\/\",\n\t\t\"https:\/\/twitter.com\/molevalley\",\n\t\t\"https:\/\/www.youtube.com\/channel\/UCMiUx9-x5oTJ2FlTpO_iB6Q\"\n\t]\n}\n&lt;\/script&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This uses the lookup table variables set above to populate the various properties.&nbsp; As the logo, image and social media profiles do not change, I have hard coded these values straight in, but you can use as many look up tables across as many properties as you like.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once you\u2019ve created your tag you need a trigger to fire when you are on a store page:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/localBusiness-1024x683.jpg\" alt=\"custom tag\" class=\"wp-image-653\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/localBusiness-1024x683.jpg 1024w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/localBusiness-300x200.jpg 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/localBusiness-150x100.jpg 150w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/localBusiness-768x512.jpg 768w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/localBusiness.jpg 1163w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You could use a variable that checks if the H1 Store Name variable is not null, but in this case I\u2019ve just gone with the URL path:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"678\" height=\"324\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/store_page.jpg\" alt=\"store page\n\" class=\"wp-image-654\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/store_page.jpg 678w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/store_page-300x143.jpg 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/store_page-150x72.jpg 150w\" sizes=\"(max-width: 678px) 100vw, 678px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">And when that fires, the custom schema template will be injected into the relevant page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can test all is well via the <a href=\"https:\/\/validator.schema.org\/\" target=\"_blank\" rel=\"noopener\">schema mark up validator<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"688\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/schema_markup_validator-1024x688.jpg\" alt=\"schema mark up validation\" class=\"wp-image-655\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/schema_markup_validator-1024x688.jpg 1024w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/schema_markup_validator-300x202.jpg 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/schema_markup_validator-150x101.jpg 150w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/schema_markup_validator-768x516.jpg 768w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/schema_markup_validator.jpg 1116w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"So_What_Happens_Next\"><\/span>So What Happens Next?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Well, after going to all this effort you\u2019d hope to see an increase in impressions and clicks to your optimised-for-local-search store pages.&nbsp; That\u2019s what happened to Mole Online anyway:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See if you can spot when this was all implemented:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"841\" height=\"389\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/traffic_spike.jpg\" alt=\"traffic spike\" class=\"wp-image-656\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/traffic_spike.jpg 841w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/traffic_spike-300x139.jpg 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/traffic_spike-150x69.jpg 150w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/traffic_spike-768x355.jpg 768w\" sizes=\"(max-width: 841px) 100vw, 841px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">If we compare before and after, we see a significant increase in numbers to store pages:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"832\" height=\"411\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/before_after_store.jpg\" alt=\"compare store pages\" class=\"wp-image-657\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/before_after_store.jpg 832w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/before_after_store-300x148.jpg 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/before_after_store-150x74.jpg 150w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/before_after_store-768x379.jpg 768w\" sizes=\"(max-width: 832px) 100vw, 832px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">As well as a better CTR for \u201cnear me\u201d queries:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"823\" height=\"412\" src=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/before_after_near.jpg\" alt=\"compare near me queries\" class=\"wp-image-658\" srcset=\"https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/before_after_near.jpg 823w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/before_after_near-300x150.jpg 300w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/before_after_near-150x75.jpg 150w, https:\/\/daveashworth.co\/blog\/wp-content\/uploads\/2021\/11\/before_after_near-768x384.jpg 768w\" sizes=\"(max-width: 823px) 100vw, 823px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I can\u2019t share GA data but trust me, actual organic traffic, transactions, conversion rate and revenue all went up to.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"In_Summary\"><\/span>In Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">LocalBusiness Schema is good for SEO when it comes to <a href=\"https:\/\/daveashworth.co\/skills\/local-seo-consultant\/\">local search<\/a> and near me phrases.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you have lots of stores, then use GTM to add schema across all pages using one custom tag and look up tables<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This leads to happy clients:<\/p>\n\n\n\n<!-- testimonial wrapper  -->\n\t\t\t\t\t\t<div class=\"testimonial-wrapper\">\n\t\t\t\t\t\t  <!-- left  -->\n\t\t\t\t\t\t  <div class=\"testimonial-left\">\n\t\t\t\t\t\t\t<p class=\"testimonial-content\">\n\t\t\t\t\t\t\t  Dave is an excellent person to deal with, he offered tremendous support during our recent website migration and his thorough and knowledgeable support meant that we quickly saw significant improvements in search rankings. His ongoing support and detailed reporting provide insight and guidance as we continue to make improvements to performance.\n\t\t\t\t\t\t\t<\/p>\n\t\t\t\t\t\t\t<!-- icon wrapper  -->\n\t\t\t\t\t\t\t<img decoding=\"async\" class=\"testimonial-icon\" src=\"https:\/\/daveashworth.co\/assets\/images\/arrow-top.svg\" alt=\"icon\" \/>\n\t\t\t\t\t\t\t<img decoding=\"async\" class=\"testimonial-icon is-bottom\" src=\"https:\/\/daveashworth.co\/assets\/images\/arrow-bottom.svg\" alt=\"icon\" \/>\n\t\t\t\t\t\t  <\/div>\n\t\t\t\t\t\t  <!-- left end -->\n\t\t\t\t\t\t  <!-- right  -->\n\t\t\t\t\t\t  <div class=\"testimonial-right\">\n\t\t\t\t\t\t\t<div class=\"testimonial-author-image-wrapper\">\n\t\t\t\t\t\t\t  <div class=\"testimonial-image\">\n\t\t\t\t\t\t\t\t<picture>\n\t\t\t\t\t\t\t\t  <source srcset=\"https:\/\/daveashworth.co\/assets\/images\/testimonials\/brian-mcardle.jpg.webp\" type=\"image\/webp\">\n\t\t\t\t\t\t\t\t  <img decoding=\"async\" class=\"w-full max-w-[8.75rem]\" src=\"https:\/\/daveashworth.co\/assets\/images\/testimonials\/brian-mcardle.jpg\" alt=\"Brian McArdle\" width=\"200\" height=\"200\">\n\t\t\t\t\t\t\t\t<\/picture>\n\t\t\t\t\t\t\t  <\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"testimonial-devider\"><\/div>\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t  <a href=\"https:\/\/www.linkedin.com\/in\/brian-mcardle-a2a03150\/\" target=\"_blank\" rel=\"noopener\">Brian McArdle<\/a><br \/>\n\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.moleonline.com\/\" target=\"_blank\" rel=\"noopener\">moleonline.com<\/a>\n\t\t\t\t\t\t\t<\/p>\n\t\t\t\t\t\t  <\/div>\n\t\t\t\t\t\t  <!-- right end -->\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<!-- testimonial wrapper end -->\n\n","protected":false},"excerpt":{"rendered":"<p>A case study to demonstrate how to implement LocalBusiness schema across many store pages using one custom HTML tag and a look up table.<\/p>\n","protected":false},"author":1,"featured_media":661,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,14,9],"tags":[],"class_list":["post-641","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tag-manager","category-local-seo","category-structured-data"],"_links":{"self":[{"href":"https:\/\/daveashworth.co\/blog\/wp-json\/wp\/v2\/posts\/641","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/daveashworth.co\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daveashworth.co\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daveashworth.co\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/daveashworth.co\/blog\/wp-json\/wp\/v2\/comments?post=641"}],"version-history":[{"count":3,"href":"https:\/\/daveashworth.co\/blog\/wp-json\/wp\/v2\/posts\/641\/revisions"}],"predecessor-version":[{"id":2123,"href":"https:\/\/daveashworth.co\/blog\/wp-json\/wp\/v2\/posts\/641\/revisions\/2123"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/daveashworth.co\/blog\/wp-json\/wp\/v2\/media\/661"}],"wp:attachment":[{"href":"https:\/\/daveashworth.co\/blog\/wp-json\/wp\/v2\/media?parent=641"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daveashworth.co\/blog\/wp-json\/wp\/v2\/categories?post=641"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daveashworth.co\/blog\/wp-json\/wp\/v2\/tags?post=641"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}