Installing Unhead with Angular
Unhead provides first-class support for Angular, allowing you to manage your head tags using composables like useHead()
, useSeoMeta()
, and others within your Angular components.
Setup
1. Add Dependency
Install the Angular-specific Unhead package:
pnpm add @unhead/angular
2. Setup Client-Side Rendering
To enable Unhead in your Angular application, you need to set up the client provider. This is typically done by creating or modifying your application configuration:
import { ApplicationConfig, mergeApplicationConfig } from '@angular/core'
import { provideClientHead } from '@unhead/angular/client'
import { appConfig } from './app.config'
const clientConfig: ApplicationConfig = {
providers: [
provideClientHead(),
]
}
export const config = mergeApplicationConfig(appConfig, clientConfig)
Then use this configuration in your main client-side bootstrap file:
import { bootstrapApplication } from '@angular/platform-browser'
import { AppComponent } from './app/app.component'
import { config } from './app/app.config.client'
bootstrapApplication(AppComponent, config)
.catch(err => console.error(err))
3. Setup Server-Side Rendering (Optional)
If you're using Angular Universal or another SSR setup, you'll need to configure Unhead for the server:
import { ApplicationConfig, mergeApplicationConfig } from '@angular/core'
import { provideServerRendering } from '@angular/platform-server'
import { provideServerRoutesConfig } from '@angular/ssr'
import { provideServerHead } from '@unhead/angular/server'
import { appConfig } from './app.config'
import { serverRoutes } from './app.routes.server'
const serverConfig: ApplicationConfig = {
providers: [
provideServerRendering(),
provideServerRoutesConfig(serverRoutes),
provideServerHead({
// Optional initial default values
init: [
{
htmlAttrs: {
lang: 'en',
},
title: 'Default Title',
meta: [
{ name: 'description', content: 'Default description' }
]
}
]
}),
]
}
export const config = mergeApplicationConfig(appConfig, serverConfig)
Then use this configuration in your server bootstrap file:
import { bootstrapApplication } from '@angular/platform-browser'
import { AppComponent } from './app/app.component'
import { config } from './app/app.config.server'
const bootstrap = () => bootstrapApplication(AppComponent, config)
export default bootstrap
4. Using Unhead in Components
Once set up, you can use Unhead's composables in your Angular components:
import { Component } from '@angular/core'
import { useHead, useSeoMeta } from '@unhead/angular'
@Component({
selector: 'app-root',
template: `
<h1>{{ pageTitle }}</h1>
<router-outlet></router-outlet>
`
})
export class AppComponent {
pageTitle = 'My Angular App'
constructor() {
// Basic head management
useHead({
title: 'My Angular App',
meta: [
{ name: 'description', content: 'An Angular app using Unhead' }
],
link: [
{ rel: 'icon', href: '/favicon.ico' }
]
})
// Dedicated SEO meta tags helper
useSeoMeta({
description: 'An Angular app using Unhead for SEO'
})
}
}
Reactive Head Management
Unhead's Angular integration works seamlessly with Angular's reactivity system. You can use Angular's signals to create reactive head content:
import { Component, signal } from '@angular/core'
import { useHead } from '@unhead/angular'
@Component({
selector: 'app-counter',
template: `
<button (click)="incrementCounter()">Count: {{ counter() }}</button>
`
})
export class CounterComponent {
counter = signal(0)
head = useHead()
constructor() {
useHead({
title: () => `Counter: ${this.counter()}`
})
}
incrementCounter() {
this.counter.update(value => value + 1)
}
}
For more details on reactivity, check the Angular Reactivity Guide.
Default Tags
By default, Unhead will insert important tags for you:
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
You can customize these defaults or add additional ones through the init
option in the server configuration as shown above.
Next Steps
Your Angular app is now ready for head management! 🎉
Explore the available composables:
Or explore additional functionality:
- Learn about reactivity in Angular
- Add structured data with
useSchemaOrg()
- Explore title templates for consistent page titles