🍴

SEO Audit: tasteboulder.com

Private deliverable. Enter the hub password to continue.

That's not right. Try again.

← Back to the hub

SEO Audit: tasteboulder.com

The build is near-perfect. The aim is off in two expensive places, and there is an 8,100-a-month Boulder term nobody in the portfolio has claimed.

Prepared 2026-08-08

August 8, 2026 · First audit · Data: DataForSEO live SERP + backlink index, live crawl, sitemap inventory

A note on what this audit could and could not use. tasteboulder.com has no Google Search Console property, so there is no click, impression, or query data for it, and none for boulderthingstodo.com, outdoorboulder.com, newtoboulder.com or medspasboulder.com either. Everything below comes from outside Google's own reporting: live SERP pulls, the backlink index, and a crawl of the site itself. That is enough to find the problems, but it means the traffic estimates are modeled, not measured. Fixing that is recommendation #1.

Second note on timing. The first commit in this repo is July 23, 2026, and the site went live on Cloudflare on August 1. It is sixteen days old. It has 730 URLs and 12 referring domains. So "it isn't ranking" is not a finding, it is the expected state. The useful question is whether the foundation is pointed at the right queries before the authority arrives, and in two important places it is not.


What the site is

730 live URLs: 548 restaurant pages, 43 cuisine pages, 41 dish-price pages, 46 Louisville and 25 Superior pages, 8 neighborhoods, plus a handful of guides. Homepage on-page score is 98/100 and the technical build is genuinely clean: HTTPS, valid canonicals, Open Graph everywhere, zero layout shift, brotli, 275ms to interactive, correct robots.txt, a working 730-entry sitemap. Schema is present and mostly correct (Restaurant, CollectionPage, BreadcrumbList, FAQPage, ItemList).

The site is indexed. A site: query returns the homepage, /restaurants/, /cuisines/, /neighborhoods/, /best-patios/ and several dish pages. Google has found it.

None of the problems below are build-quality problems. They are aiming problems.


Top priority actions

1. The 41 dish-price pages are aimed at queries nobody types

🔴 Critical · Effort: Low

What. The dish pages are titled on the pattern "Pizza in Boulder: 49 Restaurants, Priced" and "Burritos in Boulder: 84 Restaurants, Priced". The price angle is the site's real differentiator and it is genuinely useful. It is also not what anyone searches.

Evidence. Google Ads volume, Boulder metro, monthly:

Query Volume
cheapest burrito boulder 0
burrito prices boulder 0
best burrito in boulder 30
best pizza in boulder 590
best breakfast boulder 590
best sushi in boulder 320
best mexican food boulder 320
best sandwiches boulder 170
best italian boulder 170
best thai food boulder 170
best indian food boulder 140
best ramen boulder 110
best steakhouse boulder 110
best bakery boulder 110
best ice cream boulder 90

The price framing has zero measured demand. The "best" framing has roughly 2,900 searches a month across the dish set, and the pages that would serve it already exist. They are just wearing the wrong name.

Fix. Retitle and reframe the dish pages to lead with "Best", keep the pricing as the proof:

  • /dish/pizza/"Best Pizza in Boulder (2026): 49 Places, Priced", H1 "Best Pizza in Boulder"
  • /dish/sushi-rolls/"Best Sushi in Boulder (2026): Every Roll, Priced"
  • /dish/ramen/"Best Ramen in Boulder (2026), Priced"

Same for the rest. Do not delete the price data, it is the reason to click. Change what the page claims to be.

