Content & media
SEO & site settings
Titles, descriptions, structured data, robots.txt and sitemap.xml — all derived.
What a page says to a machine is derived, never stored twice. Titles, robots directives, structured data, robots.txt and sitemap.xml all come out of the site settings plus the page — and a value nobody filled in is not emitted, because an empty <meta> is worse than none.
Site
| Setting | Used for |
|---|---|
| Site name | the document title, og:site_name, structured data |
| Language | the html lang attribute |
| Tagline / description | the default meta description |
| Region | og:locale, where a network wants de_DE rather than de |
| Theme colour | the browser UI on mobile |
| Production URL | canonical links, og:url, the sitemap, structured data |
| Favicon, Logo | /public paths; the logo also goes into structured data |
Everything that needs an absolute address waits for the production URL. Set it before you publish.
Titles
One template, not a suffix retyped into every page:
%s — %site → "Pricing — Harbour Studio"%s is the page's own title and %site the site name. The homepage rarely wants to be called "Home", so it has its own field. Renaming the site — or carrying a preset into another project — cannot leave the old name in every tab.
Per page
A page carries only the three things that are about it: its title, its description and its share image, plus a hidden from search switch that emits noindex, nofollow and drops it from the sitemap. Everything else answers a question a page cannot.
Structured data
Fill in the publisher — name, kind (organisation, local business or person), email, phone, address — and sitereal emits the JSON-LD for it alongside a WebSite node. A shop with an address is a local business; a portfolio is a person. Leave it empty and nothing is emitted.
robots.txt and sitemap.xml
Real files under public/, rewritten on every build and removed again when you switch them off:
# generated by sitereal
User-agent: *
Allow: /
Sitemap: https://example.com/sitemap.xmlThey are only ever touched while they still carry the generated by sitereal marker. Take one over by hand — delete that line — and sitereal will never write it again.
You can append your own rules (a path to keep out of search, a crawler to turn away) and add verification tokens for Google, Bing, Yandex and Pinterest.
Where head tags come from
New head tags go through the layout's head slot, from the emitter — never into src/layouts/PlainBase.astro. That layout is copied into the project at scaffold time and is your file from then on, so a tag added to our copy would never reach a project made last month.
<Base title="Pricing" description="What it costs.">
<Fragment slot="head">
<meta name="robots" content="index, follow, max-image-preview:large" />
<meta property="og:locale" content="en" />
</Fragment>
…
</Base>If you want a tag on every page that sitereal does not emit, add a snippet with the head placement.
The cookie banner
An optional, dependency-free consent banner: text, an accept label, an optional decline label, a link to your policy, and where it sits. It is markup and a small script, emitted like anything else — not a third-party widget.