Preview 1 of 4
Bilingual editorial Astro blog theme, migration-ready SEO
Editorial Astro blog theme in French and English, with configurable permalinks, redirects and a coverage check to move an existing blog without losing its URLs.
Overview
Description
This theme is for bloggers, editorial teams and agencies who want to move an existing blog to Astro while keeping its addresses, for example to migrate from Webflow or WordPress. It gives you a complete editorial blog in French and English, and the machinery that protects URLs during a migration: permalinks you set to match the shape of your old addresses, redirects kept in a single file, and a check that lists, before the switch, every old URL that would end up as a 404. A migration guide, in English and French, walks through the method in order.
The theme helps you migrate without losing your URLs; it guarantees no ranking. It has no automatic importer: you convert your old content to Markdown by following the guide. And in the weeks after the switch, search engines need a stable site to settle, even when every address is kept.
Specifications
| Page templates | 7 |
|---|---|
| Languages | 2 |
| Demo posts | 8 in French, 6 in English |
| Client-side JavaScript | 0 KB |
| Formats | Astro 7, Markdown, TypeScript, CSS |
| License | commercial (page in French) |
| Version | 1.0.0 of November 10, 2026 |
Contents
- 7 page templates, in French and English: home, paginated article list, article, category, author, simple page and 404 page, plus an RSS feed per language. The article page includes a breadcrumb, a table of contents built from the headings, reading time, an author block, an optional FAQ, related articles from the same category and links to the previous and next articles.
- 2 languages out of the box: the default language at the root, the other under a prefix (
/en). The code accepts more: add the language to the configuration and translate its dictionary. - A single configuration file,
theme.config.ts: site URL, languages, site name per language, publisher for structured data, articles per page and the permalink pattern of each page type. - Configurable permalinks, with the tokens
:slug,:year,:month,:day,:categoryand:page. The guide gives presets to keep the addresses of an old site (/post/:slug,/:slug,/:year/:month/:day/:slug,/:category/:slug). The build fails, naming both files, if two pages land on the same address or a permalink clashes with a fixed page. - A required, frozen slug in each article’s frontmatter: the URL never depends on the file name, and an accented slug stays valid.
- Search engine machinery, produced by a single route table: canonical URLs,
hreflangpairs (only between published translations),noindex, a sitemap that leaves out pages not meant to be indexed,robots.txtand JSON-LD structured data (BlogPosting,BreadcrumbList,FAQPage,CollectionPage,ProfilePage,WebSite). - Redirects in a single file,
redirects.json, written as 301 rules todist/_redirectsfor your host. The build rejects a chain, a loop, a missing destination or a source that hides a page. - URLs without a trailing slash, everywhere: internal links, canonicals,
hreflangand sitemap. - Two checks to run before the switch:
npm run check:coveragecompares your old URLs (CSV export of the Pages report from Google Search Console, a URL list or the old site’s sitemap) with the built site and lists the orphans sorted by clicks;npm run check:seochecks canonicals,hreflangpairs, the sitemap, JSON-LD, internal links and redirects. - A migration guide in 7 parts, in English and French: inventory of old URLs, content export from Webflow or WordPress, mapping fields to frontmatter, slugs copied exactly, permalinks and redirects, coverage check, switch day and the weeks after.
- A demo magazine, made up, about the book trades: 8 articles in French and 6 in English, 14 articles in all, including 6 translation pairs. The French articles without a translation show the case of a standalone page and of a
noindexpage. The built demo has 36 pages, and itsredirects.jsonholds 3 sample redirects, from an old/post/...permalink to/blog/.... - 8 demo covers as 1,600 × 900 px WebP files, to replace with your own images.
- Version 1.0.0, with its changelog.
Theme files:
README.md, README.fr.md, CHANGELOG.md
package.json, package-lock.json, .nvmrc
theme.config.ts, astro.config.mjs, tsconfig.json
redirects.json
src/content/ (articles, authors, categories and pages, one folder per language)
src/components/, src/layouts/, src/lib/, src/pages/, src/styles/
src/assets/demo/ (demo covers)
integrations/ (writes _redirects and _headers)
scripts/ (check-seo.mjs, check-coverage.mjs)
docs/ (migration guide in English and French, sample export)
The license text, LICENCE.txt, sits at the root of the downloaded archive.
Production and AI
The theme’s code (Astro, TypeScript, CSS) and demo texts were produced with an AI assistant (anthropic-claude), then reviewed and checked: build, type check, SEO checks, accessibility, contrast and spacing grid were run again before release. The 8 demo covers are AI-generated illustrations (krea-2 model), colour-graded, cropped to 16:9 and upscaled to 1,600 × 900 px; they ship under the same license as the theme and are meant to be replaced with your own images. The demo content is made up.
Formats and compatibility
- Astro 7, static output, no JavaScript sent to the browser (0 KB client-side): AVIF and WebP images, hero image loaded with priority, body font preloaded.
- Node 22.23.4 or later. The
.nvmrcfile pins Node 24, the version the theme was built and tested on. - Markdown for content, with a strict frontmatter: an unknown field or a duplicate slug within a language fails the build.
- TypeScript for the configuration and the theme code.
- CSS with no framework: every spacing, size and colour comes from
src/styles/tokens.css, in multiples of 4 px. Light and dark colours follow the visitor’s system setting, with no toggle. - Fonts: Newsreader and Instrument Sans, under the SIL Open Font License 1.1, referenced from npm (
@fontsource-variable/newsreaderand@fontsource-variable/instrument-sans) and installed with the dependencies. No font file in the archive, no request to an external font service. - Hosting: any static host that serves
blog/my-article.htmlat/blog/my-articleand reads_redirectsand_headers, or lets you copy those rules into its settings. Optionally, Astro’s Node adapter serves the 301 redirects from the application, from the sameredirects.json.
What was checked on the demo:
- lab performance, accessibility, best practices and SEO, on mobile, median of 3 runs on 4 pages: performance from 98 to 100, the other three scores at 100;
- no violation found by an automated accessibility test, at 4 widths, in light and dark;
- contrast of at least 6.28:1, muted text included;
- no horizontal scroll at 320, 375, 768 and 1,440 px wide;
- reciprocal
hreflangpairs, canonicals, sitemap and redirects checked bycheck:seo.
Good to know before you buy:
- The theme does not convert your old content: the guide covers the export, the conversion to Markdown and the field mapping.
- Remove the demo content before changing permalinks: its articles link to each other through hard-coded paths, which
check:seoreports as errors as soon as the pattern changes. - The coverage check compares paths without trailing slash or host. The
/my-article/to/my-articleredirect and the host redirect (with or withoutwww) are set at your host: test them on a preview URL before the switch. - Page titles matter as much as URLs: copy the old title into
seoTitlewhen it differs from the theme’s format. No check reports it. - Change the technology, not the content: no redesign, no rewriting, no renamed slug during the migration, and keep your redirects for the long term, including once traffic is back.
- A navigation longer than the demo’s may overflow at tablet width: check it with your own links.
- Not included: MDX, search, comments, newsletter form, light or dark toggle, share buttons, wildcard redirects.
License
The theme is sold with the commercial license (in French): you may use and modify it for your personal and professional sites, including for clients, but you may not resell, share or redistribute its files, even modified, or publish them as a reusable theme or template, public repositories included.
Version history
1.0.0 (10 November 2026): first release.




