<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sal Talash</title>
    <description>The latest articles on DEV Community by Sal Talash (@saltalash).</description>
    <link>https://dev.to/saltalash</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4153832%2F71d8c793-561f-428c-a52c-78558c1e98a0.png</url>
      <title>DEV Community: Sal Talash</title>
      <link>https://dev.to/saltalash</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saltalash"/>
    <language>en</language>
    <item>
      <title>Sal Talash: LocalBusiness structured data, done right: the JSON-LD Google reads, and the rules that quietly disqualify it</title>
      <dc:creator>Sal Talash</dc:creator>
      <pubDate>Thu, 01 Oct 2026 19:02:04 +0000</pubDate>
      <link>https://dev.to/saltalash/sal-talash-localbusiness-structured-data-done-right-the-json-ld-google-reads-and-the-rules-that-5e3o</link>
      <guid>https://dev.to/saltalash/sal-talash-localbusiness-structured-data-done-right-the-json-ld-google-reads-and-the-rules-that-5e3o</guid>
      <description>&lt;h1&gt;
  
  
  LocalBusiness structured data, done right
&lt;/h1&gt;

&lt;p&gt;Local business sites tend to have one of two problems with structured data. Either they have none at all, or they have a block of JSON-LD a plugin generated years ago that now contradicts the page: old hours, a moved address, and a five-star rating sourced from nowhere.&lt;/p&gt;

&lt;p&gt;I build &lt;a href="https://www.uova.com" rel="noopener noreferrer"&gt;UOVA&lt;/a&gt;, an AI website builder, where structured data is generated from the same content as the visible page, so I spend a lot of time in Google's documentation on this. Disclosure: that gives me a stake in the website-builder market. What follows is that documentation boiled down to what a developer needs, as I read it on October 1, 2026.&lt;/p&gt;

&lt;h2&gt;
  
  
  What LocalBusiness is
&lt;/h2&gt;

&lt;p&gt;Schema.org defines &lt;code&gt;LocalBusiness&lt;/code&gt; as "a particular physical business or branch of an organization." It inherits from both &lt;code&gt;Organization&lt;/code&gt; and &lt;code&gt;Place&lt;/code&gt;, and has many subtypes, including &lt;code&gt;FoodEstablishment&lt;/code&gt;, &lt;code&gt;HomeAndConstructionBusiness&lt;/code&gt;, &lt;code&gt;HealthAndBeautyBusiness&lt;/code&gt;, &lt;code&gt;ProfessionalService&lt;/code&gt;, &lt;code&gt;Store&lt;/code&gt;, &lt;code&gt;Dentist&lt;/code&gt; and &lt;code&gt;AutomotiveBusiness&lt;/code&gt;, with deeper subtypes beneath several of those.&lt;/p&gt;

&lt;p&gt;Google's guidance: "Use the most specific &lt;code&gt;LocalBusiness&lt;/code&gt; sub-type possible." If more than one applies, use an array of types. Google also notes that "&lt;code&gt;additionalType&lt;/code&gt; isn't supported."&lt;/p&gt;

&lt;h2&gt;
  
  
  The required and recommended properties
&lt;/h2&gt;

&lt;p&gt;Google's LocalBusiness documentation requires exactly two properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;name&lt;/code&gt;: "The name of the business."&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;address&lt;/code&gt;: a &lt;code&gt;PostalAddress&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It recommends: &lt;code&gt;aggregateRating&lt;/code&gt;, &lt;code&gt;department&lt;/code&gt;, &lt;code&gt;geo&lt;/code&gt;, &lt;code&gt;menu&lt;/code&gt;, &lt;code&gt;openingHoursSpecification&lt;/code&gt;, &lt;code&gt;priceRange&lt;/code&gt;, &lt;code&gt;review&lt;/code&gt;, &lt;code&gt;servesCuisine&lt;/code&gt;, &lt;code&gt;telephone&lt;/code&gt; and &lt;code&gt;url&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The details on a few of these are easy to miss:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;geo&lt;/code&gt;&lt;/strong&gt;: for latitude and longitude, "the precision must be at least 5 decimal places."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;priceRange&lt;/code&gt;&lt;/strong&gt;: "This field must be shorter than 100 characters."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;telephone&lt;/code&gt;&lt;/strong&gt;: include the country and area code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;url&lt;/code&gt;&lt;/strong&gt;: "The URL must be a working link."&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A complete example
&lt;/h2&gt;

&lt;p&gt;Here is markup for a fictional bakery. The business, address and phone number are invented for illustration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"application/ld+json"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@context&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://schema.org&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bakery&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Example Street Bakery&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.example-bakery.ca/&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;telephone&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;+1-416-555-0100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;priceRange&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://www.example-bakery.ca/images/storefront.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;address&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PostalAddress&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;streetAddress&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;123 Example Street&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;addressLocality&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Toronto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;addressRegion&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ON&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;postalCode&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;M4M 0A0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;addressCountry&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CA&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;geo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;GeoCoordinates&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;latitude&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;43.66123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;longitude&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;79.33456&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;openingHoursSpecification&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OpeningHoursSpecification&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dayOfWeek&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Tuesday&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Wednesday&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Thursday&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Friday&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;opens&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;08:00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;closes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;18:00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OpeningHoursSpecification&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dayOfWeek&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Saturday&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sunday&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;opens&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;09:00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;closes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;15:00&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Bakery&lt;/code&gt; is a subtype of &lt;code&gt;FoodEstablishment&lt;/code&gt;, which is more specific than &lt;code&gt;LocalBusiness&lt;/code&gt;. The coordinates carry five decimal places. Monday is omitted because the fictional shop is closed that day.&lt;/p&gt;

