# SEO & Technical Audit — getstaybids.com

**Date:** April 28, 2026
**Auditor:** Hermes Agent (paperclip-dev)
**Domain:** getstaybids.com
**Overall Score:** 4.2 / 10

---

## Executive Summary

StayBids is a **pre-launch accommodation marketplace** for Portugal, built as a Vite SPA with a premium dark-green design. The site has strong legal compliance foundations (cookie consent, legal pages, EU dispute links) but suffers from the same SPA SEO problems as other single-page apps: no robots.txt, no sitemap, identical metadata on every page, and zero structured data. A critical issue exists where the **Privacy Policy and Terms of Service contain 7+ `[PLACEHOLDER — Requires legal review]` markers** — these are visible to users and represent legal exposure.

---

## Stack & Infrastructure

| Component | Details |
|-----------|---------|
| Framework | SPA (Vite-bundled, `index-pONNrnXD.js`) |
| Routing | Client-side (React Router or similar) |
| Languages | EN + PT (client-side switch, no URL change) |
| Auth | Google OAuth + email/password |
| Cookie Consent | ✅ Present (Accept All / Reject All / Customize) |
| Service Worker | ❌ None |
| Analytics | ❌ None detected |
| TTFB | 70ms (good) |
| DOM Complete | 1,340ms (acceptable) |

---

## Pages Crawled

| Page | Route | H1 |
|------|-------|-----|
| Homepage | `/` | Tell us where you want to stay. Let owners compete. |
| How It Works | `/how-it-works` | A better way to book in Portugal |
| For Owners | `/for-owners` | Stop paying commissions. Start booking directly. |
| Privacy Policy | `/privacy` | Privacy Policy |
| Terms of Service | `/terms` | Terms of Service |
| Cookie Policy | `/cookies` | Cookie Policy |
| Login | `/login` | Welcome back |
| Signup | `/signup` | ❌ Empty page (cookie consent only) |

---

## Strengths ✅

1. **Meta description exists** — Unlike many SPAs, the homepage has a proper description: *"StayBids — The verified accommodation marketplace for Portugal. Submit your ideal stay, let verified owners compete for your booking."*

2. **Cookie consent banner** — Properly implemented with Accept All, Reject All, and Customize options. Compliant with ePrivacy Directive.

3. **Complete legal page structure** — Privacy Policy, Terms of Service, Cookie Policy, Complaints Book (livroreclamacoes.pt), and EU Online Dispute Resolution all linked in footer.

4. **Premium visual design** — Sophisticated dark-green/cream/copper palette with serif headings. Professional typography conveys trust and quality.

5. **Clear value proposition** — "Tell us where you want to stay. Let owners compete." — immediately communicates the marketplace model.

6. **RNAL/RNT verification messaging** — Strong trust signal emphasizing Portuguese tourism registry compliance.

7. **EN/PT language toggle** — Full translation available in both header and footer.

8. **Google OAuth** — Modern authentication with social login option.

9. **Proper link structure** — All footer links use real URLs (not `#` anchors), including external regulatory links.

10. **Single `<h1>` per page** — Correct heading hierarchy maintained.

---

## Critical Issues ❌

### 1. No robots.txt — Search Engines Can't Crawl
**Severity:** 🔴 Critical

Navigating to `/robots.txt` returns the SPA shell. No crawl directives exist for search engines.

**Fix:** Configure the web server to serve a static `robots.txt`:
```
User-agent: *
Allow: /
Disallow: /login
Disallow: /signup
Sitemap: https://getstaybids.com/sitemap.xml
```

---

### 2. No sitemap.xml — Pages Can't Be Discovered
**Severity:** 🔴 Critical

`/sitemap.xml` returns the SPA shell. Google has no way to discover or prioritize pages.

**Fix:** Generate a static `sitemap.xml` with all public routes.

---

### 3. Same `<title>` on Every Page
**Severity:** 🔴 Critical

Every page has the identical title: `"StayBids — Verified Accommodation Marketplace for Portugal"`. This hurts SEO and confuses users with multiple tabs open.

| Page | Current Title | Recommended Title |
|------|---------------|-------------------|
| Homepage | StayBids — Verified Accommodation Marketplace for Portugal | StayBids — Let Verified Owners Compete for Your Stay in Portugal |
| How It Works | StayBids — Verified Accommodation Marketplace for Portugal | How StayBids Works — Bid-Based Accommodation Marketplace |
| For Owners | StayBids — Verified Accommodation Marketplace for Portugal | For Property Owners — Zero Commission Bookings | StayBids |
| Privacy | StayBids — Verified Accommodation Marketplace for Portugal | Privacy Policy — StayBids |
| Terms | StayBids — Verified Accommodation Marketplace for Portugal | Terms of Service — StayBids |
| Login | StayBids — Verified Accommodation Marketplace for Portugal | Sign In — StayBids |

---

### 4. Same `<meta description>` on Every Page
**Severity:** 🔴 Critical

All pages share the same description. Google may ignore duplicate descriptions and generate its own snippets.

---

