A calm, one-dog-at-a-time grooming shop. See the next openings right here, pick a time, and we'll confirm it the same day.
demo-grooming. The booking page only offers times the owner's calendar has free, and the request lands on the owner's dashboard for a yes. Nothing on this page is a mockup.
Four pieces of BizPinPro software sit behind this one-page site. Every one of them is live here, with the owner's side open to you.
The groomer's side of the booking page. Log in and you are the owner.
demo Password bella-barkOnce a month the owner gets one link, no login, with a plain-language read of the month.
The linked report is filled with sample numbers and says so at the top. A client's report pulls from their own accounts.
Every BizPinPro site's form sends through one relay that checks the message before it reaches the inbox.
Strangers can book, approve and edit here, so the demo looks after itself.
If the dashboard looks odd when you visit, someone else got here first. Come back after the reset.
Prices start at the number shown and depend on size and coat.
Warm bath, conditioner, blow dry and a thorough brush-out. Ears cleaned, nails checked.
Everything in the bath, plus a haircut in the style you want.
Trimmed and filed smooth. Walk-in friendly when the table is free.
Dog-safe paste, gentle brushing, fresher breath.
Special shampoo, high-velocity dry and a long undercoat rake.
A contact form on the open web gets hit by bots within days. Here is every layer a message passes through on a live BizPinPro site before the owner sees it.
Call or text: (540) 555-0148
Serving: the New River Valley
The section above opened the owner's side of the software. This one is the search and sharing work every BizPinPro site carries. A groomer is a storefront business, the dog comes to the shop, so the markup carries the address and the hours, which is what puts the pin on the map, the directions button and "open now" on the profile, with the booking link riding along. Click any item to see the actual piece and what it does for the owner.
Schema.org markup is a block of data in the page head, written in Google's own vocabulary, that says plainly what the business is. Schema.org has no type for a groomer (the pet type is for retail, the animal type is for shelters), so the shop is typed as a local business with the services spelled out one by one. This is a storefront, so unlike a tow truck or a pressure washer the street address and map coordinates are in it: that is what makes the pin, the directions button and "open now" work. The hours match the ones in the scheduler.
One more thing a groomer gets that most trades do not: a booking action that points at the online booking page. That is what Google uses to put a book button on the profile.
What it does for the owner: "dog groomer near me" returns businesses with a pin, hours and a book button, and the markup is where all three come from.
The schema a real Bella & Bark site would carry
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "LocalBusiness",
"@id": "https://bellaandbark.example/#business",
"name": "Bella & Bark Grooming",
"url": "https://bellaandbark.example/",
"telephone": "+15405550148",
"priceRange": "$",
"address": {
"@type": "PostalAddress",
"streetAddress": "(street address from the Google Business Profile)",
"addressLocality": "Christiansburg",
"addressRegion": "VA",
"postalCode": "24073",
"addressCountry": "US"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 37.1298,
"longitude": -80.4089
},
"openingHoursSpecification": [
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"opens": "08:00",
"closes": "17:00"
},
{
"@type": "OpeningHoursSpecification",
"dayOfWeek": "Saturday",
"opens": "09:00",
"closes": "14:00"
}
],
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Services",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Bath & Brush"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Full Groom"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Nail Trim"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Teeth Brushing"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "De-shedding Treatment"
}
}
]
},
"potentialAction": {
"@type": "ReserveAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "https://bellaandbark.example/book",
"actionPlatform": [
"http://schema.org/DesktopWebPlatform",
"http://schema.org/MobileWebPlatform"
]
},
"result": {
"@type": "Reservation",
"name": "Grooming appointment"
}
}
},
{
"@type": "WebSite",
"@id": "https://bellaandbark.example/#website",
"url": "https://bellaandbark.example/",
"name": "Bella & Bark Grooming",
"publisher": {
"@id": "https://bellaandbark.example/#business"
}
},
{
"@type": "WebPage",
"@id": "https://bellaandbark.example/#webpage",
"url": "https://bellaandbark.example/",
"name": "Dog Grooming in the New River Valley | Bella & Bark Grooming",
"isPartOf": {
"@id": "https://bellaandbark.example/#website"
},
"about": {
"@id": "https://bellaandbark.example/#business"
}
}
]
}No star rating is typed in on purpose. A rating written by hand is wrong the day the next review lands. It comes from the live Google profile or not at all.
The title tag is the blue headline in a search result. It leads with what a customer types, not with the company name: "dog grooming" and "New River Valley" first, the name second. A new dog owner searches for the service, not the shop. 50 to 60 characters, one topic per page.
The meta description is the grey text under it. Written as a sentence a customer would click, 140 to 160 characters. It does not change ranking, but it changes who clicks.
The canonical tag tells Google which address is the real one. Without it, bellaandbark.example, www.bellaandbark.example, the same page with a trailing slash and the same page with a tracking code on the end can all count as separate pages, and the ranking is split four ways.
This demo page is set to noindex on purpose. Bella & Bark Grooming is fictional, and a made-up business on BizPinPro's own domain would read as spam to Google. A client site is indexed from day one.
What the result would look like
The tags behind it
<title>Dog Grooming in the New River Valley | Bella & Bark Grooming</title> <meta name="description" content="Baths, full grooms, nail trims and de-shedding for dogs across the New River Valley. One dog on the table at a time. See the next openings and book online in a minute."> <link rel="canonical" href="https://bellaandbark.example/">
When someone pastes the site into a Facebook group or texts it to a friend, the app builds a preview card. Without Open Graph tags it guesses: a random image from the page, or none, and the first sentence it finds. With them, the owner chooses the picture, the headline and the blurb once, and every share looks the same.
For a groomer the share is a before-and-after photo of somebody's doodle in a neighborhood group, with the link under it. The card has to show the dog, the name and "book online" before anyone clicks.
What it does for the owner: the after photo is the ad, and the card is what it turns into when the owner posts the link.
The preview card

