Local business SEO guide
Validate LocalBusiness Schema Against Your WordPress Location Page
Compare the name, address, phone, hours, and URL in your LocalBusiness markup with the visible location page, resolve conflicts, and validate it without expecting better map rankings.
On this page
To validate LocalBusiness schema, list the business facts a visitor can see on the location page (name, address, phone, hours, and the page URL), list the same facts from the page’s JSON-LD, and compare them line by line. Fix disagreements at the source, then run a validator. Valid markup describes the location to search engines; it does not verify your Business Profile, and a passing validator result is not evidence of better map rankings.
Know what LocalBusiness markup is for
Google’s LocalBusiness structured data documentation, checked September 27, 2026, requires two properties, name and address (“the physical location of the business. Include as many properties as possible”), and recommends others:
| Property | Google’s description, in short |
|---|---|
geo |
Latitude and longitude, with at least five decimal places |
openingHoursSpecification |
“Hours during which the business location is open” |
telephone |
“A business phone number meant to be the primary contact method for customers” |
url |
“The fully-qualified URL of the specific business location” |
priceRange |
A price indication, shorter than 100 characters |
department |
A nested item for a single department |
Two limits from Google’s pages shape what you should publish:
- Reviews. Google says
aggregateRatingandreviewon LocalBusiness are “only recommended for sites that capture reviews about other local businesses.” A business marking up ratings of itself falls outside that. - Visible content. Google’s structured data guidelines, checked the same day, say: “Don’t mark up content that is not visible to readers of the page,” and that correct markup does not guarantee a rich result.
Business Profile verification is a separate process in Google Business Profile (Google’s verification help, checked September 27, 2026). Google’s local ranking help, checked the same day, explains local ranking in terms of relevance, distance, and prominence; the local business check covers that guidance and how to keep facts consistent across listings.
Inventory visible and structured business facts
Work on one location page at a time.
- Capture the visible facts. Open the page logged out and write down the business name, street address, phone number, opening hours (including any seasonal or holiday note), and the page’s own URL. Take a screenshot with the date.
- Capture the structured facts. Fetch the server HTML and find every
application/ld+jsonblock:
curl -s https://example.com/locations/riverside/ -o location.html
grep -o 'application/ld+json' location.html | wc -l
The URL is illustrative. Copy each block into a formatter and find the nodes with a LocalBusiness type or a subtype such as Store or HomeAndConstructionBusiness.
- Capture the external facts. Write down the same fields from your Google Business Profile for this location.
Then build the comparison:
| Fact | Visible page | JSON-LD | Business Profile |
|---|---|---|---|
| Name | name |
||
| Street address | address.streetAddress |
||
| Town and postal code | address.addressLocality, address.postalCode |
||
| Phone | telephone |
||
| Hours, weekdays | openingHoursSpecification |
||
| Hours, weekends and holidays | openingHoursSpecification |
||
| Location URL | The page address | url |
Website field |
Mark each row as a match, a mismatch, or “in markup only.” Anything in markup only is either missing from the page or should not be in the markup.
Resolve conflicting identities and hours
Common conflicts and how to settle them:
Two business nodes. A theme, a page builder, a local SEO plugin, and your SEO plugin can each print a business node. Identify each emitter (deactivate suspects on a staging copy and recapture) and keep one source per fact.
Name variations. The markup says “Garden Example LLC,” the page says “Garden Example Riverside,” the profile says “Garden Example.” Google’s Business Profile guidelines, checked September 27, 2026, ask you to represent the business “as it’s consistently represented and recognized in the real world across signage, stationery, and other branding,” and say that including unnecessary information in the name “isn’t permitted.” Use the real trading name, consistently.
A central number instead of the location’s. The same guidelines prefer “a local phone number instead of a central call center helpline number whenever possible.” If the page shows the branch number, the markup should too.
Hours out of date. Markup is often written once and forgotten. The profile guidelines ask for “regular customer-facing hours of operation.” When hours change, update the page, the markup, and the profile together. Google’s LocalBusiness documentation includes examples for hours past midnight, all-day opening, and seasonal closures; use those patterns rather than inventing your own.
A service-area business with no public address. Google’s profile guidelines say that “if you’re a service-area business, you should hide your business address from customers.” LocalBusiness markup requires an address. If the address is private, do not publish it in markup the page does not show. Describe the service area on the page instead; the service page guide covers that.
The wrong URL. On a multi-location site, each location’s url should be that location’s page, not the home page.
Add or correct the markup in WordPress
Know which tool produces the business node before you edit anything.
WP Visibility 2.10.3 does not generate LocalBusiness markup. Its site identity is an Organization or a Person, set as described in organization or person schema, and it has no address or hours fields. If you use WP Visibility and want a LocalBusiness node on a location page, the block editor’s WP Visibility sidebar has a Structured data panel with an Advanced field. JSON-LD entered there is added to that page’s schema graph. The plugin checks only that the text is a valid JSON object or array, and it skips any node without an @type, so a block wrapped in @graph prints nothing; it does not check the facts, the properties, or Google’s requirements.
An illustrative node for a fictional location, using example.com:
{
"@type": "Store",
"@id": "https://example.com/locations/riverside/#localbusiness",
"name": "Garden Example",
"url": "https://example.com/locations/riverside/",
"telephone": "+1-951-555-0100",
"address": {
"@type": "PostalAddress",
"streetAddress": "12 River Road",
"addressLocality": "Riverside",
"addressRegion": "CA",
"postalCode": "90000",
"addressCountry": "US"
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
"opens": "08:00",
"closes": "17:00"
}
],
"parentOrganization": { "@id": "https://example.com/#organization" }
}
Every value is invented. The parentOrganization reference links the location to the site’s organization node by its @id, which WP Visibility publishes as https://your-site.com/#organization in organization mode. Choose the most specific type from schema.org that honestly describes the location.
If a different plugin already prints a business node, correct it in that plugin rather than adding a second one.
Validate the graph and document its owner
- Paste the page URL into Google’s Rich Results Test and note what it detects, plus errors and warnings.
- Paste it into the Schema Markup Validator to find syntax mistakes and see a summary of the extracted graph (schema.org’s description of the tool, checked September 27, 2026).
- Repeat your comparison table using the tested page, not your draft.
- Record the result: date, URL, the plugin or field that prints the business node, the comparison, and validator output.
A passing Rich Results Test tells you Google can read the markup and found the required properties. It does not tell you the hours are right. Only the comparison does that.
Set a reminder to recheck when hours change, when you move, when you add a location, and after theme or plugin updates.
Checklist
- Visible facts, markup facts, and profile facts compared for each location.
- One business node per location, with its emitter identified.
- Name, phone, and hours consistent with the page and the profile.
- No self-assigned ratings, and no address the page does not show.
urlpoints to the specific location page.- Rich Results Test and Schema Markup Validator results recorded.
