# SEO
URL: /docs/features/seo
SEO utilities to make sure your page is represented correctly and ranks on Google
## Utility functions
[ship.pluv.io](https://ship.pluv.io) comes with several utility functions to ensure each of your pages have the relevant SEO tags and data to be represented correctly and ranked on search engines.
### getSeoMetadata
The `getSeoMetadata` function defines a central location where your site-wide defaults for SEO metadata can be configured. The default values for this function are defined within the following config file: `/packages/configs/defaultSeoMetadata.js`.
```tsx title="page.tsx"
import { getSeoMetadata } from "@workspace/utils";
import type { Metadata } from "next";
// As a value
export const metadata: Metadata = getSeoMetadata({
// You can provide properties to overwrite the defaults
title: "My custom title",
description: "My custom description",
});
// If you need to dynamically generate metadata, export `generateMetadata`
// instead, and provide a function parameter to getSeoMetadata
export const generateMetadata = getSeoMetadata(async () => {
const details = await getMyMetadataDetails(/* ... */);
return {
// You can provide properties to overwrite the defaults
title: details.title,
description: "My custom description",
};
});
```
#### Tips
* Next.js will [automatically merge metadata](https://nextjs.org/docs/app/api-reference/functions/generate-metadata#merging) objects shallowly for a given route. So often times, you should only need to call `getSeoMetadata` in each Next.js app's root layout. Then for all other pages/layouts, you can just export the metadata partial object containing the fields you wish to overwrite.
### JsonLd
Type-safe SEO rich snippets via the `JsonLd` component. This component can represent either a single entity or a graph containing multiple entities.
Once the `@type` property is provided, TypeScript will infer the correct attributes for that entity so you can provide the other properties of those entities confidently.
Render this in your page component wherever you wish to provide this.
```tsx title="page.tsx"
import { JsonLd } from "@workspace/ui/custom/JsonLd";
// As a single entity