Static, multilingual guide that catches travellers in the planning phase — before they pay for a booking — and warns them about the traps they don’t know about yet: the physical-credit-card deposit requirement, deposit amounts (€1,200–1,900), rubber clauses and no-show cancellation terms. The debit-card problem is the strongest topic, but the site also serves credit-card holders.
Main features:
/portugal/company/{slug}/ (EN) and
/portugal/cs/company/{slug}/ targeting planning-phase queries like “Goldcar
Lisbon review”, “is Centauro reliable” — verdict, deposit detail, rubber
clauses, cancellation terms/portugal/{slug}/, one
per distinct high-intent query so each ranks for its own phrase instead of
competing with the homepage or company pages — content lives in
content/topics.en.json19 mutations targeting European countries where credit cards are uncommon (debit-card-first markets), plus English as the primary SEO language:
en (root, x-default) · cs sk de pl hu nl fr it da fi
lt lv et ro bg hr sl uk
Each language lives at /portugal/{lang}/, English at /portugal/. All pages
cross-link via hreflang and are listed in sitemap.xml.
Per-company pages are generated for every language that has a
content/companies.{lang}.json file (currently en and cs — brief phase 1;
add a file to add a language).
node build.js → dist/locales/{lang}.json (English = master); rental-company
facts (booleans, deposit acceptance, T&C links, verification date) live in
data/vendors.jsonschema.org FAQPage + Article JSON-LD, OG tags.github/workflows/deploy.yml (on push to main)/updates/ (every language) lists dated entries of when the rental
companies’ terms were actually re-checked — a genuine, honest freshness
signal for search engines, not a manufactured one.
To add an entry, append to data/updates.json:
{ "date": "2026-07-12", "type": "verified", "vendors": ["goldcar", "centauro"], "note": "" }
type: "verified" (no changes found) or "changed" (something in the
terms actually changed — use note to say what).vendors: ids of the companies you actually checked that day (subset of
data/vendors.json, doesn’t have to be all eight).lastmod/dateModified (and its sitemap entry) automatically
use the newest entry’s date — no other file needs editing.en and cs have translated updates.* strings in locales/; other
languages fall back to English until translated (build prints a warning,
doesn’t fail).data/vendors.json (acceptance flags, T&C link, verified date).locales/*.json
(table.vendors.{id}).dateModified in site.config.json, run node build.js, push.A locale missing a key falls back to the English string and the build prints a warning, so partial updates never break the site.
The site lives at rentwithdebit.com/portugal/ — the domain has no country in
its name on purpose, so future countries (Spain, other airports — see brief
phase 3) can each get their own top-level prefix (/spain/, etc.) without
breaking this one. rentwithdebit.com/ itself is a noindex redirect stub to
/portugal/, generated by the build.
site.config.json drives this:
baseUrl — the domain (https://rentwithdebit.com)pathPrefix — the country prefix (/portugal); every canonical, hreflang,
sitemap entry and internal link is generated relative to it via
path.relative() in build.js, so adding a second country later is just
another prefix, not a rewriteCNAME file (from baseUrl’s hostname) into
dist/, which deploy-pages reads to configure the GitHub Pages custom
domain automaticallyOne-time manual steps (outside this repo, need repo/DNS access):
A
records to 185.199.108.153, 185.199.109.153, 185.199.110.153,
185.199.111.153 (add AAAA records too if you want IPv6). If you’d
rather use www.rentwithdebit.com, a CNAME record to
michalprouza.github.io works instead.