Refactor code structure for improved readability and maintainability
This commit is contained in:
+10
-4
@@ -1,9 +1,12 @@
|
||||
import { headers } from "next/headers";
|
||||
|
||||
// استراتژی چند-دامنهای: هر دامنهی شهری یک property مستقل و first-class است.
|
||||
// هر صفحه self-canonical روی هاست جاری میگیرد؛ هرگز به دامنهی اصلی canonical نمیدهیم.
|
||||
// استراتژی canonical: محتوای همهی دامنههای شهری از nobat724.com تغذیه میشود —
|
||||
// پس canonical هر صفحه (روی هر دامنهای) به همان مسیر روی دامنهی اصلی اشاره میکند.
|
||||
// دامنهی اصلی هم self-canonical میگیرد.
|
||||
// توجه: buildCanonicalUrl per-host است و برای JSON-LD/sitemap/robots استفاده میشود — به آن دست نزن.
|
||||
|
||||
const DEFAULT_HOST = "nobat724.com";
|
||||
const MAIN_ORIGIN = "https://nobat724.com";
|
||||
|
||||
export function normalizeHost(rawHost) {
|
||||
return (rawHost || DEFAULT_HOST).toLowerCase().replace(/^www\./, "");
|
||||
@@ -34,15 +37,18 @@ export async function getRequestOrigin() {
|
||||
}
|
||||
}
|
||||
|
||||
export function buildMainCanonicalUrl(pathname) {
|
||||
return `${MAIN_ORIGIN}${buildCanonicalPath(pathname)}`;
|
||||
}
|
||||
|
||||
export async function getCanonicalUrl() {
|
||||
try {
|
||||
const headersList = await headers();
|
||||
const host = headersList.get("host");
|
||||
const pathname = headersList.get("x-pathname");
|
||||
// مسیرهای خارج از matcher میدلور (panel/dashboard/login) این هدر را ندارند —
|
||||
// آنها noindex هستند و نباید canonical جعلی به ریشه بگیرند.
|
||||
if (!pathname) return null;
|
||||
return buildCanonicalUrl(host, pathname);
|
||||
return buildMainCanonicalUrl(pathname);
|
||||
} catch (error) {
|
||||
console.error("Error generating canonical URL:", error);
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user