Runable v1.0.0-alpha.20
Why Runable? Docs Modules Work with AI Blog About Changelog
  • 01Why Runable?
  • 02Docs
  • 03Modules
  • 04Work with AI
  • 05Blog
  • 06About
  • 07Changelog
Vue without a fixed server runtime.
Getting Started Structure Integrations Guide MCP API
  • Getting Started Structure Integrations Guide MCP API
Build the Interface
  • Routing
  • Layouts
  • Middlewares
  • Error Handling
Load and Render
  • Data Fetching
  • SSR and CSR
  • Head and SEO
Extend Runable
  • Auto-imports
  • Plugins
  • Modules
Configure and Ship
  • Runtime Configuration
  • CSS and Assets
  • Production Build
CLI
  • Overview
  • Create
  • Prepare
  • Build
  • MCP
  • AI Skills
  • Inspector

Head and SEO

Define global and page-specific HTML metadata with Unhead.

Runable installs Unhead and its Schema.org integration. Metadata produced during SSR is injected into the document before it is sent.

Define global values

// runable.config.ts
export default defineConfig({
  siteUrl: "https://example.com",
  head: {
    titleTemplate: "%s · Acme",
    meta: [{ name: "description", content: "Manage your projects with Acme." }],
    link: [{ rel: "icon", href: "/favicon.svg" }],
  },
});

siteUrl provides the origin Schema.org uses to build absolute URLs.

Configure a page

<script setup lang="ts">
const project = ref({ name: "Runable", summary: "A Vue application with your backend." });

useSeoMeta({
  title: () => project.value.name,
  description: () => project.value.summary,
  ogTitle: () => project.value.name,
  ogDescription: () => project.value.summary,
});
</script>

Getters keep metadata synchronized with reactive values.

Add arbitrary elements

useHead({
  htmlAttrs: { lang: "en" },
  link: [{ rel: "canonical", href: "https://example.com/projects" }],
});

Use useHeadSafe() when values come from an untrusted source. injectHead() gives advanced integrations direct access to the Unhead instance.

Declare structured data

import { defineWebPage } from "@unhead/schema-org";

useSchemaOrg([
  defineWebPage({
    name: "Projects",
    description: "List of public projects",
  }),
]);

useSchemaOrg() is auto-imported. Explicitly import the Schema.org node helpers your page needs when your configuration does not expose them.

One global source, local overrides

Put shared values in head and declare only route- or content-specific data in pages.

Report an issue Edit this page
SSR and CSR

Choose the application's rendering mode and isolate browser-only code.

Auto-imports

Automatically use application components, composables, and global functions.

On this page

  • 1Define global values
  • 2Configure a page
  • 3Add arbitrary elements
  • 4Declare structured data
Runable

The Vue framework that brings productive conventions to any backend.

Product

  • Why Runable
  • Documentation
  • Installation
  • Integrations

Project

  • About
  • Blog
  • Changelog
  • Sponsor

Community

  • GitHub
  • Issues
  • Discussions
  • Bluesky

© 2026 Runable. Released under the MIT License.

Open source Built with Vue and Runable