Search & Social
J. Rieger & Co.
Every Link
Tells a Story
Before anyone reads a word on a site, they see it in a search result or a shared link. For J. Rieger & Co., most of those first impressions looked the same. This project rebuilt them, page by page, across 91 pages.

The Problem
The first crawl covered 29 pages and found only 8 unique preview images. Share a bourbon, a tour, or the team page on Facebook, LinkedIn, or X, and the card often looked identical. Two pages had no description at all. Titles followed no standard, and many titles and descriptions ran long enough to get cut off.
Digging deeper turned up worse. The Bottled-in-Bond Bourbon and Rye descriptions ran 399 and 416 characters. Monogram Whiskey was using the Rye's description, so it was describing the wrong product. Sub-pages copied their parent's description word for word. And all 54 cocktail recipe pages had no description at all, a gap in the CMS template rather than a one-off miss.
Challenge
The site was headed for a migration and redesign. The easy call was to wait and fix metadata in the rebuild. I moved it to Phase 1 instead, because the live site was showing up badly in search and social every day it waited. A system built now would carry straight into the new site.
The Goal
Every page gets a title that follows one scheme, a description written for that page alone, and a preview image of its own. Nothing truncated, nothing duplicated, nothing missing. And all of it verified the way crawlers actually see it.
Methods
A Python crawler pulled the title, description, and preview image from every page's raw server HTML. That's the same view Google and the social platforms get, not what a browser shows after scripts run.
Results landed in a color-coded audit spreadsheet. Green meant in range: titles at 30 to 60 characters, descriptions at 120 to 160. Yellow meant short, orange long, red missing. Every row placed the current copy next to the recommendation, with character counts. Each preview image was downloaded, cropped, and embedded beside its row, so the client reviewed share cards, not URLs.

The audit kept growing. Each crawl surfaced pages the last one missed: 29 became 33 with the microsite and spirit pages, then 90 once every cocktail recipe was added, then 91.
Insight
The cocktail recipe hub looked perfect in the browser: title, description, and image all present in Inspect. In the raw HTML, all three were missing. Meta's Sharing Debugger came back with errors.
The cause was an earlier fix. A short timing delay had been added to the page code to solve a filter loading issue, and it ran on every visit. That delay blocked the window Wix needs to write meta tags server-side. The fix was to run the delay only when a visitor is actually filtering by spirit. Crawlers never trigger it, and the filter still works.
The lesson: what the browser shows isn't what the crawler gets. From then on, every check ran against raw HTML.
Design Process
Ideation & Prototyping
One title pattern, applied sitewide:
Page Name | Category Descriptor | J. Rieger & Co.
So the shop page reads "Shop Our Spirits | Whiskey, Gin & Vodka | J. Rieger & Co." and the team page reads "Meet Our Team | Kansas City Distillery | J. Rieger & Co." Descriptions follow their own rule: one sentence that opens with an action or value, names specific products, and closes on the brand or the city.
Preview images followed a set spec: 1200 by 630 for Facebook and LinkedIn, with key content kept in a center safe zone so X's tighter crop never cuts it. Every image came from existing J. Rieger photography, with no new shoot needed.
Key Decisions
Fix the template, not the pages. Fifty-three cocktail recipes each got a description written from its own flavor notes and featured spirit. The titles were left alone, because the auto-generated pattern was already clean.
Fix the code, not the platform. The crawler problem traced to page code. Limiting when the delay runs fixed the crawler problem and left the filter feature exactly as it was.
Skip what doesn't matter. The Sharing Debugger flagged a missing Facebook App ID. That tag doesn't affect link previews or the Facebook Pixel, and J. Rieger has no Facebook App. Registering one just to silence a warning would have added infrastructure nobody uses.
Clean up what the audit uncovered. Two different cocktails, the Manhattan and the Rye Manhattan, shared one URL; the second got its own. A preview image still hosted on the old Webflow site was flagged before it could break. A stray slug was renamed and flagged as a possible duplicate.
Final Design
The final crawl confirmed all 91 pages return cleanly, each with a title, a description, and its own preview image in the raw HTML. The cocktail hub, once invisible to social crawlers, now has a 59-character title, a 153-character description, and an image of its own.


Impact
| Measure | Before | After |
|---|---|---|
| Pages audited | 29 | 91 |
| Unique preview images | 8 | One per page |
| Pages missing a description | 56 | 0 |
| Title standard | None | Sitewide |
The real proof came in October. When the SPIRITS navigation was restructured, re-slugging nine spirit pages and adding three new hubs, the same audit ran the day it shipped. It caught four regressions on the spot: a page accidentally hidden from search, an old Single Barrel page competing with the new one, and three hub titles missing the brand name. All were fixed in the same session. The system didn't just clean up the site once. It now catches problems the day they ship.
Takeaways
Metadata is the most-read copy on any site, and the least looked at. Treating it as a system, with one title pattern, one description rule, and one image spec, turned 91 separate fixes into a repeatable process.
The biggest find came from refusing to trust the browser. The cocktail hub looked fine to every human who checked it. Only the raw HTML showed what the crawlers were actually seeing.
Let's Build Something