&lt;p&gt;Google lists JSON-LD as its recommended format, and it keeps the markup separate from your HTML, which makes it easy to generate from the same data as the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  The rules that disqualify markup
&lt;/h2&gt;

&lt;p&gt;Correct syntax is not enough. Google's general structured data guidelines contain the rules that quietly make markup ineligible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It must match the page.&lt;/strong&gt; "Your structured data must be a true representation of the page content." And: "Don't mark up content that is not visible to readers of the page." If your JSON-LD says you open at 8:00 and your page says 9:00, fix one of them. The easiest way to keep them in sync is to render both from a single source of data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Required means required.&lt;/strong&gt; "Items that are missing required properties are not eligible for rich results."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nothing is guaranteed.&lt;/strong&gt; "Google does not guarantee that your structured data will show up in search results," even when it is valid.&lt;/p&gt;

&lt;h2&gt;
  
  
  The review rule that catches most small businesses
&lt;/h2&gt;

&lt;p&gt;This is the rule most likely to catch a small-business site. A common pattern is adding &lt;code&gt;aggregateRating&lt;/code&gt; to a business's own &lt;code&gt;LocalBusiness&lt;/code&gt; markup, often from a reviews widget.&lt;/p&gt;

&lt;p&gt;Google's review snippet documentation says that when "the entity that's being reviewed controls the reviews about itself," pages using &lt;code&gt;LocalBusiness&lt;/code&gt; or other &lt;code&gt;Organization&lt;/code&gt; markup "are ineligible for star review feature." That applies whether the reviews are typed into the structured data or added "through an embedded third-party widget (for example, Google Business reviews or Facebook reviews widget)." It also says: "Don't aggregate reviews or ratings from other websites."&lt;/p&gt;

&lt;p&gt;The LocalBusiness page makes the same point from the other side: &lt;code&gt;aggregateRating&lt;/code&gt; "is only recommended for sites that capture reviews about other local businesses." That means directories and review sites, not a business marking up its own stars.&lt;/p&gt;

&lt;p&gt;So for your own business: leave &lt;code&gt;aggregateRating&lt;/code&gt; and &lt;code&gt;review&lt;/code&gt; out of your &lt;code&gt;LocalBusiness&lt;/code&gt; markup. Show testimonials on the page for humans, if you like. Just do not mark them up for stars.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test it
&lt;/h2&gt;

&lt;p&gt;Two free tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google's &lt;strong&gt;Rich Results Test&lt;/strong&gt;, which tests "your publicly accessible page to see which rich results can be generated by the structured data it contains." Google's LocalBusiness page says: "Validate your code using the Rich Results Test and fix any critical errors."&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;Schema Markup Validator&lt;/strong&gt; at validator.schema.org, which checks your markup against the schema.org vocabulary in general, not just the parts Google uses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Run both after every change to hours, address or phone number, not just at launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  A short checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Most specific subtype used; no &lt;code&gt;additionalType&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;name&lt;/code&gt; and &lt;code&gt;address&lt;/code&gt; present.&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;geo&lt;/code&gt; to at least five decimal places.&lt;/li&gt;
&lt;li&gt;[ ] &lt;code&gt;telephone&lt;/code&gt; with country and area code; &lt;code&gt;url&lt;/code&gt; resolves.&lt;/li&gt;
&lt;li&gt;[ ] Hours in markup match hours on the page.&lt;/li&gt;
&lt;li&gt;[ ] No &lt;code&gt;aggregateRating&lt;/code&gt; or &lt;code&gt;review&lt;/code&gt; on your own business.&lt;/li&gt;
&lt;li&gt;[ ] Rich Results Test passes with no critical errors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Structured data is one of the few SEO tasks with a clear specification and a free test. The hard part is keeping it true over time. I'm Sal Talash, and I write about the engineering behind small-business websites at &lt;a href="https://saltalash.vercel.app" rel="noopener noreferrer"&gt;saltalash.vercel.app&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Google Search Central, "Local Business (LocalBusiness) structured data"&lt;/li&gt;
&lt;li&gt;Google Search Central, "General structured data guidelines"&lt;/li&gt;
&lt;li&gt;Google Search Central, "Review snippet structured data"&lt;/li&gt;
&lt;li&gt;Google, Rich Results Test&lt;/li&gt;
&lt;li&gt;Schema.org, "LocalBusiness" and "Bakery"&lt;/li&gt;
&lt;li&gt;Schema Markup Validator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Drafted with AI assistance.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;More from Sal Talash: &lt;a href="https://saltalash.vercel.app/" rel="noopener noreferrer"&gt;saltalash.vercel.app&lt;/a&gt; · &lt;a href="https://www.uova.com" rel="noopener noreferrer"&gt;UOVA&lt;/a&gt; · &lt;a href="https://www.youtube.com/@saltalash" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdevseojstructureddatasonld</category>
    </item>
  </channel>
</rss>