Why it works. Google matches the query to the title and H1 first. "Best pizza in boulder" is a commercial-investigation query, and the pages that win it are ranked lists. This site already has the ranked list plus something none of the competitors have (every price from the restaurant's own menu). It is competing in the wrong race with the right car.


2. Verify the site in Search Console (and four sister sites with it)

🔴 Critical · Effort: Low

What. No GSC property exists for tasteboulder.com, boulderthingstodo.com, outdoorboulder.com, newtoboulder.com or medspasboulder.com. Twenty properties are verified on the account; these five are not among them.

Why it matters now. Without it there is no impression data, no query data, no Index Coverage report, no URL Inspection. On a sixteen-day-old site with 730 URLs, the single most valuable thing to know over the next month is how many of those 730 pages Google actually indexes, and that number is only visible in Search Console. If 548 restaurant pages get crawled and dropped, that is worth knowing in week three, not month six.

Fix. Verify all five as domain properties. Verification is not submission: it does not push anything to Google, it only turns the reporting on. Submitting the sitemap or pushing URLs to IndexNow stays a separate decision and stays yours.


3. 548 restaurant pages are thin, on a domain with no authority yet

🟡 High · Effort: Medium

What. A representative restaurant page (/restaurants/bartaco/) carries 201 words of body text, and the crawler flags it low_content_rate: true. Multiply by 548 and 75% of the site's URL count is thin listing pages, published all at once, on a domain with 12 referring domains of which 11 are nofollow.

Evidence. Backlink profile as of today: 14 backlinks, 12 referring domains, 11 nofollow, 5 unique IPs, spam score 40, first seen November 2023. Domain rank 51. There is essentially no authority to spread across 730 URLs.

Compare the page types on the same site:

Page type Words Schema
/best/brunch/ 2,316 CollectionPage, BreadcrumbList, ItemList, FAQPage
/dish/pizza/ 980 ItemList only
/cuisines/mexican-restaurant/ 865 CollectionPage, BreadcrumbList, FAQPage
/restaurants/bartaco/ 347 Restaurant

The /best/ template is excellent. There are three of them. The thin template is the one deployed 548 times.

Fix, in order. 1. Do not delete the restaurant pages. They are the dataset and they earn their place as the destination for long-tail brand searches. 2. Do add something to them that only this site has: the venue's actual priced menu items inline (the data is already in venue-menus.json for 382 venues), a price-position line ("mid-range for Boulder tacos, $4 to $16"), and neighborhood context. 3. Prioritize the ~100 venues with real review volume; leave the tail as-is. 4. Meanwhile, put the linking weight into the pages that can rank: the retitled dish pages, the cuisine pages, and the /best/ guides.

Why it works. Google evaluates quality partly at the site level. A large majority of near-duplicate thin pages on a new domain suppresses the good pages alongside the weak ones. The fix is not pruning, it is making the thin pages carry the one thing no competitor's listing page has.


4. The brand name collides with an established Boulder food festival

🟡 High · Effort: Low, but decide now

What. A search for "taste boulder" in Boulder returns, in order: Taste of Pearl (boulderdowntown.com), Taste of Pearl (Visit Boulder), Taste of Pearl About page, Museum of Boulder's "A Historic Taste of Boulder" dinner, Taste of Boulder Culinary Tour, Taste of Pearl Food page, a "The Taste of Boulder" Facebook page, and a Boulder Reporting Lab article about Taste of Pearl. There is a knowledge panel for Taste of Pearl. tasteboulder.com does not appear at all, and the related searches are "Taste boulder menu", "Taste boulder tickets", "Taste boulder cost", all festival intent.

Evidence. Every result on page one belongs to somebody else's event, and Google has built an entity around it.

Fix. This is not fatal, but plan around it rather than being surprised by it: - Do not spend effort trying to rank for the bare brand term. The intent behind it is a ticketed festival, not a directory. - Lean the brand into "Taste Boulder" + a qualifier in titles and the Organization schema ("Taste Boulder, the Boulder restaurant and menu-price guide"). - Expect brand search to arrive as "tasteboulder" or "taste boulder restaurants" rather than "taste boulder", and treat the site's homepage title as the real front door, which it already handles well.

Why it works. Fighting an established entity for a two-word term costs more than it returns. Owning the qualified variants costs almost nothing.


5. Homepage title truncates in the SERP

🟢 Medium · Effort: Trivial

What. Current title is 71 characters: "Best Restaurants in Boulder, Colorado (2026): Where Locals Actually Eat". Google cuts around 60, so it renders as "…Colorado (2026): Where Locals Ac…" and the payoff phrase is lost.

Fix. "Best Restaurants in Boulder, Colorado (2026) | Taste Boulder" (59 chars), and move "where locals actually eat" into the meta description, which currently has room (149 of ~160 chars used).

The description is otherwise strong and does mention the menu-price angle, which is the right hook.


Gap analysis: what's missing on tasteboulder.com

Every keyword below has real Boulder-metro volume and no page on the site aimed at it.

Query Volume/mo Competition Current state Action
best pizza in boulder 590 Medium (34) /dish/pizza/ mis-titled Retitle
best breakfast boulder 590 Low (32) /best/breakfast/ exists ✓ Keep, build links
best sushi in boulder 320 Low (26) Split across dish + cuisine Consolidate, retitle
best mexican food boulder 320 Low (28) /cuisines/mexican-restaurant/ Retitle to "Best Mexican Food in Boulder"
dog friendly restaurants boulder 320 Low (11) /outdoor-dining/dog-friendly/ Retitle to lead with the query
vegetarian restaurants boulder 260 Low (28) Only /best/vegan/ New page, vegetarian ≠ vegan
boulder breweries 210 Low (29) /cuisines/brewery/ Retitle, expand
best sandwiches boulder 170 Medium (38) /dish/sandwiches/ Retitle
best italian boulder 170 Low (20) /cuisines/italian-restaurant/ Retitle
best thai food boulder 170 Medium (36) /cuisines/thai-restaurant/ Retitle
boulder food trucks 170 Low (19), $6.80 CPC Nothing New page, highest ad value on the list
where to eat in boulder 140 Low (32) Homepage competes Consider a dedicated guide
best indian food boulder 140 Medium (36) /cuisines/indian-restaurant/ Retitle
upscale / nice restaurants boulder ~590 combined Low-Med Nothing New page
best casual restaurants boulder 590 (natl.) Low (11) Nothing New page
cheap eats boulder 70 Low (28) Homepage section only Give it a URL

There is also a cluster the SERP itself is asking for. Google's related searches on "best restaurants in boulder" include hidden gem restaurants Boulder, unique restaurants in Boulder, best restaurants in Boulder with a view, and Michelin Star Restaurants Boulder. The Michelin one already has a page. The other three do not, and "with a view" in particular is a natural fit for a town where the Flatirons are the view.

A structural note on cuisine pages. They are currently named after Google's business categories: /cuisines/hamburger-restaurant/, /cuisines/pizza-delivery/, /cuisines/chicken-wings-restaurant/. Nobody searches "hamburger restaurant boulder". Those slugs came from the data source, not from demand. Retitling costs nothing; changing slugs means redirects, so do titles and H1s first and only change URLs where the volume justifies it.


Portfolio gap analysis: the Boulder-area sites

Seven properties in the Boulder market: tasteboulder.com (dining, 730 pages), boulderthingstodo.com (activities, 39 pages), outdoorboulder.com (trails, 118 pages), newtoboulder.com (relocation, 12 pages), medspasboulder.com (medspa directory, 323 pages), househelperhub.com (home services, 22 pages), vitalency.com (medspa B2B, deliberately noindexed).

What's already ranking

Only outdoorboulder.com shows ranked keywords in the index at all: 21 of them, best position #25, mostly trailhead long-tail (Heil Valley Ranch, Hall Ranch, Brainard Lake, Walker Ranch), plus three big terms sitting deep on page 5 or 6 (town of nederland 18,100; south mesa trailhead 8,100; wonderland lake 5,400). househelperhub.com shows 25 keywords, all position 33 or worse, and interestingly the Spanish-language pages are its strongest performers. tasteboulder.com, boulderthingstodo.com, newtoboulder.com and medspasboulder.com show zero.

That is not a portfolio failure, it is a portfolio of new sites. But it does mean nothing in the Boulder cluster is yet generating traffic that could be pointed at anything else.

Found a live bug on boulderthingstodo.com

🔴 boulderthingstodo.com/robots.txt tells Google the sitemap is at /sitemap.xml. That URL returns 404. The real sitemap is at /sitemap-index.xml. Every crawler that follows the robots.txt directive hits a dead end. Fix the robots.txt line to point at /sitemap-index.xml, or serve the sitemap at both paths. Two-minute fix, and it has been broken for the whole life of the site.

The keywords nobody in the portfolio owns

These are Boulder-area terms with real volume where none of the seven sites has a page, ordered by what I would actually chase.

1. Boulder Farmers Market: 8,100/mo average, peaks at 14,800 in August, competition index 5.

This is the best unclaimed opportunity in the whole Boulder portfolio and it is not close. Volume is high, commercial competition is almost nil, and the seasonality is extreme (1,000 in January, 14,800 in August), which means a page built now has seven months to mature before next season.

Honest read of the SERP: the top three are the official bcfm.org, Visit Boulder's listing, and Downtown Boulder. Those are hard to displace, and I would not promise a #1. But #4 through #8 are an Instagram profile, a Colorado Tourism page about Longmont, a Local Food Marketplace subdomain, and Visit Boulder's own "Insider's Guide". A genuinely better guide (what's actually in season each month, which vendors, where to park, Wednesday versus Saturday, what it costs) can take one of those slots. Related searches show the unmet demand plainly: Boulder Farmers market schedule, Boulder farmers market today, Boulder Farmers Market parking, Lafayette Farmers Market.

Add longmont farmers market (390/mo, competition index 2) and boulder farmers market hours (260/mo, competition index 1) as the cluster. This belongs on TasteBoulder, since it is food, and TasteBoulder already has the town sections for Louisville and Superior that would extend to Longmont and Lafayette.

2. Pearl Street Mall: 18,100/mo average, peaks at 27,100, competition index 15.

The largest low-competition term in the Boulder market. Both TasteBoulder (/pearl-street-restaurants/) and BoulderThingsToDo (/pearl-street/) have a page, and neither ranks. Two problems: neither site has the authority yet, and the two pages compete with each other for a term neither is aimed at squarely. The searcher asking "pearl street mall" wants what it is, where to park, what's there, hours, not a restaurant list. Decide which site owns the head term (BoulderThingsToDo is the better fit) and have the other link to it rather than duplicate it.

3. Chautauqua Park: 12,100/mo, competition index 5. Already built on OutdoorBoulder, with three supporting pages (/chautauqua-park/, /chautauqua-trail/, /chautauqua-parking-shuttle/). Nothing to create. This one needs links, not pages.

4. Things to do in Boulder: 1,900/mo in-market, 14,800 nationally, competition index 5 to 18. BoulderThingsToDo's namesake term, on a 39-page site with a broken sitemap pointer. The site is the thinnest in the Boulder group by a wide margin and it owns the highest-intent tourism term. It is under-built relative to its opportunity.

5. Boulder Creek Path: 1,300/mo, competition index 8. Already on OutdoorBoulder. Same story as Chautauqua: built, needs authority.

6. Boulder weather: 135,000/mo, difficulty score 14. I am flagging this only to say do not chase it. The difficulty score is misleading; the SERP is weather.com, AccuWeather and the National Weather Service, and no content site displaces those. Mentioning it because a keyword tool will keep surfacing it as an easy win, and it is not one.

7. Neighboring-town dining. TasteBoulder already covers Louisville (46 pages) and Superior (25). Longmont, Lafayette, Erie, Broomfield, Lyons and Nederland are unbuilt, and BoulderThingsToDo has stub town pages for exactly those six. The two sites are pointed at the same corridor from different angles. Worth deciding deliberately who owns what before both build it.

The cross-linking that isn't happening

Seven sites cover one geography and, from what I can see, they barely link to each other. TasteBoulder's footer has a "Boulder County" block, which is a start. But OutdoorBoulder's 118 trail pages are the only pages in the portfolio with any ranking traction at all, and a hiker looking at /mount-sanitas/ is a plausible reader for "where to eat after a hike in Boulder". Editorial links between these sites are free, they are relevant, and right now they are the only link equity any of them can generate.

One caution: keep it genuinely editorial and in-content. Seven interlinked sites owned by one person, cross-linking sitewide from footers, is a pattern Google recognizes. In-content links from a trail page to a specific relevant restaurant guide are fine. A reciprocal link block on all 1,200 pages is not.


Supporting findings

Technical

Issue Pages affected Fix Severity
robots.txt points to 404 sitemap (boulderthingstodo.com) Whole site Point at /sitemap-index.xml Critical
Thin content, low_content_rate flagged ~548 restaurant pages Add priced menu items + price context High
Homepage title 71 chars, truncates 1 Cut to ≤60 Medium
Dish pages have ItemList only, no Breadcrumb or FAQ 41 Match the cuisine-page schema stack Medium
Render-blocking stylesheets Sitewide (2 to 3 per page) Inline critical CSS Low, page is fast anyway
No GSC property 5 sites Verify as domain properties Critical for measurement
Metric tasteboulder.com
Referring domains 12
Of which nofollow 11
Total backlinks 14
Unique referring IPs 5
Spam score 40
Domain rank 51

Eleven of twelve referring domains pass no equity. Two are pages.dev (own preview deploys), three are .eu, one .wiki, one .world. This is not a link profile, it is scraper noise. No amount of on-page work substitutes for this, and it is the real reason nothing ranks yet.

What's already good, and worth saying

  • The /best/ template (2,316 words, full schema stack, real editorial judgment) is genuinely competitive content. Three exist. Build more of them.
  • On-page technical execution is near-perfect: 98 to 100 on-page score, 0 CLS, 275ms TTI, correct canonicals, complete OG tags, valid schema.
  • The menu-price dataset (382 venues) is a real, defensible differentiator. Nobody in the Boulder SERP has it. It is currently framed as the headline when it should be the proof.
  • Louisville and Superior town sections are a smart corridor play and already built.

What to ignore for now

  • Core Web Vitals. Nothing to fix. 0 CLS, sub-300ms interactive, brotli, 10KB transfer. Move on.
  • Keyword cannibalization. Real but premature: the dish, cuisine and best pages overlap (pizza appears in all three), but with zero rankings there is nothing to cannibalize yet. Revisit once GSC has 90 days of data.
  • Boulder weather at 135,000/mo. Undisplaceable. Ignore the difficulty score.
  • Boulder restaurant week (20/mo) and boulder date night restaurants (10/mo). Both feel like they should be big. Neither is.

Suggested order of work

This week, low effort, high leverage 1. Fix the boulderthingstodo.com robots.txt sitemap line. 2. Verify the five missing sites in Search Console. 3. Cut the tasteboulder.com homepage title to 60 characters. 4. Retitle the 41 dish pages and the top 12 cuisine pages to the "Best X in Boulder" pattern. Titles and H1s only, no URL changes.

Next few weeks 5. Build the Boulder Farmers Market guide, plus Longmont, and the hours and parking supporting pages. 6. New pages for the four uncovered dining queries: vegetarian, food trucks, upscale, casual. 7. Add priced menu items and price context to the top ~100 restaurant pages.

Ongoing, and the actual bottleneck 8. Links. Twelve referring domains and eleven of them nofollow is the ceiling on everything above. Boulder-specific outreach (Boulder Reporting Lab, Downtown Boulder, neighborhood groups, the CVB's partner listings) plus genuine editorial cross-links between the seven Boulder properties.

Not yet, and your call 9. Sitemap submission and IndexNow. The site is indexed and discoverable already. Whether to actively push it is your decision, not mine.

Published to Annette's hub. Rebuilt from the source markdown, so edit the source and rerun rather than editing this page.