---
title: "entries:resolve Hook"
description: "Hook for selecting or inspecting head entries before they are normalized into tags."
canonical_url: "https://unhead.unjs.io/docs/head/api/hooks/entries-resolve"
last_updated: "2026-07-20T12:13:27.763Z"
---

The `entries:resolve` hook runs at the start of tag resolution, before Unhead normalizes individual entries. It receives a snapshot of the active entries and the resolution context.

## Hook Signature

```ts
export interface Hook {
  'entries:resolve': (ctx: EntryResolveCtx<any>) => SyncHookResult
}

interface EntryResolveCtx<T> {
  tags: HeadTag[]
  entries: HeadEntry<T>[]
}
```

### Parameters

<table>
<thead>
  <tr>
    <th>
      Name
    </th>
    
    <th>
      Type
    </th>
    
    <th>
      Description
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        ctx.entries
      </code>
    </td>
    
    <td>
      <code>
        HeadEntry<any>[]
      </code>
    </td>
    
    <td>
      Snapshot of the entries about to be normalized
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        ctx.tags
      </code>
    </td>
    
    <td>
      <code>
        HeadTag[]
      </code>
    </td>
    
    <td>
      Resolution array; it is empty when this hook begins
    </td>
  </tr>
</tbody>
</table>

This hook is synchronous. Mutating `ctx.entries` changes which entries are processed during the current resolution. Entries pushed onto the head itself while resolution is underway are deferred until the next render.

## Usage Example

```ts
import { defineHeadPlugin } from '@unhead/dynamic-import/plugins'

export const inspectEntriesPlugin = defineHeadPlugin({
  key: 'inspect-entries',
  hooks: {
    'entries:resolve': ({ entries }) => {
      console.log(`Resolving ${entries.length} head entries`)
    }
  }
})
```

Use [`entries:normalize`](/docs/head/api/hooks/entries-normalize) to change the normalized tags produced by each entry. Use one of the `tags:*` hooks to inspect or modify the deduplicated tag set.
