---
title: "Custom Nodes · v2 · Unhead"
meta:
  "og:description": "Learn how to implement custom nodes for your Schema.org."
  "og:title": "Custom Nodes · v2 · Unhead"
  description: "Learn how to implement custom nodes for your Schema.org."
---

**Recipes**

# **Custom Nodes**

**On this page **

- [Why Create Custom Schema.org Nodes?](#why-create-custom-schemaorg-nodes)
- [How Do I Add TypeScript Support for Custom Nodes?](#how-do-i-add-typescript-support-for-custom-nodes)
- [Related Recipes](#related-recipes)

**Quick Answer:** Create custom Schema.org nodes by passing a plain object to `useSchemaOrg()`. Use `@type` for the schema type and any valid Schema.org properties.

## [Why Create Custom Schema.org Nodes?](#why-create-custom-schemaorg-nodes)

If you need to add a node that isn't officially implemented, you can provide it yourself. This is useful for:

- Niche schema types not covered by built-in helpers
- Emerging schema types not yet added to the library
- Highly specific industry schemas

Custom nodes are plain objects following the [**Schema.org specification**](https://schema.org/docs/full.html).

```
import { useSchemaOrg } from '@unhead/schema-org/solid-js'

useSchemaOrg([
  {
    '@type': 'SingleFamilyResidence',
    'numberOfRooms': 3,
    'occupancy': 5,
    'numberOfBathroomsTotal': 2,
    'floorSize': '2000 sqft',
    'petsAllowed': true,
  }
])
```

## [How Do I Add TypeScript Support for Custom Nodes?](#how-do-i-add-typescript-support-for-custom-nodes)

Use [**schema-dts**](https://github.com/google/schema-dts) for full TypeScript support with custom nodes.

```
import type { DefinedTerm } from 'schema-dts'
import { useSchemaOrg } from '@unhead/schema-org/solid-js'

useSchemaOrg([
  <DefinedTerm> {
    '@type': 'DefinedTerm',
    'name': 'Unhead Schema.org',
    'description': 'Unhead Schema.org is a library for adding Schema.org to your application.',
    'inDefinedTermSet': {
      '@type': 'DefinedTermSet',
      'name': 'Schema.org Libraries',
    },
  }
])
```

## [Related Recipes](#related-recipes)

- [**Setting Up Your Identity**](https://unhead.unjs.io/docs/v2/schema-org/guides/recipes/identity) - Define your organization/person
- [**Blog Posts**](https://unhead.unjs.io/docs/v2/schema-org/guides/recipes/blog) - Article structured data
- [**eCommerce**](https://unhead.unjs.io/docs/v2/schema-org/guides/recipes/e-commerce) - Product structured data

[Edit this page](https://github.com/unjs/unhead/edit/v2.1.2/docs/v2/schema-org/2.guides/4.recipes/0.custom-nodes.md)

**Did this page help you? **

[**Schema.org Params** Change the behaviour of your integration.](https://unhead.unjs.io/docs/v2/schema-org/guides/core-concepts/params) [**Identity** Learn how to choose an identity for your Schema.org.](https://unhead.unjs.io/docs/v2/schema-org/guides/recipes/identity)

**On this page **

- [Why Create Custom Schema.org Nodes?](#why-create-custom-schemaorg-nodes)
- [How Do I Add TypeScript Support for Custom Nodes?](#how-do-i-add-typescript-support-for-custom-nodes)
- [Related Recipes](#related-recipes)