### 5. No OG Tags — Social Shares Are Broken
**Severity:** 🔴 Critical

Zero Open Graph tags on any page. Sharing getstaybids.com on social media will produce a broken preview with no image, no title, and no description.

**Fix:** Add OG tags per page. Homepage example:
```html
<meta property="og:title" content="StayBids — Let Verified Owners Compete for Your Stay">
<meta property="og:description" content="Submit your ideal stay in Portugal. Verified property owners bid for your booking. Zero commissions.">
<meta property="og:image" content="https://getstaybids.com/og-home.jpg">
<meta property="og:type" content="website">
<meta property="og:url" content="https://getstaybids.com/">
```

---

### 6. No Twitter Card Tags
**Severity:** 🟠 High

No `<meta name="twitter:card">` or related tags. Twitter/X shares will use OG fallbacks (which also don't exist).

---

### 7. No Canonical URLs
**Severity:** 🟠 High

No `<link rel="canonical">` on any page. The SPA can potentially serve content at multiple URLs.

---

### 8. No hreflang Tags — EN/PT Invisible to Search Engines
**Severity:** 🔴 Critical

The EN/PT toggle switches content client-side but doesn't change the URL. Search engines can only see one version. No `hreflang` tags exist.

**Fix:** Implement URL-based routing (`/en/`, `/pt/`) or at minimum add `hreflang` tags pointing to the same URL with language hints.

---

### 9. No Structured Data (JSON-LD)
**Severity:** 🔴 Critical

Zero structured data on any page. Missed opportunities:

| Page | Recommended Schema |
|------|-------------------|
| Homepage | `Organization`, `WebSite`, `SearchAction` |
| How It Works | `HowTo` or `FAQPage` |
| For Owners | `Service` or `Product` |
| Login | `WebPage` |

---

### 10. Privacy Policy Contains 7 Placeholder Markers
**Severity:** 🔴 Critical (Legal)

The Privacy Policy page contains **7 instances of `[PLACEHOLDER — Requires legal review]`** visible to users:

- Data Controller section
- Data We Collect section
- Legal Basis for Processing section
- Your Rights section
- Data Retention section
- Contact section
- Opening paragraph

This is **publicly visible legal exposure**. Users can see the privacy policy is incomplete.

**Fix:** Complete all placeholder sections with finalized legal text reviewed by a Portuguese lawyer.

---

### 11. Terms of Service Contains Placeholder Markers
**Severity:** 🔴 Critical (Legal)

The Terms of Service page also contains `[PLACEHOLDER — Requires legal review]` markers in multiple sections. Same legal exposure as the Privacy Policy.

---

### 12. H1 Has Missing Spaces (Rendering Bug)
**Severity:** 🟠 High

The homepage H1 has a spacing bug in the DOM:
- **EN:** `"Tell us where youwant to stay.Let owners compete."` (missing spaces)
- **PT:** `"Diga-nos onde querficar.Deixe os proprietários competir."` (missing spaces)

This appears to be a CSS/rendering issue where line breaks in the source code aren't converted to spaces. While it may render correctly visually, search engines read the raw text.

---

### 13. Signup Page Is Empty
**Severity:** 🟠 High

Navigating to `/signup` shows only the cookie consent banner — no actual signup form or content. This is a broken route.

---

## Moderate Issues 🟡

### 14. Stats Show Zero Values
The homepage displays "0+ Registered Properties", "0 Commission Fees", and "0% Officially Verified". For a pre-launch page, these zeros undermine credibility. Consider using aspirational copy instead ("Launching with X verified properties" or removing the counters until real data exists).

### 15. Only 2 Images Total
The entire site has only 2 images (logo in header and footer). No property photos, no team photos, no lifestyle imagery. For an accommodation marketplace, visual content is essential.

### 16. No Skip Link
No `<a href="#main-content">` skip link for screen reader accessibility.

### 17. No Lazy Loading
No `loading="lazy"` on any image (though with only 2 images, impact is minimal).

### 18. No Service Worker
No offline caching capability. For a pre-launch site with email capture, this is low priority but worth noting.

### 19. No Analytics Detected
No Google Analytics, Plausible, Fathom, or other analytics. Email signups can't be tracked or attributed.

### 20. Cookie Consent Blocks Hero CTA
The cookie consent modal appears centered over the hero section, blocking the primary "Get Early Access" CTA until dismissed.

---

## Minor Issues

21. **No `<meta name="robots">`** tag (defaults to index,follow, but explicit is better)
22. **No favicon references** in `<head>` (may work via manifest)
23. **"Find a Stay" links to `/login`** — confusing UX; should link to a search/bid form or explain the flow
24. **No `<html lang>` dynamic update** when switching languages client-side

---

## Score Summary

| Category | Score | Notes |
|----------|-------|-------|
| On-Page SEO | 3/10 | Has description but same title/desc everywhere |
| Technical SEO | 1/10 | No robots.txt, no sitemap, SPA invisible |
| Structured Data | 1/10 | Zero JSON-LD on any page |
| Performance | 7/10 | 70ms TTFB, no service worker, acceptable DOM |
| Accessibility | 5/10 | Good contrast, but no skip link, spacing bug |
| GDPR/Legal | 4/10 | Cookie consent ✅, but placeholder legal pages ❌ |
| Content | 5/10 | Good copy, but sparse imagery, placeholder legal |
| Social/OG | 1/10 | Zero OG or Twitter Card tags |
| **Overall** | **4.2/10** | |

---

## Top 10 Fixes (Prioritized by Impact)

| Priority | Fix | Impact | Effort |
|----------|-----|--------|--------|
| 1 | Complete Privacy Policy + Terms (remove placeholders) | Legal compliance | Medium |
| 2 | Add robots.txt + sitemap.xml | Enables crawling | Low |
| 3 | Add unique `<title>` + `<meta description>` per page | SEO foundation | Low |
| 4 | Add OG tags to all pages | Social sharing | Low |
| 5 | Fix H1 spacing bug | SEO + readability | Low |
| 6 | Add hreflang tags (EN/PT) | Multilingual SEO | Low |
| 7 | Add Organization + WebSite schema | Knowledge panel | Low |
| 8 | Fix empty signup page | User experience | Medium |
| 9 | Replace zero-stat counters | Credibility | Low |
| 10 | Add property/lifestyle images | User engagement | Medium |

---

## Detailed SEO Data Per Page

### Homepage (`/`)
```
Title: StayBids — Verified Accommodation Marketplace for Portugal
Description: StayBids — The verified accommodation marketplace for Portugal. Submit your ideal stay, let verified owners compete for your booking.
Canonical: MISSING
OG Tags: ALL MISSING
Hreflang: NONE
Structured Data: NONE
H1: "Tell us where you want to stay. Let owners compete." (1×)
H2: "Your stay, your terms", "Every property is officially registered", "Stop paying commissions. Start receiving direct bookings.", "Launching soon in the Algarve"
Images: 2 total, 0 missing alt
Render-blocking scripts: 1
```

### How It Works (`/how-it-works`)
```
Title: StayBids — Verified Accommodation Marketplace for Portugal (SAME)
Description: [SAME AS HOMEPAGE]
Canonical: MISSING
Structured Data: NONE
H1: "A better way to book in Portugal" (1×)
Steps: 6 (Describe stay → Match properties → Notify owners → Owners bid → Ask questions → Accept and connect)
```

### For Owners (`/for-owners`)
```
Title: StayBids — Verified Accommodation Marketplace for Portugal (SAME)
Description: [SAME AS HOMEPAGE]
Canonical: MISSING
Structured Data: NONE
H1: "Stop paying commissions. Start booking directly." (1×)
Features: 6 (Qualified requests, Calendar sync, Priority notifications, Zero commissions, Set your price, Verified guests)
Steps: 5 (Claim property → Enhance profile → Receive requests → Submit bid → Connect directly)
```

### Privacy Policy (`/privacy`)
```
Title: StayBids — Verified Accommodation Marketplace for Portugal (SAME)
Description: [SAME AS HOMEPAGE]
H1: "Privacy Policy" (1×)
Last Updated: 2026-02-15
Placeholder Markers: 7 ❌
Sections: Data Controller, Data We Collect, Legal Basis, Your Rights, Data Retention, Contact
```

### Terms of Service (`/terms`)
```
Title: StayBids — Verified Accommodation Marketplace for Portugal (SAME)
Description: [SAME AS HOMEPAGE]
H1: "Terms of Service" (1×)
Last Updated: 2026-02-15
Placeholder Markers: Multiple ❌
Sections: Eligibility, User Obligations, Owner Obligations, Limitation of Liability, Governing Law
```

### Cookie Policy (`/cookies`)
```
Title: StayBids — Verified Accommodation Marketplace for Portugal (SAME)
Description: [SAME AS HOMEPAGE]
H1: "Cookie Policy" (1×)
Last Updated: 2026-02-15
Sections: What Are Cookies, Essential Cookies, Analytics Cookies, How to Manage Cookies
```

### Login (`/login`)
```
Title: StayBids — Verified Accommodation Marketplace for Portugal (SAME)
Description: [SAME AS HOMEPAGE]
H1: "Welcome back" (1×)
Auth: Google OAuth + email/password
Features: Forgot password link, Sign up link
```

### Signup (`/signup`)
```
Title: StayBids — Verified Accommodation Marketplace for Portugal (SAME)
H1: NONE ❌
Content: EMPTY (cookie consent only) ❌
```

---

## Competitive Context

StayBids enters a market dominated by Airbnb, Booking.com, and Idealista. The zero-commission model and RNAL/RNT verification are strong differentiators, but the technical SEO gaps mean the site won't rank for any competitive terms until the SPA issues are resolved. For a pre-launch site, the priority should be:

1. **Legal pages** — complete before any public launch
2. **Basic SEO** — robots.txt, sitemap, unique titles
3. **OG tags** — essential for viral sharing of the landing page
4. **Analytics** — track email signups from day one

---

*Generated by Hermes Agent — Galhardo internal tooling*