The tags behind it
<meta property="og:site_name" content="Bella & Bark Grooming"> <meta property="og:title" content="Bella & Bark Grooming | Dog Grooming, Book Online"> <meta property="og:description" content="Calm, one-dog-at-a-time grooming in the New River Valley. See the next openings and book online."> <meta property="og:url" content="https://bellaandbark.example/"> <meta property="og:type" content="website"> <meta property="og:image" content="https://bellaandbark.example/includes/og-image.jpg"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:title" content="Bella & Bark Grooming | Dog Grooming, Book Online"> <meta name="twitter:image" content="https://bellaandbark.example/includes/og-image.jpg">
A sitemap is the list of pages the site hands to Google so nothing has to be discovered by luck. On most sites it is a file somebody generated once and forgot. On a BizPinPro site sitemap.xml is generated by code every time it is requested, from the pages that exist right now. The booking page and the service list come from the scheduler, so when the owner adds a service in the dashboard, the page for it is in the sitemap the same minute.
Each entry carries a last-changed date that comes from the page's real change time, not today's date stamped on every line. A sitemap that says every page changed today, every day, teaches Google to ignore it.
What it does for the owner: new pages get found in days instead of weeks, and the site never hands Google a list that points at pages that no longer exist.
sitemap.xml, as generated
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://bellaandbark.example/</loc>
<lastmod>2026-10-02</lastmod>
</url>
<url>
<loc>https://bellaandbark.example/services</loc>
<lastmod>2026-10-02</lastmod>
</url>
<url>
<loc>https://bellaandbark.example/book</loc>
<lastmod>2026-10-18</lastmod>
</url>
<url>
<loc>https://bellaandbark.example/about</loc>
<lastmod>2026-09-14</lastmod>
</url>
<url>
<loc>https://bellaandbark.example/contact</loc>
<lastmod>2026-08-21</lastmod>
</url>
</urlset>More people now ask an AI assistant "dog groomer near Blacksburg that takes nervous dogs" than you would think. llms.txt is a plain text file at the site's root that gives those systems a clean summary of the business: what it does, where, how to reach it, and which pages matter. It is the AI-era cousin of robots.txt and the sitemap.
Whether it moves the needle is honestly still debated. It is a young convention, not a formal standard, and the AI companies have not said how much weight they give it. BizPinPro creates it on every site regardless, because the cost is nothing: it is generated from the same information that drives the rest of the site, so it can never drift out of date, and the server logs every time an AI crawler reads it, so the owner can see whether it is being used at all.
llms.txt for Bella & Bark
# Bella & Bark Grooming > A calm, one-dog-at-a-time dog grooming shop in the New > River Valley of Virginia. Online booking, every request > confirmed by a person. ## Contact - Phone: (540) 555-0148 - Book online: https://bellaandbark.example/book ## Hours - Monday to Friday: 8:00 am to 5:00 pm - Saturday: 9:00 am to 2:00 pm - Sunday: closed ## Services - Bath and Brush (from $45) - Full Groom (from $75) - Nail Trim (from $15) - Teeth Brushing (add-on, from $12) - De-shedding Treatment (add-on, from $35) ## Important Pages - [Services](https://bellaandbark.example/services) - [Book Online](https://bellaandbark.example/book)
Accessibility is not a feature bolted on for a lawsuit. It is how the site is built from the first line. On this page already: every field in the contact form has a real label a screen reader announces, required fields are marked so, the colors pass the contrast test, the whole page works from the keyboard alone, and there is one h1 that says what the page is.
On a real site that carries through to every photo of the dogs (alt text that says what is in them), the live openings card (the times are real links a screen reader announces as "9 am, link"), and the booking page itself, which is built to the same rules.
What it does for the owner: the person booking may be older, on a phone, with the text size turned up. A page that still works at 200 percent zoom with one obvious button is the difference between a booking and a call to somebody else. And the same structure that helps a screen reader is what helps Google read the page.
The contact form on this page, as a screen reader sees it
form "Ask about your dog" edit text "Your name", required edit text "Phone", required edit text "Dog's name and breed", required combo box "Size" combo box "Service you're thinking of" edit text "Preferred day" edit text, multi line "Anything we should know" button "Send and we'll call you"
The hidden anti-spam field is marked so screen readers skip it. A person never meets it; a bot fills it in and gives itself away.
A form on the open web is hit by bots within days of launch. On a BizPinPro site the form posts to the site's own handler, then through BizPinPro's mail relay, and a message has to pass seven checks on the way: a hidden field only bots fill, a timer that catches forms submitted faster than a person could type, a page token a replayed form never has, rate limits per site and across every site on the relay, blocklists for known bad senders and throwaway email domains, and an AI read of the message that drops link-building pitches but lets a short, urgent "can you fit a nail trim in today, he is scratching the baby" straight through.
If the AI is ever unreachable the message is delivered anyway. A real lead is never lost to an outage. Every delivered message is also kept on record in the owner's client portal, so a missing email is never a missing customer.
On this demo the form sends nothing. The thank-you is local. The form on this page lists each layer beside the fields, with a toggle that reveals the hidden one.
What the owner gets, every time
From: BizPinPro Mail Relay <ops@bizpinpro.com>
Reply-To: Avery K. <avery.k@example.com>
To: hello@bellaandbark.example
Subject: Ask about your dog: Biscuit, goldendoodle
Name: Avery K.
Phone: (540) 555-0121
Dog: Biscuit, goldendoodle
Size: Large, 50 to 90 lb
Service: Full Groom
Day: Saturday morning
Notes: Matted behind the ears, first groom since
spring. Nervous around dryers.
This is an automated message from the BizPinPro Mail Relay.
Hit reply and it goes straight to Avery.The site lives on BizPinPro's own servers, not a shared page builder, with nightly backups and a monitor that checks it is up and notices when it is not. There is no plugin stack to update and nothing to break on a Tuesday night.
Once a month the owner gets one link, no login: how many people found Bella & Bark on Google, which searches brought them, which pages they read, how many called from the profile, and a few sentences in plain language on what moved and why. For a groomer the report also shows how many of the month's bookings started from a Google search versus the company name, which is the number that says whether the marketing is working or the regulars are.
See it: the sample monthly report linked at the top of this page shows the whole thing for Bella & Bark with sample numbers.
One month, one link
Digital Pulse: Bella & Bark Grooming, September 2026 Google Business Profile Profile views 910 up 5% Calls 23 up 21% Direction requests 16 Website clicks 55 up 17% Search Clicks 68 up 26% Impressions 3,410 up 16% Average position 12.9 was 14.6 Top searches dog groomer near me dog grooming new river valley husky de-shedding Summary Your website drew 296 unique visitors in September, up from 263 in August. Search clicks rose from 54 to 68 and your average position improved from 14.6 to 12.9...
This section is on every BizPinPro example site, written for that kind of business. The auto repair demo is the other systems demo with a live booking engine and owner dashboard, and the gallery has the rest. Read the full version for dog groomers, with every term explained in the glossary.