Service
A website should be files on a disk, not a server somebody keeps alive.
Astro renders every page ahead of time, so what a visitor gets is a file. That removes the whole class of problems which exists only because something is running behind a company website. This site is configured that way, and it is the shape we configure for customers.
What this involves
-
Static output instead of a running application
Every page is rendered at build time and served as a file. There is no application server to keep alive behind a company website, no session store, and at request time nothing for an attacker to reach.
-
Two languages whose routes belong together
Both language versions live in one route table, so every page knows its counterpart. hreflang, the language switch and the sitemap are generated from that table instead of being maintained in three places that drift apart.
-
Structured data and sitemap from the same source
schema.org markup as JSON-LD per page type and a generated sitemap, both configured to the specification you give us rather than to the default of an extension. What a machine reads and what a person reads come out of one file.
-
Content as data, pages as thin wrappers
Texts live in typed data files and the page is only the wrapper around them. Adding a page means adding data, which is why a site of this shape is still maintainable by whoever comes after the person who set it up.
-
What the build produces, and how it reaches the server
Image variants and self-hosted fonts are produced during the build, so nothing is fetched from a third party while a visitor waits. Delivery is copying the resulting directory into the web root; going back a version is putting the previous directory back.
What we use
-
Framework
- Astro
- TypeScript
-
Structured data
- schema.org
- JSON-LD
-
Sitemap & routes
- @astrojs/sitemap
- hreflang route table
-
Assets
- Astro image pipeline
- self-hosted fonts
-
Delivery
- Git
- GitHub Actions
- nginx
Is this the problem you have?
If it is adjacent rather than exact, say so anyway — the useful conversations usually start that way.