Blog
Introduction

Migration

Learn how to migrate your project to the latest version of Bloggrify.

Migrating from v3.1 to v3.2

The site URL moves back to app.config.ts

This is the only breaking change of this release, and it only concerns you if you set BASE_URL.

The public URL of your blog is now read from the url key of your app.config.ts, and it takes precedence over the BASE_URL environment variable:

app.config.ts
export default defineAppConfig({
  url: 'https://www.example.com',
})

BASE_URL still works as a fallback when url is absent, so a project that never set url keeps working untouched. But if you set both and they disagree, app.config.ts now wins where BASE_URL used to. The build warns you when it spots the disagreement, so you are not left guessing.

What to do: check that url in your app.config.ts really is your public URL. Once it is, you can drop BASE_URL from your .env and your deployment settings.

This value is not cosmetic: it drives the canonical tags, og:url, the sitemap and the RSS feed. Pointing it at the wrong domain tells search engines your content belongs to somebody else.

Why the change

Version 2.0 moved this setting out of app.config.ts and into BASE_URL. That was a workaround rather than a design decision: the SEO modules Bloggrify integrates could only read the site URL from the environment at the time. They now expose a Nitro hook, so the setting can live next to the rest of your site identity, which is where it belonged in the first place.

Migrating from v1.8 to v2.0

Version 2.0 of Bloggrify introduces a few breaking changes. This guide will help you migrate your existing project to the latest version.

There is two versions of this migration guide:

  • one for general users
  • one for theme developers

For general users

Configuration

Base URL

The url of the website is now configured in the .env file. You have to define the BASE_URL variable in this file, or available in the environment variables.

It replaces the url property in the app.config.ts file.

This was reverted in 3.2: the site URL lives in app.config.ts again, and BASE_URL is only a fallback. See Migrating from v3.1 to v3.2.
SITE_INDEXABLE

By default, the whole website is not indexable by search engines. The robots.txt disallows all robots to crawl the website and the sitemap is empty.

You can change this by setting the SITE_INDEXABLE option to true in the .env file.

SITE_INDEXABLE=false

Analytics

It is now possible to add several analytics services to your website by adding them in the analytics property of the app.config.ts file.

Before:

analytics: {
    provider: 'fathom',
    fathom: {
        code: 'YOUR_CODE'
    }
}

After:

analytics: {
  providers: [ {
    provider: 'hakanai',
    code: 'YOUR_CODE'
  }]
}

The format of the alternate links in the frontmatter of the markdown file has changed.

Before:

---
language: "fr"
alternates:
  - en: "/2025/01/2024-review"
---

After:

---
alternates:
  - hreflang: "en"
    href: "/2025/01/2024-review"
  - hreflang: "fr"
    href: "/fr//2025/01/2024-review"
---

For theme developers

layouts

All layouts have been simplified and needs less props.

default.vue and home.vue layout:

defineProps<{
    doc: unknown;
}>()

archives.vue layout don't need any props. You may use the MinimalistListing component to display the list of articles, or you can create your own component.

tag.vue layout:

defineProps<{
    tag: string;
}>()

and category.vue layout:

defineProps<{
    category: string;
}>()

Both can use the MinimalistListing component to display the list of articles.

Example of tag.vue layout:

<template>
  <MinimalistListing format="list" :tag="tag"/>
</template>
Copyright © 2026