TasteBoulder SEO Audit, August 2026
Private deliverable. Enter the hub password to continue.
That's not right. Try again.
TasteBoulder SEO Audit, August 2026
August 3, 2026 · tasteboulder.com · First audit · No Search Console history yet
The short answer
The site is technically clean and Google has already found it. It ranks for nothing, which is exactly what a three-week-old site with no real links should look like.
The important finding isn't about your site. It's about the SERP you're walking into. The Boulder restaurant search results are not locked up by an unbeatable incumbent. The page sitting at #1 for "best restaurants in boulder" (9,900 searches a month) is a tag archive page on a solo travel blog with roughly 109 real followed referring domains. Not a newspaper. Not TripAdvisor. A blogger's tag page.
That tells you the door is open. What's standing between you and it is links, and four pages you haven't built yet.
Where you actually stand today
| Signal | Value | Read |
|---|---|---|
| Keywords ranking | 0 | Normal at this age. Nothing is broken. |
| Indexed in Google | Yes | Homepage, dish pages and venue pages all showing. |
| Referring domains | 12 | All 12 are nofollow. |
| Real followed links | 0 | This is the bottleneck. Everything else is secondary. |
| Backlink spam score | 46 | The 12 domains are .party, .fyi, .eu scraper sites. Not links you built, not links that help. |
| Pages in sitemap | 757 | 656 venues, 45 cuisines, 41 dishes, 7 neighborhoods, 8 editorial. |
| robots.txt / canonicals / schema | Clean | Restaurant, ItemList, CollectionPage, FAQPage all firing correctly. |
One thing to note: Google indexed this site without you submitting it. That's the
index,follow plus a crawlable sitemap doing its job. Per your standing rule I have not
submitted anything to Google Search Console, Bing or IndexNow, and I won't until you say so.
Your competitors, and what they own
I ran fifteen Boulder restaurant keywords through live SERP data and pulled the real backlink profile for every domain that showed up. Here's the field.
Tier 1: the wall (don't attack head-on)
| Domain | What it is | Referring domains | What it owns |
|---|---|---|---|
| bouldercoloradousa.com | Visit Boulder, the official tourism bureau | 2,719 | #1 for the whole "boulder restaurants" cluster (27,100/mo), #1 "pearl street restaurants", #1 "food in boulder", #1 "dinner boulder", #1 "restaurants in boulder" |
| reddit.com | r/boulder threads | n/a | Best median position of anyone (#2). #1 "best pizza boulder", #1 "best mexican food boulder", #2 happy hour, #2 brunch, #2 romantic |
| tripadvisor.com | Aggregator | n/a | #1 "boulder brunch", #1 "romantic restaurants boulder", #2 sushi, #2 pizza |
A single page on the Visit Boulder site, /food-and-drink/restaurants/, ranks for enough
keywords to pull an estimated 68,000 visits a month. That's the ceiling in this market, and
it's held up by 2,719 referring domains you're not going to match.
But note who these are. Visit Boulder and Downtown Boulder are the same class of organization as a chamber of commerce: they're a place to get listed and linked from, not a rival to beat. Both accept business submissions. Those are two of the better local links available to you.
Tier 2: the actual targets
| Domain | What it is | Referring domains | Where it sits |
|---|---|---|---|
| blondeatlas.com | A solo travel blog | 506 (397 nofollow → ~109 real) | #1 to #3 across the entire "best restaurants in boulder" cluster, off one tag archive URL |
| boulderdowntown.com | Downtown Boulder Partnership | 2,183 | #1 "boulder happy hour", #2 "boulder restaurants". Directory-style, very thin pages |
| travelboulder.com | Local travel content | 1,160 | Positions 15 to 48. Ranks, doesn't win |
| aboutboulder.com | Local content site | 883 | Positions 21 to 49 |
| yourboulder.com | Local content site | 686 | Positions 17 to 53 |
| geminiboulder.com | Local site | 76 | Positions 17 to 43 |
The single most useful data point in this audit
blondeatlas.com/blog-1/tag/best+boulder+restaurants is a tag archive page. Not even a
real article. Here's what that one URL ranks for:
| Position | Keyword | Volume/mo |
|---|---|---|
| #1 | places to eat in boulder | 1,900 |
| #1 | places to eat in boulder colorado | 1,900 |
| #1 | best places to eat in boulder | 2,400 |
| #2 | best places to eat in boulder colorado | 2,400 |
| #3 | best restaurants in boulder | 12,100 |
| #3 | best restaurant in boulder | 12,100 |
| #3 | good boulder restaurants | 12,100 |
| #5 | top restaurants in boulder | 12,100 |
| #11 | restaurant boulder | 27,100 |
A travel blogger with ~109 real followed links is beating national aggregators on the highest intent term in your market, with an auto-generated tag page. You have 656 venue pages with real menu prices. The gap is not content quality. The gap is links.
The full demand map
Everything worth a page in this market, with real Colorado search volume:
| Keyword | Volume/mo | Difficulty | You have a page? |
|---|---|---|---|
| boulder restaurants (all variants) | 27,100 | KD24 | Homepage ✅ |
| best restaurants in boulder | 9,900 | KD15 | Homepage ✅ |
| pearl street restaurants | 5,400 | KD9 | Two pages, competing ⚠️ |
| places to eat in boulder | 1,600 | KD3 | Homepage ✅ |
| boulder happy hour | 1,300 | KD22 | None ❌ |
| best breakfast in boulder | 1,300 | KD26 | Thin category page only ⚠️ |
| best pizza in boulder | 1,000 | KD28 | /dish/pizza/ ✅ |
| best burger boulder | 880 | KD25 | /dish/burgers/ ✅ |
| best brunch boulder | 880 | KD22 | None ❌ |
| vegan restaurants boulder | 880 | KD21 | None ❌ |
| ramen boulder | 880 | KD36 | /dish/ramen/ ✅ |
| best sushi boulder | 720 | KD22 | /dish/sushi-rolls/ ✅ |
| best mexican food boulder | 720 | KD24 | /cuisines/mexican-restaurant/ ✅ |
| dog friendly restaurants boulder | 590 | KD11 | None ❌ |
| best thai food boulder | 320 | KD35 | /cuisines/thai-restaurant/ ✅ |
| gluten free restaurants boulder | 320 | KD20 | None ❌ |
| cheap eats boulder | 140 | KD26 | None ❌ |
Roughly 4,400 searches a month sit behind pages that don't exist yet, and every one of them is low difficulty.
Priority actions
#1 · Stop your two Pearl Street pages from fighting each other
🔴 Critical · Impact: ~+250 clicks/mo · Effort: Low
What: Two pages target the same 5,400/mo term.
/pearl-street-restaurants/ is a 15 KB
editorial guide. /neighborhoods/downtown-pearl-street/
is a 134 KB listing of 140 venues. Both are aimed at "pearl street restaurants."
Why it matters: You have zero authority. Splitting it across two URLs means neither one accumulates enough to rank. Visit Boulder holds #1 here at KD9, which is the softest defense on any high-volume term in the market.
Fix: Make /pearl-street-restaurants/ the one that ranks. Point the neighborhood page's
canonical at it, or retitle the neighborhood page to a genuinely different intent
("Downtown Boulder restaurant directory, all 140 places") and link it from the guide as the
full list. Every internal link using "pearl street restaurants" as anchor text goes to the
guide, not the directory.
#2 · Build the four missing money pages
🔴 Critical · Impact: ~4,400 searches/mo of open demand · Effort: Medium
What: There is no happy hour page, no brunch page, no vegan page and no dog-friendly page. All four are low difficulty. All four are things you already have the data to answer better than anyone.
Fix, in this order:
- Happy hour in Boulder (1,300/mo). boulderdowntown.com holds #1 with a plain list. You have actual menu prices. A page that says what the happy hour costs at each place beats a list of names, and nobody else in this market can build it.
- Best breakfast in Boulder (1,300/mo). You have
/cuisines/breakfast-restaurant/, but it lists 8 places and is titled "Breakfast restaurants in Boulder (8 listed)". That title loses to every "best of" headline on the page. Searchers want a ranked pick, not a count. - Best brunch in Boulder (880/mo). TripAdvisor holds #1. Genuinely open.
- Vegan restaurants in Boulder (880/mo) and dog friendly restaurants in Boulder (590/mo, KD11, the easiest term on the whole list). You already know 144 of your patios are dog friendly. That page writes itself.
Why it works: Your dish pages already prove the format ranks. In a site: check, your
own burrito, steak and salad pages are among the first things Google surfaces from the
domain, which means it likes the priced-list structure.
#3 · Fix the outdoor dining page
🟡 High · Impact: mobile rankings + crawl efficiency · Effort: Low
What: /outdoor-dining/ ships 443 KB of
HTML with 463 internal links on a single page. For comparison, your homepage is 39 KB.
It also duplicates /best-patios/, which targets the
same searchers with the same words in the title.
Why it matters: 443 KB before any images, CSS or JavaScript will hurt mobile load time, and Core Web Vitals are a ranking signal. Separately, 463 links from one page spreads whatever link equity you eventually earn very thin.
Fix: Paginate or filter the 257 venues instead of printing all of them. Then decide which of the two patio pages is the ranking page and canonical the other to it.
#4 · Add width and height to venue page images
🟡 High · Impact: CLS across 656 pages · Effort: Low
What: Venue pages like bartaco carry 6
images with zero width/height attributes. Your cuisine pages get this right (10 of 10
images have them), so it's a template inconsistency, not a site-wide habit.
Why it matters: Images without declared dimensions cause layout shift while they load. That's Cumulative Layout Shift, a direct Core Web Vitals ranking factor, and it's currently affecting your 656 highest-count page type.
Fix: Add the attributes in the venue page template. One template edit, 656 pages fixed.
#5 · Get the first ten real links
🔴 Critical · Impact: unblocks everything above · Effort: High
What: You have zero followed referring domains. Nothing in actions #1 through #4 will produce rankings until this changes, because the sites you're competing with have 76 to 2,719.
The realistic floor: geminiboulder.com ranks in the 17 to 43 range on 76 referring domains. blondeatlas.com wins the money cluster on about 109 real ones. Call ~100 real followed referring domains the number to aim at, not thousands.
Where the first ten come from, easiest first:
- Get listed on the sites you were treating as competitors. Visit Boulder (bouldercoloradousa.com) and Downtown Boulder (boulderdowntown.com) both take business listings. Same logic as a chamber of commerce: a directory to join, not a rival to fight.
- Boulder Chamber of Commerce, and the Boulder County business directories.
- Local press. Boulder Reporting Lab (1,339 referring domains), Boulder Weekly (4,625), Daily Camera (19,746). You have a genuinely newsworthy dataset: every menu price in Boulder, plus 107 restaurants you can prove have closed. That's a story a local reporter will actually want, and none of them can get it anywhere else.
- r/boulder. You can't outrank Reddit on these terms, so be the link inside the thread instead. When someone asks where to find the cheapest burrito, your priced dish page is the real answer.
What I'm deliberately not worrying about yet
- Ranking for "boulder restaurants" (27,100/mo). Visit Boulder owns it with 2,719 referring domains. Come back to it in a year.
- Beating Reddit or TripAdvisor. Not a realistic target and not necessary. The Tier 2 sites are where your traffic comes from.
- The 12 spammy nofollow backlinks. Scraper sites picked you up automatically. They pass nothing and they hurt nothing. No disavow needed.
- Page speed on venue pages. They're 12 KB and fine. The weight problem is confined to the big listing pages.
What happens next, in order
- Fix the Pearl Street split (an afternoon).
- Ship happy hour, then breakfast, then brunch, then vegan and dog friendly.
- Trim the outdoor dining page and pick one patio page.
- One template edit for image dimensions.
- Start the link work, which is the long pole and should start now regardless.
- Then decide about Search Console and Bing submission. That's your call, not mine.
Re-run this audit in 60 days. By then there should be Search Console data to work with, and the recommendations get a lot sharper when I can see real impressions.
Published to Annette's hub. Rebuilt from the source markdown, so edit the source and rerun rather than editing this page.