From d2398b54de11542c4f08afcacf349212659d1c63 Mon Sep 17 00:00:00 2001 From: kafeelraza Date: Fri, 15 May 2026 01:08:17 +0530 Subject: [PATCH 1/2] refactor: centralize site title suffix in metadata --- src/components/Nav/MobileMenu/MenuHeader.tsx | 4 +++- .../Nav/MobileMenu/MobileMenuClient.tsx | 4 +++- src/intl/en/common.json | 1 - ...thereum-history-founder-and-ownership.json | 2 +- src/intl/en/page-ethereum-vs-bitcoin.json | 2 +- src/intl/en/page-index.json | 2 +- src/intl/en/page-roadmap.json | 2 +- src/intl/en/page-wallets-find-wallet.json | 2 +- src/intl/en/page-what-is-ether.json | 2 +- src/intl/en/page-what-is-ethereum.json | 2 +- .../en/page-what-is-the-ethereum-network.json | 2 +- src/lib/constants.ts | 1 + src/lib/utils/metadata.ts | 20 ++++++++++++------- 13 files changed, 28 insertions(+), 18 deletions(-) diff --git a/src/components/Nav/MobileMenu/MenuHeader.tsx b/src/components/Nav/MobileMenu/MenuHeader.tsx index 8a2d7daafc5..bfecd7c476d 100644 --- a/src/components/Nav/MobileMenu/MenuHeader.tsx +++ b/src/components/Nav/MobileMenu/MenuHeader.tsx @@ -1,5 +1,7 @@ import { SheetClose, SheetTitle } from "@/components/ui/sheet" +import { SITE_TITLE } from "@/lib/constants" + import { useTranslation } from "@/hooks/useTranslation" const MenuHeader = () => { @@ -8,7 +10,7 @@ const MenuHeader = () => { return (
- {t("site-title")} + {SITE_TITLE} {t("close")} diff --git a/src/components/Nav/MobileMenu/MobileMenuClient.tsx b/src/components/Nav/MobileMenu/MobileMenuClient.tsx index 9907d748371..3f58400574d 100644 --- a/src/components/Nav/MobileMenu/MobileMenuClient.tsx +++ b/src/components/Nav/MobileMenu/MobileMenuClient.tsx @@ -9,6 +9,8 @@ import { Skeleton } from "@/components/ui/skeleton" import { cn } from "@/lib/utils/cn" +import { SITE_TITLE } from "@/lib/constants" + import HamburgerButton from "./HamburgerButton" import { useCloseOnNavigate } from "@/hooks/useCloseOnNavigate" @@ -102,7 +104,7 @@ const MobileMenuClient = ({ className, side }: MobileMenuClientProps) => { className="flex flex-col" onOpenChange={handleOpenChange} triggerRef={triggerRef} - aria-label={t("site-title")} + aria-label={SITE_TITLE} data-testid="mobile-menu-dialog" > {hasBeenOpened && ( diff --git a/src/intl/en/common.json b/src/intl/en/common.json index d71be611f7c..173318c189a 100644 --- a/src/intl/en/common.json +++ b/src/intl/en/common.json @@ -474,7 +474,6 @@ "show-less": "Show less", "single-slot-finality": "Single-slot finality", "site-description": "Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you can write code that controls money, and build applications accessible anywhere in the world.", - "site-title": "ethereum.org", "skip-to-main-content": "Skip to main content", "smart-contracts": "Smart contracts", "solo": "Solo staking", diff --git a/src/intl/en/page-ethereum-history-founder-and-ownership.json b/src/intl/en/page-ethereum-history-founder-and-ownership.json index 7d1d2a310af..2832c073a87 100644 --- a/src/intl/en/page-ethereum-history-founder-and-ownership.json +++ b/src/intl/en/page-ethereum-history-founder-and-ownership.json @@ -1,5 +1,5 @@ { - "page-ethereum-history-founder-and-ownership-meta-title": "History of Ethereum: founder, launch and ownership | ethereum.org", + "page-ethereum-history-founder-and-ownership-meta-title": "History of Ethereum: founder, launch and ownership", "page-ethereum-history-founder-and-ownership-meta-description": "Learn about Ethereum's history, including who created it, when it launched and who controls it today.", "page-ethereum-history-founder-and-ownership-twitter-meta-description": "Learn the differences between Bitcoin and Ethereum, including use cases, network performance, token economics and more.", "page-ethereum-history-founder-and-ownership-title": "History of Ethereum: founder, launch and ownership", diff --git a/src/intl/en/page-ethereum-vs-bitcoin.json b/src/intl/en/page-ethereum-vs-bitcoin.json index 36302876da4..fe29f5154e2 100644 --- a/src/intl/en/page-ethereum-vs-bitcoin.json +++ b/src/intl/en/page-ethereum-vs-bitcoin.json @@ -1,5 +1,5 @@ { - "page-ethereum-vs-bitcoin-meta-title": "Ethereum vs Bitcoin: what is the difference? | ethereum.org", + "page-ethereum-vs-bitcoin-meta-title": "Ethereum vs Bitcoin: what is the difference?", "page-ethereum-vs-bitcoin-meta-description": "Learn the differences between Bitcoin and Ethereum, including use cases, network performance, security, token economics, level of decentralisation and more.", "page-ethereum-vs-bitcoin-twitter-meta-description": "Learn the differences between Bitcoin and Ethereum, including use cases, network performance, token economics and more.", "page-ethereum-vs-bitcoin-title": "Ethereum vs Bitcoin: what is the difference?", diff --git a/src/intl/en/page-index.json b/src/intl/en/page-index.json index c36792ea0ac..52e48a56251 100644 --- a/src/intl/en/page-index.json +++ b/src/intl/en/page-index.json @@ -1,5 +1,5 @@ { - "page-index-meta-title": "Ethereum - The complete guide from Ethereum.org", + "page-index-meta-title": "Ethereum - The complete guide from ethereum.org", "page-index-meta-description": "Ethereum is a global, decentralized platform for money and new kinds of applications. On Ethereum, you control your own money, data, and identity. No bank, no middleman, no permission needed.", "page-index-description": "The leading platform for innovative apps and blockchain networks", "page-index-title": "Welcome to Ethereum", diff --git a/src/intl/en/page-roadmap.json b/src/intl/en/page-roadmap.json index ba405d1135b..f643191437a 100644 --- a/src/intl/en/page-roadmap.json +++ b/src/intl/en/page-roadmap.json @@ -1,6 +1,6 @@ { "page-roadmap-title": "Ethereum roadmap", - "page-roadmap-meta-title": "Ethereum roadmap | ethereum.org", + "page-roadmap-meta-title": "Ethereum roadmap", "page-roadmap-meta-description": "The path to more scalability, security and sustainability for Ethereum.", "page-roadmap-banner-notification": "Ethereum's development is community-driven and subject to change.", "page-roadmap-changes-coming-title": "What changes are coming to Ethereum?", diff --git a/src/intl/en/page-wallets-find-wallet.json b/src/intl/en/page-wallets-find-wallet.json index b11dda9b06d..25ac3569e5d 100644 --- a/src/intl/en/page-wallets-find-wallet.json +++ b/src/intl/en/page-wallets-find-wallet.json @@ -5,7 +5,7 @@ "page-find-wallet-description": "Wallets store and transact your ETH. You can choose from a variety of products that tailor to your needs.", "page-find-wallet-last-updated": "Last updated", "page-find-wallet-meta-description": "Compare Ethereum wallets side by side. Filter by features like hardware wallet support, open source, self-custody, multi-chain, staking, NFT support, and more to find the right wallet for you.", - "page-find-wallet-meta-title": "Find and compare Ethereum wallets | ethereum.org", + "page-find-wallet-meta-title": "Find and compare Ethereum wallets", "page-find-wallet-title": "Choose your wallet", "page-find-wallet-table-title": "Browse all wallets", "page-find-wallet-try-removing": "Try removing a feature or two", diff --git a/src/intl/en/page-what-is-ether.json b/src/intl/en/page-what-is-ether.json index 2676fbebfa9..da0a000d4ad 100644 --- a/src/intl/en/page-what-is-ether.json +++ b/src/intl/en/page-what-is-ether.json @@ -1,5 +1,5 @@ { - "page-what-is-ether-meta-title": "What is Ether (ETH)? (A complete guide) | ethereum.org", + "page-what-is-ether-meta-title": "What is Ether (ETH)? (A complete guide)", "page-what-is-ether-meta-description": "Ether (ETH) is Ethereum's native cryptocurrency. Learn what it's used for, how and where to buy it, how much of it there is and what affects its price.", "page-what-is-ether-twitter-meta-description": "Ether (ETH) is Ethereum's native cryptocurrency. Learn what it's used for, how and where to buy it, how much of it there is and more.", "page-what-is-ether-title": "What is Ether (ETH)?", diff --git a/src/intl/en/page-what-is-ethereum.json b/src/intl/en/page-what-is-ethereum.json index 1ad335a1804..787ee9bf61e 100644 --- a/src/intl/en/page-what-is-ethereum.json +++ b/src/intl/en/page-what-is-ethereum.json @@ -1,5 +1,5 @@ { - "page-what-is-ethereum-meta-title": "What is Ethereum? (A Complete Guide) | ethereum.org", + "page-what-is-ethereum-meta-title": "What is Ethereum? (A Complete Guide)", "page-what-is-ethereum-meta-description": "A full overview of what Ethereum is, how it works, what it does and how to start using or building on it. Explained in simple terms.", "page-what-is-ethereum-title": "What is Ethereum?", "page-what-is-ethereum-hero-description-1": "Ethereum is a decentralized blockchain network and software development platform, powered by the cryptocurrency ether (ETH).", diff --git a/src/intl/en/page-what-is-the-ethereum-network.json b/src/intl/en/page-what-is-the-ethereum-network.json index 1b69d05c970..e2cdead8149 100644 --- a/src/intl/en/page-what-is-the-ethereum-network.json +++ b/src/intl/en/page-what-is-the-ethereum-network.json @@ -1,5 +1,5 @@ { - "page-what-is-ethereum-network-meta-title": "What is the Ethereum network? | ethereum.org", + "page-what-is-ethereum-network-meta-title": "What is the Ethereum network?", "page-what-is-ethereum-network-meta-description": "Understand what the Ethereum network is, staking and security, network fees (aka gas), layer 2 scaling networks and how to explore live network data.", "page-what-is-ethereum-network-twitter-meta-description": "Understand what the Ethereum network is, staking and security, network fees, layer 2 scaling networks and how to explore live network data.", "page-what-is-ethereum-network-title": "What is the Ethereum network?", diff --git a/src/lib/constants.ts b/src/lib/constants.ts index e42649e62ab..a6649ee00c6 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -37,6 +37,7 @@ export const EDIT_CONTENT_URL = `https://github.com/ethereum/ethereum-org-websit export const MAIN_CONTENT_ID = "main-content" export const WEBSITE_EMAIL = "website@ethereum.org" export const DEFAULT_OG_IMAGE = "/images/home/hero.png" +export const SITE_TITLE = "ethereum.org" // Config export const CONTENT_IMAGES_MAX_WIDTH = 800 diff --git a/src/lib/utils/metadata.ts b/src/lib/utils/metadata.ts index cb73858b508..9c64cd4a09c 100644 --- a/src/lib/utils/metadata.ts +++ b/src/lib/utils/metadata.ts @@ -4,6 +4,7 @@ import { getTranslations } from "next-intl/server" import { DEFAULT_OG_IMAGE, IS_PRODUCTION_DEPLOY, + SITE_TITLE, SITE_URL, } from "@/lib/constants" @@ -65,7 +66,12 @@ export const getMetadata = async ({ const t = await getTranslations("common") const description = descriptionProp || t("site-description") - const siteTitle = t("site-title") + + const titleAlreadyHasBrand = title + .toLowerCase() + .includes(SITE_TITLE.toLowerCase()) + + const finalTitle = titleAlreadyHasBrand ? title : `${title} | ⁦${SITE_TITLE}⁩` // Auto-detect translated locales if not provided const finalTranslatedLocales = @@ -93,7 +99,7 @@ export const getMetadata = async ({ : [] const base: Metadata = { - title, + title: finalTitle, description, formatDetection: { telephone: false }, metadataBase: new URL(SITE_URL), @@ -109,12 +115,12 @@ export const getMetadata = async ({ }), }, openGraph: { - title, + title: finalTitle, description, locale, type: "website", url, - siteName: siteTitle, + siteName: SITE_TITLE, images: [ { url: ogImage, @@ -122,11 +128,11 @@ export const getMetadata = async ({ ], }, twitter: { - title, + title: finalTitle, description: twitterDescription || description, card: "summary_large_image", - creator: author || siteTitle, - site: author || siteTitle, + creator: author || SITE_TITLE, + site: author || SITE_TITLE, images: [ { url: ogImage, From 04f5d3e1de732236c626a071a49f08771b6de294 Mon Sep 17 00:00:00 2001 From: kafeelraza Date: Fri, 15 May 2026 19:05:31 +0530 Subject: [PATCH 2/2] fix: address review feedback for site title suffix --- src/intl/en/page-layer-2-learn.json | 2 +- src/lib/utils/metadata.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/intl/en/page-layer-2-learn.json b/src/intl/en/page-layer-2-learn.json index 1a6d60b2258..a90a98ea3ef 100644 --- a/src/intl/en/page-layer-2-learn.json +++ b/src/intl/en/page-layer-2-learn.json @@ -1,5 +1,5 @@ { - "page-layer-2-learn-meta-title": "What is layer 2? | ethereum.org", + "page-layer-2-learn-meta-title": "What is layer 2?", "page-layer-2-learn-title": "What is layer 2?", "page-layer-2-learn-description": "Scaling Ethereum for mass adoption", "page-layer-2-learn-button-1-label": "What is layer 2?", diff --git a/src/lib/utils/metadata.ts b/src/lib/utils/metadata.ts index 9c64cd4a09c..c08487172e0 100644 --- a/src/lib/utils/metadata.ts +++ b/src/lib/utils/metadata.ts @@ -71,7 +71,9 @@ export const getMetadata = async ({ .toLowerCase() .includes(SITE_TITLE.toLowerCase()) - const finalTitle = titleAlreadyHasBrand ? title : `${title} | ⁦${SITE_TITLE}⁩` + const finalTitle = titleAlreadyHasBrand + ? title + : `${title} | \u2066${SITE_TITLE}\u2069` // Auto-detect translated locales if not provided const finalTranslatedLocales =