File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -64,10 +64,10 @@ generateMetadata({ title: "About" })
6464// Output: <title>About | My Site</title>
6565
6666generateMetadata ({ title: null })
67- // Output: <title>Default Title | My Site </title>
67+ // Output: <title>Default Title</title>
6868
6969generateMetadata ({})
70- // Output: <title>Default Title | My Site </title>
70+ // Output: <title>Default Title</title>
7171```
7272
7373To opt out of the title template on a specific page, use ` title.absolute ` :
@@ -77,6 +77,8 @@ generateMetadata({ title: { absolute: "Home" } })
7777// Output: <title>Home</title> (template is ignored)
7878```
7979
80+ ` %s ` placeholders are all replaced. For example, ` template: "%s | %s | My Site" ` with ` title: "Docs" ` renders ` <title>Docs | Docs | My Site</title> ` .
81+
8082## Reference
8183
8284### ` generateMetadata `
Original file line number Diff line number Diff line change @@ -67,13 +67,13 @@ describe("createMetadataGenerator", () => {
6767 test ( "uses default when title is null" , ( ) => {
6868 const result = generateMetadata ( { title : null } ) ;
6969
70- expect ( result . meta ) . toContainEqual ( { title : "My Site | My Site " } ) ;
70+ expect ( result . meta ) . toContainEqual ( { title : "My Site" } ) ;
7171 } ) ;
7272
7373 test ( "uses default when title is undefined" , ( ) => {
7474 const result = generateMetadata ( { } ) ;
7575
76- expect ( result . meta ) . toContainEqual ( { title : "My Site | My Site " } ) ;
76+ expect ( result . meta ) . toContainEqual ( { title : "My Site" } ) ;
7777 } ) ;
7878
7979 test ( "ignores template when title is absolute" , ( ) => {
@@ -145,5 +145,15 @@ describe("createMetadataGenerator", () => {
145145
146146 expect ( result . meta ) . toContainEqual ( { title : " | Site" } ) ;
147147 } ) ;
148+
149+ test ( "replaces all %s placeholders" , ( ) => {
150+ const generateMetadata = createMetadataGenerator ( {
151+ titleTemplate : { default : "Site" , template : "%s | %s | Site" } ,
152+ } ) ;
153+
154+ const result = generateMetadata ( { title : "Docs" } ) ;
155+
156+ expect ( result . meta ) . toContainEqual ( { title : "Docs | Docs | Site" } ) ;
157+ } ) ;
148158 } ) ;
149159} ) ;
Original file line number Diff line number Diff line change @@ -34,12 +34,16 @@ function resolveTitle(
3434 ) {
3535 title = metadata . title . absolute ;
3636 } else {
37- title = options . titleTemplate
38- ? options . titleTemplate . template . replace (
39- "%s" ,
40- metadata . title ?? options . titleTemplate . default ,
41- )
42- : metadata . title ;
37+ const { titleTemplate } = options ;
38+ if ( ! titleTemplate ) {
39+ title = metadata . title ;
40+ } else {
41+ if ( typeof metadata . title === "string" ) {
42+ title = titleTemplate . template . split ( "%s" ) . join ( metadata . title ) ;
43+ } else {
44+ title = titleTemplate . default ;
45+ }
46+ }
4347 }
4448
4549 return title ;
Original file line number Diff line number Diff line change @@ -2,7 +2,7 @@ import { createMetadataGenerator } from "tanstack-meta";
22
33export const generateMetadata = createMetadataGenerator ( {
44 titleTemplate : {
5- default : "TanStack" ,
5+ default : "TanStack | High Quality Open-Source Software for Web Developers " ,
66 template : "%s | High Quality Open-Source Software for Web Developers" ,
77 } ,
88} ) ;
Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ export const Route = createRootRoute({
1717
1818 const { meta, links } = generateMetadata ( {
1919 charSet : "utf-8" ,
20+ title : "TanStack" ,
2021 viewport : {
2122 width : "device-width" ,
2223 initialScale : 1 ,
You can’t perform that action at this time.
0 commit comments