feat: add canonical URL handling and entity quality checks

- Implemented canonical URL strategies for city-specific domains and entities.
- Added helper functions for domain and city resolution.
- Created tests for canonical URL generation and domain resolution.
- Introduced entity quality checks for doctors and clinics to ensure meaningful content.
- Developed unique introductory texts for listing pages to avoid duplicate content.
- Established robots.txt policies for listing pages to manage indexing based on user filters.
- Enhanced specialty content with dynamic introductions and FAQs to improve SEO.
This commit is contained in:
hamed
2026-07-19 07:52:50 +03:30
parent 36816eded2
commit fd48b48613
48 changed files with 3951 additions and 733 deletions
@@ -1,11 +1,12 @@
import TextLoading from "@/app/component/loading/Text";
import React from "react";
function ContentDetail({ head, children }) {
// عنوان بخش‌ها h2 است؛ فقط نام خود کلینیک h1 می‌گیرد (as="h1"). کلاس‌ها یکسان — بدون تغییر بصری.
function ContentDetail({ head, children, as: Heading = "h2" }) {
return (
<div className="my-[24px]">
<TextLoading width={200} height={20}>
<h1 className="text-[#3B3B3B] text-[20px] font-bold">{head}</h1>
<Heading className="text-[#3B3B3B] text-[20px] font-bold">{head}</Heading>
</TextLoading>
<div className="mt-[16px]">{children}</div>
</div>
+1 -1
View File
@@ -9,7 +9,7 @@ function About({ data }) {
return (
<div className="opacity-page transition-all duration-500">
<Images data={data} />
<ContentDetail head={data.title}>
<ContentDetail head={data.title} as="h1">
<TextDetail data={data} />
</ContentDetail>
<ContentDetail head="بیمه های طرف قرارداد">
+12 -1
View File
@@ -6,10 +6,11 @@ import About from "./components/about";
import Contact from "./components/contact";
import Doctors from "./components/doctors";
import Tabs from "@/app/component/Tabs";
import Pageguide from "@/app/component/Pageguide";
const listTab = ["درباره کلینیک", "اطلاعات تماس", "پزشک ها"];
function ClinicPage({ data, doctors,slug ,pages}) {
function ClinicPage({ data, doctors, slug, pages, origin }) {
const [value, setValue] = useState(0);
const handleChange = (_, newValue) => setValue(newValue);
@@ -22,6 +23,16 @@ function ClinicPage({ data, doctors,slug ,pages}) {
return (
<div className="pt-[40px] sm:pt-[70px] md:pt-[100px] lg:pt-[136px] mt-[40px] padding-responsive">
<div className="mb-[20px]">
<Pageguide
origin={origin}
list={[
{ name: "خانه", href: "/" },
{ name: "کلینیک ها", href: "/clinics" },
{ name: data?.title },
]}
/>
</div>
<Tabs
style={{
".MuiTabs-indicator": {