Angular
Get Started

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:

bash
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:

src/app/app.config.client.ts
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:

src/main.ts
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)

Not using Server-Side Rendering? You can skip this step.

If you're using Angular Universal or another SSR setup, you'll need to configure Unhead for the server:

src/app/app.config.server.ts
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:

src/main.server.ts
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:

src/app/app.component.ts
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:

src/app/counter.component.ts
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:

Did this page help you?