---
title: "Deduping Nodes"
description: "Automatic Schema.org node deduplication by @id. Add multiple nodes of same type with custom IDs, replace vs merge strategies."
canonical_url: "https://unhead.unjs.io/docs/schema-org/guides/core-concepts/deduping-nodes"
last_updated: "2026-06-24T02:27:07.270Z"
---

**Quick Answer:** Schema.org nodes are automatically deduplicated by their `@id`. Only one node of each type (like `WebPage`) can exist by default. Later definitions merge with earlier ones unless you specify a custom `@id`.

## How does node deduplication work?

When generating many of the Schema.org nodes a default global `@id` is used to help with best practices.

For example:

```ts
import { defineOrganization, useSchemaOrg } from '@unhead/schema-org/@framework'

useSchemaOrg([
  defineOrganization() // generates the nodes with an #identity id
])
```

This allows the node relations to be automatically mapped for best practices.

```ts
import { defineWebPage, useSchemaOrg } from '@unhead/schema-org/@framework'

useSchemaOrg([
  defineWebPage() // knows to link the #identity id
])
```

## How do I add multiple nodes of the same type?

The default `@id` can prevent having multiple nodes of the same type. Provide your own `@id` to create separate nodes:

```ts
import { defineOrganization, useSchemaOrg } from '@unhead/schema-org/@framework'

useSchemaOrg([
  defineOrganization({
    '@id': '#some-company'
  })
])
```

## How do I replace a node instead of merging?

Use `tagDuplicateStrategy: 'replace'` to fully replace a node instead of merging properties:

```ts
import { defineOrganization, useSchemaOrg } from '@unhead/schema-org/@framework'

useSchemaOrg([
  defineOrganization({
    '@id': '#some-company',
    'name': 'Bar Company',
    'url': 'https://bar.com',
  }),
])

useSchemaOrg([
  defineOrganization({
    '@id': '#some-company',
    'name': 'Foo Company',
  })
], {
  tagDuplicateStrategy: 'replace'
})

// Replaced!
// {
//   '@id': '#some-company',
//   name: 'Foo Company',
// }
```
