1+ import type { ReactNode } from 'react'
2+
13import { Metadata , Viewport } from 'next'
2- import { CONFIG } from '@/const/meta'
4+ import { headers } from 'next/headers'
5+
36import { Providers } from './providers'
7+
8+ import { CONFIG } from '@/const/meta'
9+ import { checkEnvironment } from '@/util/environment'
410import { getPageMetadata } from '@/util/getPageMetadata'
511
612export const viewport : Viewport = {
@@ -12,42 +18,61 @@ export const viewport: Viewport = {
1218
1319const defaultMetadata = getPageMetadata ( { description : CONFIG . description } )
1420
15- export const metadata : Metadata = {
16- ...defaultMetadata ,
17- metadataBase : new URL ( CONFIG . url . root ) ,
18- alternates : { canonical : './' } ,
19- icons : {
20- icon : [
21- { url : '/favicon-light-mode.png' , type : 'image/png' , media : '(prefers-color-scheme: light)' } ,
22- { url : '/favicon-dark-mode.png' , type : 'image/png' , media : '(prefers-color-scheme: dark)' } ,
23- { url : '/favicon-dark-mode.png' , type : 'image/png' , media : '(prefers-color-scheme: no-preference)' } ,
24- ] ,
25- apple : '/apple-touch-icon.png' ,
21+ export async function generateMetadata ( ) : Promise < Metadata > {
22+ const headersList = await headers ( )
23+ const host = headersList . get ( 'host' ) || ''
24+ const { isDev, isPr } = checkEnvironment ( host , '' )
25+
26+ return {
27+ ...defaultMetadata ,
28+ metadataBase : new URL ( CONFIG . url . root ) ,
29+ alternates : { canonical : './' } ,
30+ // Add noindex for develop.cow.fi and PR preview environments to prevent search engine indexing
31+ robots :
32+ isDev || isPr
33+ ? {
34+ index : false ,
35+ follow : false ,
36+ noarchive : true ,
37+ nosnippet : true ,
38+ }
39+ : {
40+ index : true ,
41+ follow : true ,
42+ } ,
43+ icons : {
44+ icon : [
45+ { url : '/favicon-light-mode.png' , type : 'image/png' , media : '(prefers-color-scheme: light)' } ,
46+ { url : '/favicon-dark-mode.png' , type : 'image/png' , media : '(prefers-color-scheme: dark)' } ,
47+ { url : '/favicon-dark-mode.png' , type : 'image/png' , media : '(prefers-color-scheme: no-preference)' } ,
48+ ] ,
49+ apple : '/apple-touch-icon.png' ,
50+ other : {
51+ rel : 'mask-icon' ,
52+ url : '/safari-pinned-tab.svg' ,
53+ color : '#000000' ,
54+ } ,
55+ } ,
56+ twitter : {
57+ ...defaultMetadata . twitter ,
58+ card : 'summary_large_image' ,
59+ site : CONFIG . social . twitter . account ,
60+ images : [ { url : `${ CONFIG . url . root } /images/og-meta-cowdao.png` } ] ,
61+ } ,
62+ openGraph : {
63+ ...defaultMetadata . openGraph ,
64+ type : 'website' ,
65+ url : './' ,
66+ images : [ { url : `${ CONFIG . url . root } /images/og-meta-cowdao.png` } ] ,
67+ } ,
68+ manifest : '/site.webmanifest' ,
2669 other : {
27- rel : 'mask-icon' ,
28- url : '/safari-pinned-tab.svg' ,
29- color : '#000000' ,
70+ 'msapplication-TileColor' : '#000000' ,
3071 } ,
31- } ,
32- twitter : {
33- ...defaultMetadata . twitter ,
34- card : 'summary_large_image' ,
35- site : CONFIG . social . twitter . account ,
36- images : [ { url : `${ CONFIG . url . root } /images/og-meta-cowdao.png` } ] ,
37- } ,
38- openGraph : {
39- ...defaultMetadata . openGraph ,
40- type : 'website' ,
41- url : './' ,
42- images : [ { url : `${ CONFIG . url . root } /images/og-meta-cowdao.png` } ] ,
43- } ,
44- manifest : '/site.webmanifest' ,
45- other : {
46- 'msapplication-TileColor' : '#000000' ,
47- } ,
72+ }
4873}
4974
50- export default function RootLayout ( { children } : { children : React . ReactNode } ) {
75+ export default function RootLayout ( { children } : { children : ReactNode } ) : ReactNode {
5176 return (
5277 < html lang = "en" >
5378 < body >
0 commit comments