)",
snippetTitleMeta: "Title tag & meta description",
snippetFaq: "Starter FAQ block",
snippetsNote: "These are starting points, not finished copy, fill in the bracketed fields and have someone confirm the details before publishing.",
copyButton: "Copy",
copiedButton: "Copied!",
reviewTemplatesTitle: "Copy-paste review templates",
crmBannerTitle: "Checking boxes is step one, automation is step two.",
crmBannerSubtitle: "Want our team to handle your local SEO for you? We'll take it from here.",
crmBannerButton: "Connect with us",
footerLine: "Want our team to handle your SEO for you?",
footerButton: "Connect with us",
disclaimer: "This checklist reflects general local SEO best practices as of 2026. Regulations and platform policies vary by country and change over time, confirm current rules with your local medical authority before publishing patient reviews or promotional content.",
},
ar: {
heroEyebrow: "أداة مجانية · HMA",
heroTitle: "قائمة فحص السيو للعيادة",
heroSubtitle: "اعرفوا بالضبط مدى ظهور عيادتكم للمرضى الباحثين بالقرب منكم، ملف جوجل التجاري، الاستشهادات، السيو داخل الصفحة، التقييمات، والظهور في نتائج الذكاء الاصطناعي، مُقيّمة وفق أنظمة بلدكم.",
howTitle: "كيف تعمل هذه الأداة",
howSteps: [
"أخبرونا قليلاً عن عيادتكم واختاروا بلدكم.",
"راجعوا القائمة أدناه وحددوا ما تقومون به بالفعل.",
"شاهدوا درجة ظهوركم وأهم الإصلاحات ذات الأولوية.",
"انسخوا مقاطع وقوالب جاهزة مباشرة إلى موقعكم أو رسائلكم."
],
setupTitle: "أعدّوا بيانات عيادتكم",
editingFor: "تعديل بيانات",
labelClinicName: "اسم العيادة",
labelSpecialty: "التخصص الرئيسي",
labelCity: "المدينة / المنطقة",
labelCountry: "البلد",
requiredFieldsError: "يرجى تعبئة اسم العيادة والتخصص والمدينة والبلد قبل البدء.",
labelWebsite: "رابط الموقع الإلكتروني (اختياري)",
labelInsurers: "شركات التأمين المقبولة (اختياري، مفصولة بفواصل)",
placeholderClinicName: "مثال: عيادة النور العائلية",
placeholderSpecialty: "مثال: طبيب أسنان، طبيب جلدية",
placeholderCity: "مثال: دبي",
placeholderWebsite: "https://yourclinic.com",
placeholderInsurers: "مثال: دامان، NAS، دفع نقدي",
startButton: "ابدأوا الفحص",
scoreInstruction: "راجعوا كل بند أدناه وحددوه بعد التأكد منه لعيادتكم، تتحدث درجة الظهور تلقائياً أثناء تقدمكم.",
scoreLabel: "درجة الظهور",
scoreCardTitle: "درجة الظهور المحلي",
outOf100: "من 100",
statusExcellent: "ممتاز",
statusStrong: "قوي",
statusGood: "جيد",
statusNeedsWork: "يحتاج عملاً",
statItemsChecked: "البنود المحددة",
statModulesComplete: "الأقسام المكتملة",
statPriorityLeft: "بنود ذات أولوية متبقية",
tierLeaderName: "رائد السيو المحلي",
tierLeaderDesc: "يستطيع المرضى اكتشافكم بسهولة عبر الإنترنت.",
tierGrowingName: "عيادة في مرحلة النمو",
tierGrowingDesc: "أساس جيد، لا تزال هناك فرص حقيقية.",
tierInvisibleName: "عيادة غير مرئية",
tierInvisibleDesc: "من المرجح أن المرضى الباحثين عنكم يجدون منافسين يتصدرون عليكم بدلاً منكم.",
progressLabel: "بند تمت مراجعته",
celebrationTitle: "تهانينا، أكملتم فحص الظهور المحلي الخاص بكم.",
celebrationSubtitle: "حمّلوا خطة العمل، أو دعوا فريق HMA ينفذها لكم.",
downloadPlanButton: "تحميل خطة العمل",
downloadPdfButton: "تحميل التقرير",
downloadPdfHint: "سيفتح هذا مربع الطباعة في المتصفح، اختاروا \"حفظ كملف PDF\" كوجهة/طابعة لتحميله.",
aiCtaTitle: "تريدون معرفة كيف تظهرون في نتائج البحث بالذكاء الاصطناعي؟",
aiCtaSubtitle: "احصلوا على تقرير مجاني للظهور في الذكاء الاصطناعي، شاهدوا بالضبط ماذا يقول ChatGPT وGemini ونتائج الذكاء الاصطناعي من جوجل عن عيادتكم الآن.",
aiCtaButton: "احصلوا على تقرير ظهوري في الذكاء الاصطناعي",
ctaCardTitle: "تحتاجون مساعدة في هذا؟",
ctaCardSubtitle: "يمكن لفريقنا تحسين {module} خلال أقل من أسبوع.",
ctaCardButton: "احجزوا عرضاً توضيحياً",
compareTitle: "قارنوا موقعكم",
compareYourClinic: "عيادتكم",
compareCompetitor: "المنافس",
compareReviewsLabel: "تقييمات جوجل",
comparePlaceholderYou: "مثال: 24",
comparePlaceholderThem: "مثال: 87",
topFixesTitle: "ما الذي يجب إعطاؤه الأولوية الآن",
topFixesSubtitle: "بناءً على ما حددتموه (أو لم تحددوه بعد) أدناه، إليكم أين تركزون أولاً، الأكثر تأثيراً أولاً.",
topFixesEmpty: "تم تحديد كل البنود، عمل رائع. راجعوا مجدداً خلال 30 يوماً، فالسيو المحلي ليس إصلاحاً لمرة واحدة.",
topFixesBeforeStart: "أكملوا القائمة أدناه أولاً، بمجرد أن تحددوا بعض البنود، ستظهر أولوياتكم هنا.",
whyLabel: "لماذا هذا مهم:",
fixLabel: "كيفية الإصلاح:",
itemShowDetail: "لماذا + الإصلاح",
itemHideDetail: "إخفاء",
directoriesLabel: "الأدلة التي يجب مراجعتها لسوقكم:",
goodToKnow: "معلومة مفيدة",
snippetsTitle: "المقاطع الجاهزة للنسخ",
snippetSchema: "بيانات Schema (الصقوا قبل
)",
snippetTitleMeta: "عنوان الصفحة والوصف التعريفي",
snippetFaq: "قسم أسئلة شائعة أولي",
snippetsNote: "هذه نقاط انطلاق وليست نصوصاً نهائية، أكملوا الحقول بين الأقواس واطلبوا من أحد تأكيد التفاصيل قبل النشر.",
copyButton: "نسخ",
copiedButton: "تم النسخ!",
reviewTemplatesTitle: "قوالب تقييم جاهزة للنسخ",
crmBannerTitle: "تحديد البنود هو الخطوة الأولى، الأتمتة هي الخطوة الثانية.",
crmBannerSubtitle: "تريدون أن يتولى فريقنا سيو المحلي عنكم؟ سنكمل المهمة من هنا.",
crmBannerButton: "تواصلوا معنا",
footerLine: "تريدون أن يتولى فريقنا سيو الخاص بكم؟",
footerButton: "تواصلوا معنا",
disclaimer: "تعكس هذه القائمة أفضل ممارسات السيو المحلي العامة حتى عام 2026. تختلف الأنظمة وسياسات المنصات حسب البلد وتتغير مع الوقت، تأكدوا من الأنظمة الحالية مع الجهة الصحية المحلية قبل نشر تقييمات المرضى أو المحتوى الترويجي.",
},
es: {
heroEyebrow: "Herramienta gratuita · HMA",
heroTitle: "Checklist de SEO para Clínicas",
heroSubtitle: "Vea exactamente qué tan visible es su clínica para los pacientes que buscan cerca, Perfil de Empresa de Google, citaciones, SEO en página, reseñas y visibilidad en búsquedas de IA, evaluado y adaptado a las normas de su país.",
howTitle: "Cómo funciona",
howSteps: [
"Cuéntenos sobre su clínica y elija su país.",
"Revise la lista de abajo y marque lo que ya hace.",
"Vea su puntaje de visibilidad y las mejoras prioritarias.",
"Copie plantillas y fragmentos listos directamente a su sitio o mensajes."
],
setupTitle: "Configure su clínica",
editingFor: "Editando configuración de",
labelClinicName: "Nombre de la clínica",
labelSpecialty: "Especialidad principal",
labelCity: "Ciudad / zona",
labelCountry: "País",
requiredFieldsError: "Complete el nombre de la clínica, especialidad, ciudad y país antes de comenzar.",
labelWebsite: "URL del sitio web (opcional)",
labelInsurers: "Seguros aceptados (opcional, separados por comas)",
placeholderClinicName: "ej. Clínica Familiar Al Noor",
placeholderSpecialty: "ej. Dentista, Dermatólogo",
placeholderCity: "ej. Ciudad de México",
placeholderWebsite: "https://suclinica.com",
placeholderInsurers: "ej. Seguros ABC, Pago en efectivo",
startButton: "Comenzar mi revisión",
scoreInstruction: "Revise cada punto abajo y márquelo una vez que lo haya confirmado para su clínica, su puntaje se actualiza automáticamente.",
scoreLabel: "puntaje de visibilidad",
scoreCardTitle: "Puntaje de Visibilidad Local",
outOf100: "de 100",
statusExcellent: "Excelente",
statusStrong: "Sólido",
statusGood: "Bueno",
statusNeedsWork: "Necesita mejorar",
statItemsChecked: "Puntos marcados",
statModulesComplete: "Módulos completos",
statPriorityLeft: "Puntos prioritarios restantes",
tierLeaderName: "Líder en SEO Local",
tierLeaderDesc: "Los pacientes pueden encontrarlo fácilmente en línea.",
tierGrowingName: "Clínica en Crecimiento",
tierGrowingDesc: "Buena base, todavía quedan oportunidades reales.",
tierInvisibleName: "Clínica Invisible",
tierInvisibleDesc: "Es probable que los pacientes que lo buscan encuentren competidores mejor posicionados en su lugar.",
progressLabel: "puntos revisados",
celebrationTitle: "Felicidades, completó su Revisión de Visibilidad Local.",
celebrationSubtitle: "Descargue su plan de acción, o deje que HMA lo implemente por usted.",
downloadPlanButton: "Descargar plan de acción",
downloadPdfButton: "Descargar reporte",
downloadPdfHint: "Esto abre el diálogo de impresión de su navegador, elija \"Guardar como PDF\" como destino/impresora para descargarlo.",
aiCtaTitle: "¿Quiere saber cómo aparece en las búsquedas de IA?",
aiCtaSubtitle: "Obtenga un Reporte de Visibilidad en IA gratuito, vea exactamente qué dicen ChatGPT, Gemini y las Vistas Generales de IA de Google sobre su clínica en este momento.",
aiCtaButton: "Obtener mi Reporte de Visibilidad en IA",
ctaCardTitle: "¿Necesita ayuda con esto?",
ctaCardSubtitle: "Nuestro equipo puede optimizar su {module} en menos de una semana.",
ctaCardButton: "Reservar una demo",
compareTitle: "Vea cómo se compara",
compareYourClinic: "Su clínica",
compareCompetitor: "Competidor",
compareReviewsLabel: "Reseñas de Google",
comparePlaceholderYou: "ej. 24",
comparePlaceholderThem: "ej. 87",
topFixesTitle: "Qué priorizar ahora",
topFixesSubtitle: "Según lo que ha marcado (o no) abajo, aquí está en qué enfocarse primero, los de mayor impacto primero.",
topFixesEmpty: "Todos los puntos están marcados, buen trabajo. Revise de nuevo en 30 días, el SEO local no es una solución única.",
topFixesBeforeStart: "Complete la lista de abajo primero, una vez que marque algunos puntos, sus prioridades aparecerán aquí.",
whyLabel: "Por qué importa:",
fixLabel: "Cómo solucionarlo:",
itemShowDetail: "Por qué + solución",
itemHideDetail: "Ocultar",
directoriesLabel: "Directorios a revisar para su mercado:",
goodToKnow: "es bueno saber",
snippetsTitle: "Sus fragmentos listos para copiar",
snippetSchema: "Marcado de esquema (pegar antes de
)",
snippetTitleMeta: "Etiqueta de título y meta descripción",
snippetFaq: "Bloque inicial de preguntas frecuentes",
snippetsNote: "Estos son puntos de partida, no textos finales, complete los campos entre corchetes y confirme los detalles antes de publicar.",
copyButton: "Copiar",
copiedButton: "¡Copiado!",
reviewTemplatesTitle: "Plantillas de reseña para copiar y pegar",
crmBannerTitle: "Marcar las casillas es el primer paso, la automatización es el segundo.",
crmBannerSubtitle: "¿Quiere que nuestro equipo maneje su SEO local? Nosotros nos encargamos desde aquí.",
crmBannerButton: "Contáctenos",
footerLine: "¿Quiere que nuestro equipo maneje su SEO por usted?",
footerButton: "Contáctenos",
disclaimer: "Esta lista refleja las mejores prácticas generales de SEO local a partir de 2026. Las regulaciones y políticas de las plataformas varían según el país y cambian con el tiempo, confirme las normas vigentes con su autoridad médica local antes de publicar reseñas de pacientes o contenido promocional.",
}
};
// HMA Local Visibility Check, checklist item bank, fully trilingual (EN/AR/ES)
const CHECKLIST_MODULES = [
{
id: "gbp",
name: {en:"Google Business Profile", ar:"ملف جوجل التجاري", es:"Perfil de Empresa de Google"},
intro: {
en:"Your profile is the first thing patients see before they ever reach your website.",
ar:"ملفكم هو أول ما يراه المرضى قبل الوصول إلى موقعكم الإلكتروني.",
es:"Su perfil es lo primero que ven los pacientes antes de llegar a su sitio web."
},
items: [
{ id:"gbp01", weight:3,
text:{en:"Profile is claimed and verified", ar:"تم المطالبة بالملف والتحقق منه", es:"El perfil está reclamado y verificado"},
why:{en:"An unverified listing rarely appears in local search, Google won't trust or rank a business it can't confirm.", ar:"نادراً ما يظهر الملف غير الموثّق في نتائج البحث المحلي، لا تثق جوجل بنشاط تجاري لا يمكنها التحقق منه.", es:"Un listado no verificado rara vez aparece en la búsqueda local, Google no confía en un negocio que no puede confirmar."},
fix:{en:"Go to google.com/business, claim your listing, and complete verification by phone, video call, or postcard.", ar:"توجهوا إلى google.com/business، وطالبوا بملفكم، وأكملوا التحقق عبر الهاتف أو مكالمة الفيديو أو البطاقة البريدية.", es:"Vaya a google.com/business, reclame su ficha y complete la verificación por teléfono, videollamada o postal."} },
{ id:"gbp02", weight:2,
text:{en:"Primary category is the most specific match (e.g. \"Dentist\" not \"Healthcare\")", ar:"الفئة الرئيسية هي الأكثر تحديداً (مثال: \"طبيب أسنان\" وليس \"رعاية صحية\")", es:"La categoría principal es la más específica (ej. \"Dentista\" y no \"Salud\")"},
why:{en:"A vague category tells Google, and patients, less about what you actually treat.", ar:"الفئة الغامضة تعطي جوجل والمرضى معلومات أقل عمّا تعالجونه فعلياً.", es:"Una categoría vaga le dice menos a Google y a los pacientes sobre lo que realmente trata."},
fix:{en:"In your GBP dashboard, edit the primary category to the narrowest accurate option for your main specialty.", ar:"في لوحة تحكم الملف، عدّلوا الفئة الرئيسية لتكون الخيار الأكثر دقة لتخصصكم الأساسي.", es:"En su panel de GBP, edite la categoría principal a la opción más específica y precisa para su especialidad."} },
{ id:"gbp03", weight:1,
text:{en:"2–5 relevant secondary categories added", ar:"إضافة 2 إلى 5 فئات فرعية ذات صلة", es:"2 a 5 categorías secundarias relevantes agregadas"},
why:{en:"Secondary categories help you surface for adjacent searches (e.g. \"orthodontist\" alongside \"dentist\").", ar:"تساعد الفئات الفرعية في الظهور لعمليات بحث ذات صلة (مثال: \"أخصائي تقويم\" إلى جانب \"طبيب أسنان\").", es:"Las categorías secundarias ayudan a aparecer en búsquedas relacionadas (ej. \"ortodoncista\" junto a \"dentista\")."},
fix:{en:"Add every category that genuinely describes a service you offer, don't add ones you don't provide.", ar:"أضيفوا كل فئة تصف فعلاً خدمة تقدمونها، لا تضيفوا فئات لا تقدمونها.", es:"Agregue cada categoría que realmente describa un servicio que ofrece, no agregue las que no ofrece."} },
{ id:"gbp04", weight:1,
text:{en:"Business description uses your specialty + city naturally", ar:"وصف النشاط التجاري يذكر التخصص والمدينة بشكل طبيعي", es:"La descripción del negocio menciona su especialidad y ciudad de forma natural"},
why:{en:"This is one of the few free-text fields Google reads for relevance signals.", ar:"هذا أحد الحقول النصية القليلة التي تعتمد عليها جوجل لتحديد مدى الصلة.", es:"Este es uno de los pocos campos de texto libre que Google usa para medir la relevancia."},
fix:{en:"Write 2–3 sentences describing who you treat and where, in plain language, no keyword stuffing.", ar:"اكتبوا 2-3 جمل تصف من تعالجونه وأين، بلغة بسيطة وواضحة دون حشو الكلمات المفتاحية.", es:"Escriba 2-3 oraciones describiendo a quién atiende y dónde, en lenguaje simple, sin saturar de palabras clave."} },
{ id:"gbp05", weight:2,
text:{en:"Services list is filled in with actual procedures/treatments", ar:"قائمة الخدمات معبأة بالإجراءات والعلاجات الفعلية", es:"La lista de servicios incluye procedimientos y tratamientos reales"},
why:{en:"An empty services tab is a missed chance to match specific patient searches.", ar:"تبويب الخدمات الفارغ يعني فرصة ضائعة لمطابقة عمليات بحث محددة للمرضى.", es:"Una pestaña de servicios vacía es una oportunidad perdida para coincidir con búsquedas específicas."},
fix:{en:"Add each service you offer as its own line item, with a one-line description.", ar:"أضيفوا كل خدمة تقدمونها كبند منفصل، مع وصف من سطر واحد.", es:"Agregue cada servicio que ofrece como un ítem individual, con una descripción de una línea."} },
{ id:"gbp06", weight:2,
text:{en:"Business hours are accurate, including holiday hours", ar:"ساعات العمل دقيقة، بما في ذلك أوقات العطلات", es:"Los horarios son precisos, incluyendo horarios de días festivos"},
why:{en:"Incorrect hours cause wasted trips and hurt trust signals when patients report them.", ar:"الساعات غير الصحيحة تسبب زيارات ضائعة وتضر بمؤشرات الثقة عندما يبلغ عنها المرضى.", es:"Los horarios incorrectos causan viajes en vano y dañan la confianza cuando los pacientes los reportan."},
fix:{en:"Update regular hours and set special hours ahead of public holidays.", ar:"حدّثوا الساعات العادية وحددوا ساعات خاصة قبل العطلات الرسمية.", es:"Actualice el horario regular y configure horarios especiales antes de los días festivos."} },
{ id:"gbp07", weight:2,
text:{en:"At least 10 recent, high-quality photos (exterior, interior, team)", ar:"10 صور حديثة وعالية الجودة على الأقل (الخارج، الداخل، الفريق)", es:"Al menos 10 fotos recientes y de buena calidad (exterior, interior, equipo)"},
why:{en:"Profiles with more photos get more direction requests and calls than sparse ones.", ar:"الملفات ذات الصور الأكثر تحصل على طلبات اتجاهات ومكالمات أكثر من الملفات الفارغة.", es:"Los perfiles con más fotos reciben más solicitudes de direcciones y llamadas que los que tienen pocas."},
fix:{en:"Upload real photos of your clinic front, waiting area, and team, avoid stock imagery.", ar:"ارفعوا صوراً حقيقية لواجهة العيادة وصالة الانتظار والفريق، تجنبوا الصور الجاهزة.", es:"Suba fotos reales de la fachada, sala de espera y equipo, evite imágenes genéricas de banco."} },
{ id:"gbp08", weight:2,
text:{en:"A photo has been added or updated in the last 30 days", ar:"تمت إضافة أو تحديث صورة خلال آخر 30 يوماً", es:"Se agregó o actualizó una foto en los últimos 30 días"},
why:{en:"Static, untouched profiles read as inactive to Google's ranking signals.", ar:"الملفات الثابتة غير المحدّثة تُقرأ على أنها غير نشطة من قبل خوارزمية جوجل.", es:"Los perfiles estáticos y sin actualizar se leen como inactivos para el algoritmo de Google."},
fix:{en:"Add at least one new photo monthly, even a small update keeps the profile active.", ar:"أضيفوا صورة جديدة واحدة على الأقل شهرياً، حتى التحديث البسيط يبقي الملف نشطاً.", es:"Agregue al menos una foto nueva al mes, hasta una actualización pequeña mantiene el perfil activo."} },
{ id:"gbp09", weight:2,
text:{en:"Posted a GBP update/offer in the last 2 weeks", ar:"تم نشر تحديث أو عرض في الملف خلال آخر أسبوعين", es:"Se publicó una actualización u oferta en las últimas 2 semanas"},
why:{en:"Active profiles with regular posts outrank technically-equal but inactive competitors.", ar:"الملفات النشطة ذات المنشورات المنتظمة تتفوق على منافسين مماثلين تقنياً لكن غير نشطين.", es:"Los perfiles activos con publicaciones regulares superan a competidores técnicamente iguales pero inactivos."},
fix:{en:"Use the Posts feature weekly for offers, new services, or health awareness content.", ar:"استخدموا ميزة المنشورات أسبوعياً للعروض أو الخدمات الجديدة أو محتوى التوعية الصحية.", es:"Use la función de publicaciones semanalmente para ofertas, nuevos servicios o contenido de salud."} },
{ id:"gbp10", weight:2,
text:{en:"Q&A section has answers to the 5 most common patient questions", ar:"قسم الأسئلة والأجوبة يحتوي على إجابات لأكثر 5 أسئلة شيوعاً", es:"La sección de preguntas tiene respuestas a las 5 preguntas más comunes"},
why:{en:"Unanswered Q&A sections are public, competitors or randoms can answer wrong.", ar:"أقسام الأسئلة غير المجابة عامة، يمكن لمنافسين أو أشخاص عشوائيين الإجابة بشكل خاطئ.", es:"Las secciones de preguntas sin responder son públicas, competidores o desconocidos pueden responder mal."},
fix:{en:"Pre-seed the Q&A with your own questions and clear answers (insurance, walk-ins, parking).", ar:"ابدأوا القسم بأسئلتكم الخاصة وإجابات واضحة (التأمين، الحضور دون موعد، مواقف السيارات).", es:"Precargue la sección con sus propias preguntas y respuestas claras (seguros, sin cita previa, estacionamiento)."} },
{ id:"gbp11", weight:1,
text:{en:"Booking/appointment link is connected if available in your market", ar:"رابط الحجز متصل إن كان متوفراً في سوقكم", es:"El enlace de reserva de citas está conectado si está disponible en su mercado"},
why:{en:"A direct booking link removes a step between a search and a filled appointment.", ar:"رابط الحجز المباشر يزيل خطوة بين البحث وحجز الموعد.", es:"Un enlace directo de reserva elimina un paso entre la búsqueda y la cita agendada."},
fix:{en:"Connect your booking system in GBP settings, or link to your booking page.", ar:"اربطوا نظام الحجز في إعدادات الملف، أو أضيفوا رابط صفحة الحجز.", es:"Conecte su sistema de reservas en la configuración de GBP, o enlace su página de reservas."} },
{ id:"gbp12", weight:1,
text:{en:"Messaging is turned on and someone checks it daily", ar:"خاصية المراسلة مفعّلة ويتابعها أحد الموظفين يومياً", es:"La mensajería está activada y alguien la revisa a diario"},
why:{en:"Patients increasingly message businesses directly instead of calling.", ar:"يفضل المرضى بشكل متزايد المراسلة المباشرة بدلاً من الاتصال.", es:"Cada vez más pacientes prefieren enviar mensajes directos en lugar de llamar."},
fix:{en:"Turn on messaging in GBP settings and assign a staff member to monitor it.", ar:"فعّلوا المراسلة في إعدادات الملف وعيّنوا موظفاً لمتابعتها.", es:"Active la mensajería en la configuración de GBP y asigne a alguien del personal para revisarla."} },
{ id:"gbp13", weight:3,
text:{en:"No suspension or policy warnings on the profile", ar:"لا توجد إيقافات أو تحذيرات سياسات على الملف", es:"No hay suspensiones ni advertencias de políticas en el perfil"},
why:{en:"A suspended profile disappears from search entirely until resolved.", ar:"الملف الموقوف يختفي تماماً من نتائج البحث حتى يتم حل المشكلة.", es:"Un perfil suspendido desaparece por completo de la búsqueda hasta resolverse."},
fix:{en:"Check the dashboard for alerts; if suspended, follow Google's reinstatement process immediately.", ar:"تفقدوا لوحة التحكم بحثاً عن تنبيهات؛ إذا كان موقوفاً، اتبعوا إجراءات جوجل لإعادة التفعيل فوراً.", es:"Revise el panel en busca de alertas; si está suspendido, siga el proceso de reactivación de Google de inmediato."} },
],
},
{
id: "nap",
name: {en:"NAP & Citations", ar:"الاسم والعنوان والهاتف والاستشهادات", es:"NAP y Citaciones"},
intro: {
en:"Google cross-checks your Name, Address, and Phone across the web, mismatches quietly erode trust.",
ar:"تقارن جوجل اسمكم وعنوانكم ورقم هاتفكم عبر الإنترنت، التعارضات تقوّض الثقة بصمت.",
es:"Google verifica su Nombre, Dirección y Teléfono en toda la web, las inconsistencias erosionan la confianza silenciosamente."
},
items: [
{ id:"nap01", weight:3,
text:{en:"Name, address, and phone match exactly across website, GBP, and directories", ar:"الاسم والعنوان والهاتف متطابقة تماماً عبر الموقع والملف والأدلة", es:"Nombre, dirección y teléfono coinciden exactamente en sitio web, GBP y directorios"},
why:{en:"Conflicting NAP data makes Google distrust which listing is authoritative, hurting rank for all of them.", ar:"تعارض البيانات يجعل جوجل غير واثقة من الملف الموثوق، مما يضر بترتيب الجميع.", es:"Los datos NAP contradictorios hacen que Google no confíe en cuál listado es el oficial, afectando el posicionamiento de todos."},
fix:{en:"Pick one exact format for your name/address/phone and copy it identically everywhere, down to abbreviations.", ar:"اختاروا صيغة واحدة دقيقة للاسم والعنوان والهاتف وانسخوها بشكل متطابق في كل مكان، حتى الاختصارات.", es:"Elija un formato exacto para nombre/dirección/teléfono y cópielo idéntico en todas partes, incluidas las abreviaturas."} },
{ id:"nap02", weight:2,
text:{en:"Listed and claimed on the top local directories for your market", ar:"مُدرج ومُطالَب به في أهم الأدلة المحلية لسوقكم", es:"Listado y reclamado en los principales directorios locales de su mercado"},
why:{en:"Citations on trusted directories reinforce that your business is real and where you say it is.", ar:"الاستشهادات في الأدلة الموثوقة تعزز أن نشاطكم حقيقي وفي المكان الذي تذكرونه.", es:"Las citaciones en directorios confiables refuerzan que su negocio es real y está donde dice estar."},
fix:{en:"Claim your listing on each directory relevant to your country (see list below) and complete the profile fully.", ar:"طالبوا بملفكم في كل دليل ذي صلة ببلدكم (انظر القائمة أدناه) وأكملوا الملف بالكامل.", es:"Reclame su ficha en cada directorio relevante para su país (vea la lista abajo) y complete el perfil por completo."} },
{ id:"nap03", weight:2,
text:{en:"No duplicate listings for the same location", ar:"لا توجد ملفات مكررة لنفس الموقع", es:"No hay listados duplicados para la misma ubicación"},
why:{en:"Duplicates split reviews and citation strength between two competing profiles.", ar:"التكرار يقسم التقييمات وقوة الاستشهاد بين ملفين متنافسين.", es:"Los duplicados dividen las reseñas y la fuerza de citación entre dos perfiles que compiten entre sí."},
fix:{en:"Search your clinic name + city; request merge or removal of any duplicate through Google's support form.", ar:"ابحثوا عن اسم عيادتكم + المدينة؛ اطلبوا الدمج أو الحذف لأي تكرار عبر نموذج دعم جوجل.", es:"Busque el nombre de su clínica + ciudad; solicite fusionar o eliminar cualquier duplicado a través del formulario de soporte de Google."} },
{ id:"nap04", weight:2,
text:{en:"Website footer and contact page both show full NAP", ar:"تذييل الموقع وصفحة التواصل يظهران بيانات كاملة", es:"El pie de página y la página de contacto muestran el NAP completo"},
why:{en:"An easy, consistent NAP citation on your own site anchors everything else.", ar:"وجود استشهاد ثابت وسهل في موقعكم يرسّخ كل شيء آخر.", es:"Una citación NAP fácil y consistente en su propio sitio ancla todo lo demás."},
fix:{en:"Add name, address, and phone as plain text (not just an image) in the footer and contact page.", ar:"أضيفوا الاسم والعنوان والهاتف كنص عادي (وليس صورة فقط) في التذييل وصفحة التواصل.", es:"Agregue nombre, dirección y teléfono como texto simple (no solo una imagen) en el pie y la página de contacto."} },
{ id:"nap05", weight:1,
text:{en:"Phone number is a local number, not a call-tracking number that changes often", ar:"رقم الهاتف محلي وليس رقم تتبع مكالمات يتغير كثيراً", es:"El número de teléfono es local, no un número de seguimiento que cambia con frecuencia"},
why:{en:"Frequently changing tracking numbers create NAP mismatches over time.", ar:"أرقام التتبع المتغيرة باستمرار تخلق تعارضات في البيانات مع الوقت.", es:"Los números de seguimiento que cambian frecuentemente generan inconsistencias en el NAP con el tiempo."},
fix:{en:"If using call tracking, keep the same number long-term and sync it with directories after any change.", ar:"إذا كنتم تستخدمون تتبع المكالمات، احتفظوا بنفس الرقم لفترة طويلة وحدّثوه في الأدلة عند أي تغيير.", es:"Si usa seguimiento de llamadas, mantenga el mismo número a largo plazo y sincronícelo con los directorios tras cualquier cambio."} },
],
},
{
id: "onpage",
name: {en:"On-Page & Website", ar:"الموقع الإلكتروني والصفحات", es:"Sitio Web y Contenido en Página"},
intro: {
en:"Your profile gets patients to consider you, your website is what convinces them to book.",
ar:"ملفكم يجعل المرضى يفكرون بكم، موقعكم هو ما يقنعهم بالحجز.",
es:"Su perfil hace que los pacientes lo consideren, su sitio web es lo que los convence de reservar."
},
items: [
{ id:"op01", weight:3,
text:{en:"A dedicated page exists for each core service (e.g. \"Root Canal Treatment in [City]\")", ar:"توجد صفحة مخصصة لكل خدمة أساسية (مثال: \"علاج عصب الأسنان في [المدينة]\")", es:"Existe una página dedicada para cada servicio principal (ej. \"Tratamiento de Conducto en [Ciudad]\")"},
why:{en:"A single generic homepage can't rank for every service and location combination patients search.", ar:"صفحة رئيسية عامة واحدة لا يمكنها الترتيب لكل مجموعة خدمة وموقع يبحث عنها المرضى.", es:"Una sola página de inicio genérica no puede posicionarse para cada combinación de servicio y ubicación que buscan los pacientes."},
fix:{en:"Create one page per major service naming both the treatment and your city/area.", ar:"أنشئوا صفحة واحدة لكل خدمة رئيسية تذكر العلاج ومدينتكم/منطقتكم.", es:"Cree una página por cada servicio principal, nombrando el tratamiento y su ciudad/área."} },
{ id:"op02", weight:2,
text:{en:"Title tags include specialty + city", ar:"عناوين الصفحات تتضمن التخصص والمدينة", es:"Las etiquetas de título incluyen especialidad + ciudad"},
why:{en:"The title tag is one of the strongest on-page relevance signals for local search.", ar:"وسم العنوان من أقوى مؤشرات الصلة داخل الصفحة للبحث المحلي.", es:"La etiqueta de título es una de las señales de relevancia más fuertes para la búsqueda local."},
fix:{en:"Rewrite each page title as \"[Service] in [City] | [Clinic Name]\".", ar:"أعيدوا صياغة عنوان كل صفحة كـ \"[الخدمة] في [المدينة] | [اسم العيادة]\".", es:"Reescriba cada título de página como \"[Servicio] en [Ciudad] | [Nombre de la Clínica]\"."} },
{ id:"op03", weight:1,
text:{en:"Meta descriptions are written (not left blank/auto-generated)", ar:"الأوصاف التعريفية مكتوبة (وليست فارغة أو تلقائية)", es:"Las meta descripciones están escritas (no vacías ni generadas automáticamente)"},
why:{en:"A missing meta description means Google shows a random page snippet instead of your pitch.", ar:"غياب الوصف التعريفي يعني أن جوجل تعرض مقتطفاً عشوائياً بدلاً من رسالتكم.", es:"Sin meta descripción, Google muestra un fragmento aleatorio de la página en lugar de su mensaje."},
fix:{en:"Write a 1–2 sentence description per page including city and a reason to book.", ar:"اكتبوا وصفاً من جملة أو جملتين لكل صفحة يتضمن المدينة وسبباً للحجز.", es:"Escriba una descripción de 1-2 oraciones por página, incluyendo la ciudad y una razón para reservar."} },
{ id:"op04", weight:2,
text:{en:"LocalBusiness or MedicalClinic schema markup is installed", ar:"تم تركيب بيانات Schema من نوع LocalBusiness أو MedicalClinic", es:"Se instaló el marcado de esquema LocalBusiness o MedicalClinic"},
why:{en:"Schema helps Google parse your hours, address, and reviews accurately for rich results.", ar:"البيانات المنظمة تساعد جوجل على فهم ساعاتكم وعنوانكم وتقييماتكم بدقة لعرض نتائج غنية.", es:"El schema ayuda a Google a interpretar correctamente sus horarios, dirección y reseñas para resultados enriquecidos."},
fix:{en:"Add LocalBusiness/MedicalClinic (or Physician) schema via your site's theme, plugin, or a developer.", ar:"أضيفوا بيانات LocalBusiness/MedicalClinic (أو Physician) عبر قالب موقعكم أو إضافة أو مطور.", es:"Agregue el esquema LocalBusiness/MedicalClinic (o Physician) mediante el tema de su sitio, un plugin, o un desarrollador."} },
{ id:"op05", weight:1,
text:{en:"A Google Map is embedded on the contact/location page", ar:"تم تضمين خريطة جوجل في صفحة التواصل/الموقع", es:"Un mapa de Google está incrustado en la página de contacto/ubicación"},
why:{en:"An embedded map reinforces your location signal and helps patients get directions.", ar:"الخريطة المضمّنة تعزز إشارة موقعكم وتساعد المرضى في الحصول على الاتجاهات.", es:"Un mapa incrustado refuerza la señal de ubicación y ayuda a los pacientes a obtener direcciones."},
fix:{en:"Embed the Google Maps iframe for your exact verified GBP location on your contact page.", ar:"ضمّنوا إطار خرائط جوجل لموقعكم الدقيق والمحقق في صفحة التواصل.", es:"Incruste el iframe de Google Maps para su ubicación exacta y verificada de GBP en la página de contacto."} },
{ id:"op06", weight:2,
text:{en:"Site loads acceptably fast on mobile", ar:"الموقع يُحمّل بسرعة مقبولة على الجوال", es:"El sitio carga a una velocidad aceptable en móvil"},
why:{en:"Most local searches happen on mobile, slow load times lose patients before the page even shows.", ar:"معظم عمليات البحث المحلي تتم عبر الجوال، البطء يفقد المرضى حتى قبل ظهور الصفحة.", es:"La mayoría de las búsquedas locales ocurren en móvil, la carga lenta pierde pacientes antes de que la página aparezca."},
fix:{en:"Run your homepage through PageSpeed Insights and fix the top 1–2 flagged issues.", ar:"افحصوا صفحتكم الرئيسية عبر PageSpeed Insights وأصلحوا أهم مشكلة أو مشكلتين.", es:"Pase su página de inicio por PageSpeed Insights y corrija los 1-2 problemas principales señalados."} },
{ id:"op07", weight:2,
text:{en:"FAQ section answers real local search questions (insurance, walk-ins, languages spoken)", ar:"قسم الأسئلة الشائعة يجيب على أسئلة بحث محلي حقيقية (التأمين، الحضور دون موعد، اللغات)", es:"La sección de preguntas frecuentes responde consultas reales de búsqueda local (seguros, sin cita, idiomas)"},
why:{en:"These are exactly the phrases patients type before choosing where to book.", ar:"هذه بالضبط العبارات التي يكتبها المرضى قبل اختيار مكان الحجز.", es:"Estas son exactamente las frases que los pacientes escriben antes de decidir dónde reservar."},
fix:{en:"Add a FAQ block per key page answering the 5 questions your front desk hears most.", ar:"أضيفوا قسم أسئلة شائعة في كل صفحة رئيسية يجيب على أكثر 5 أسئلة يسمعها موظفو الاستقبال.", es:"Agregue un bloque de preguntas frecuentes por página clave respondiendo las 5 preguntas más comunes en recepción."} },
{ id:"op08", weight:1,
text:{en:"Individual doctor bio pages exist with name, specialty, and credentials", ar:"توجد صفحات سيرة ذاتية لكل طبيب تتضمن الاسم والتخصص والمؤهلات", es:"Existen páginas de perfil individuales para cada médico con nombre, especialidad y credenciales"},
why:{en:"Patients often search a doctor's name directly, and Google treats providers as separate entities from the practice.", ar:"يبحث المرضى غالباً عن اسم الطبيب مباشرة، وتعامل جوجل مقدمي الرعاية ككيانات منفصلة عن العيادة.", es:"Los pacientes suelen buscar directamente el nombre del médico, y Google trata a los proveedores como entidades separadas de la clínica."},
fix:{en:"Give each doctor their own page with photo, specialty, credentials, and languages spoken.", ar:"امنحوا كل طبيب صفحته الخاصة مع صورة وتخصص ومؤهلات واللغات التي يتحدثها.", es:"Dele a cada médico su propia página con foto, especialidad, credenciales e idiomas que habla."} },
],
},
{
id: "reviews",
name: {en:"Reviews & Reputation", ar:"التقييمات والسمعة", es:"Reseñas y Reputación"},
intro: {
en:"Reviews are the single biggest trust signal patients see before they ever speak to your staff.",
ar:"التقييمات هي أكبر مؤشر ثقة يراه المرضى قبل التحدث مع فريقكم.",
es:"Las reseñas son la señal de confianza más grande que ven los pacientes antes de hablar con su personal."
},
items: [
{ id:"rev01", weight:3,
text:{en:"A consistent process exists for asking patients for reviews", ar:"توجد عملية ثابتة لطلب التقييمات من المرضى", es:"Existe un proceso constante para pedir reseñas a los pacientes"},
why:{en:"Clinics with no ask-process get reviews randomly and rarely, competitors who ask systematically pull ahead.", ar:"العيادات دون عملية طلب منظمة تحصل على تقييمات نادرة وعشوائية، المنافسون الذين يطلبون بانتظام يتقدمون.", es:"Las clínicas sin un proceso de solicitud reciben reseñas de forma aleatoria y escasa, los competidores que piden sistemáticamente avanzan."},
fix:{en:"Send a review request message after every completed appointment (see copy-paste templates below).", ar:"أرسلوا رسالة طلب تقييم بعد كل موعد مكتمل (انظر القوالب الجاهزة للنسخ أدناه).", es:"Envíe un mensaje de solicitud de reseña después de cada cita completada (vea las plantillas abajo)."} },
{ id:"rev02", weight:2,
text:{en:"Review volume is growing month over month, not flat", ar:"عدد التقييمات في ازدياد شهرياً، وليس ثابتاً", es:"El volumen de reseñas crece mes a mes, no está estancado"},
why:{en:"A stalled review count signals inactivity to both patients and Google's ranking factors.", ar:"ثبات عدد التقييمات يشير إلى الخمول للمرضى ولعوامل ترتيب جوجل على حد سواء.", es:"Un conteo de reseñas estancado señala inactividad tanto a pacientes como a los factores de posicionamiento de Google."},
fix:{en:"Track monthly review count; if flat, increase how often and how many staff ask.", ar:"تابعوا عدد التقييمات الشهري؛ إذا كان ثابتاً، زيدوا وتيرة الطلب وعدد الموظفين الذين يطلبونه.", es:"Rastree el conteo mensual de reseñas; si está estancado, aumente la frecuencia y cuántos miembros del personal las piden."} },
{ id:"rev03", weight:2,
text:{en:"Every review, positive or negative, gets a reply within a few days", ar:"كل تقييم، إيجابياً كان أم سلبياً، يحصل على رد خلال أيام قليلة", es:"Cada reseña, positiva o negativa, recibe respuesta en pocos días"},
why:{en:"Unanswered reviews, especially negative ones, read as a clinic that doesn't listen.", ar:"التقييمات غير المُجابة، خاصة السلبية، تُقرأ على أنها عيادة لا تستمع.", es:"Las reseñas sin responder, especialmente las negativas, se perciben como una clínica que no escucha."},
fix:{en:"Assign one staff member to reply to all new reviews within 48–72 hours.", ar:"عيّنوا موظفاً واحداً للرد على كل التقييمات الجديدة خلال 48-72 ساعة.", es:"Asigne a un miembro del personal para responder todas las reseñas nuevas dentro de 48-72 horas."} },
{ id:"rev04", weight:2,
text:{en:"Negative review replies stay professional and never argue in public", ar:"الردود على التقييمات السلبية تبقى مهنية ولا تجادل علناً", es:"Las respuestas a reseñas negativas se mantienen profesionales y nunca discuten en público"},
why:{en:"A defensive public reply damages trust more than the original complaint.", ar:"الرد الدفاعي العلني يضر بالثقة أكثر من الشكوى الأصلية.", es:"Una respuesta pública a la defensiva daña más la confianza que la queja original."},
fix:{en:"Acknowledge the concern, keep it brief, and invite the person to continue the conversation privately.", ar:"اعترفوا بالمخاوف، اجعلوا الرد موجزاً، وادعوا الشخص لمتابعة الحديث بشكل خاص.", es:"Reconozca la inquietud, manténgalo breve, e invite a la persona a continuar la conversación en privado."} },
{ id:"rev05", weight:3,
text:{en:"No review ever requests or implies a specific star rating", ar:"لا يطلب أو يلمّح أي طلب تقييم إلى عدد نجوم معين", es:"Ninguna solicitud pide o insinúa una calificación de estrellas específica"},
why:{en:"Soliciting a specific rating violates Google's policies and most local advertising regulations.", ar:"طلب تقييم محدد ينتهك سياسات جوجل ومعظم أنظمة الإعلان المحلية.", es:"Solicitar una calificación específica viola las políticas de Google y la mayoría de las regulaciones de publicidad local."},
fix:{en:"Ask patients to \"share their experience\", never to \"leave 5 stars.\"", ar:"اطلبوا من المرضى \"مشاركة تجربتهم\", وليس أبداً \"ترك 5 نجوم\".", es:"Pida a los pacientes \"compartir su experiencia\", nunca \"dejar 5 estrellas\"."} },
{ id:"rev06", weight:2,
text:{en:"Review requests go out to all patients, not only ones you expect to be happy", ar:"طلبات التقييم تُرسل لجميع المرضى، وليس فقط لمن تتوقعون رضاهم", es:"Las solicitudes de reseña se envían a todos los pacientes, no solo a los que se espera que estén satisfechos"},
why:{en:"Selectively asking only satisfied patients is a form of review gating that platforms increasingly penalize.", ar:"طلب التقييم بشكل انتقائي من المرضى الراضين فقط هو شكل من أشكال \"فلترة التقييمات\" الذي تعاقب عليه المنصات بشكل متزايد.", es:"Pedir selectivamente solo a pacientes satisfechos es una forma de filtrado de reseñas que las plataformas penalizan cada vez más."},
fix:{en:"Send the same review request to every completed appointment, without pre-filtering.", ar:"أرسلوا نفس طلب التقييم لكل موعد مكتمل، دون فلترة مسبقة.", es:"Envíe la misma solicitud de reseña a cada cita completada, sin filtrar de antemano."} },
],
},
{
id: "content",
name: {en:"Local Content & AI Visibility", ar:"المحتوى المحلي والظهور في الذكاء الاصطناعي", es:"Contenido Local y Visibilidad en IA"},
intro: {
en:"Patients increasingly ask ChatGPT, Gemini, and AI Overviews before they ever open Google Maps.",
ar:"يسأل المرضى بشكل متزايد ChatGPT وGemini ونتائج الذكاء الاصطناعي قبل فتح خرائط جوجل.",
es:"Cada vez más pacientes preguntan a ChatGPT, Gemini y las Vistas Generales de IA antes de abrir Google Maps."
},
items: [
{ id:"con01", weight:3,
text:{en:"You've checked whether your clinic is mentioned when you ask an AI assistant \"[specialty] near [city]\"", ar:"تحققتم إن كانت عيادتكم تُذكر عند سؤال مساعد ذكاء اصطناعي \"[التخصص] بالقرب من [المدينة]\"", es:"Verificó si su clínica es mencionada al preguntarle a un asistente de IA \"[especialidad] cerca de [ciudad]\""},
why:{en:"If AI tools don't know you exist, you're invisible in a growing share of the discovery journey.", ar:"إذا كانت أدوات الذكاء الاصطناعي لا تعرف بوجودكم، فأنتم غائبون عن جزء متنامٍ من رحلة الاكتشاف.", es:"Si las herramientas de IA no saben que usted existe, es invisible en una parte creciente del recorrido de búsqueda."},
fix:{en:"Ask ChatGPT, Gemini, and Google AI Overviews your own specialty + city query and note whether you appear.", ar:"اسألوا ChatGPT وGemini ونتائج الذكاء الاصطناعي من جوجل عن تخصصكم ومدينتكم ولاحظوا إن كنتم تظهرون.", es:"Pregúntele a ChatGPT, Gemini y las Vistas Generales de IA de Google sobre su especialidad + ciudad y verifique si aparece."} },
{ id:"con02", weight:2,
text:{en:"Website content clearly states what you treat, where, and for whom, in plain sentences", ar:"محتوى الموقع يوضح بجمل بسيطة ما تعالجونه وأين ولمن", es:"El contenido del sitio web indica claramente qué tratan, dónde, y para quién, en oraciones simples"},
why:{en:"AI answer engines pull from clearly-written, well-structured web content, not clever marketing copy.", ar:"محركات إجابة الذكاء الاصطناعي تعتمد على محتوى واضح ومنظم جيداً، وليس نصوصاً تسويقية معقدة.", es:"Los motores de respuesta de IA extraen contenido claro y bien estructurado, no textos de marketing elaborados."},
fix:{en:"Make sure at least one page states plainly: \"[Clinic] treats [conditions] in [city] for [patient type].\"", ar:"تأكدوا أن صفحة واحدة على الأقل تنص بوضوح: \"[العيادة] تعالج [الحالات] في [المدينة] لـ [نوع المرضى]\".", es:"Asegúrese de que al menos una página indique claramente: \"[Clínica] trata [afecciones] en [ciudad] para [tipo de paciente].\""} },
{ id:"con03", weight:2,
text:{en:"At least one piece of content answers a common patient question in full", ar:"يوجد محتوى واحد على الأقل يجيب بالكامل على سؤال شائع للمرضى", es:"Al menos un contenido responde por completo una pregunta común de pacientes"},
why:{en:"Long-form, genuinely useful answers are what AI systems and Google both prefer to cite.", ar:"الإجابات الطويلة والمفيدة فعلاً هي ما تفضل جوجل وأنظمة الذكاء الاصطناعي الاستشهاد بها.", es:"Las respuestas extensas y genuinamente útiles son lo que tanto los sistemas de IA como Google prefieren citar."},
fix:{en:"Write one thorough article answering a real question your front desk gets asked often.", ar:"اكتبوا مقالاً شاملاً يجيب على سؤال حقيقي يُسأل عنه موظفو الاستقبال كثيراً.", es:"Escriba un artículo completo respondiendo una pregunta real que su recepción escucha con frecuencia."} },
{ id:"con04", weight:1,
text:{en:"Content is updated at least twice a year, not left untouched for years", ar:"المحتوى يُحدَّث مرتين سنوياً على الأقل، وليس مهملاً لسنوات", es:"El contenido se actualiza al menos dos veces al año, no se deja sin tocar por años"},
why:{en:"Outdated content signals staleness to both search engines and AI crawlers.", ar:"المحتوى القديم يشير إلى الركود لمحركات البحث وزواحف الذكاء الاصطناعي على حد سواء.", es:"El contenido desactualizado indica estancamiento tanto a los motores de búsqueda como a los rastreadores de IA."},
fix:{en:"Set a recurring reminder to review and refresh your top 3 pages every 6 months.", ar:"ضعوا تذكيراً دورياً لمراجعة وتحديث أهم 3 صفحات كل 6 أشهر.", es:"Configure un recordatorio recurrente para revisar y actualizar sus 3 páginas principales cada 6 meses."} },
{ id:"con05", weight:2,
text:{en:"Structured FAQ content exists in a clear question-and-answer format", ar:"يوجد محتوى أسئلة شائعة منظم بصيغة سؤال وجواب واضحة", es:"Existe contenido de preguntas frecuentes en un formato claro de pregunta y respuesta"},
why:{en:"Clear Q&A formatting is easier for both patients and AI systems to extract and quote.", ar:"تنسيق السؤال والجواب الواضح أسهل على المرضى وأنظمة الذكاء الاصطناعي لاستخراجه واقتباسه.", es:"El formato claro de preguntas y respuestas es más fácil de extraer y citar tanto para pacientes como para sistemas de IA."},
fix:{en:"Format FAQs as literal question headers followed by direct answers, not buried in paragraphs.", ar:"نسّقوا الأسئلة الشائعة كعناوين أسئلة حرفية تليها إجابات مباشرة، وليس مدفونة داخل فقرات.", es:"Formatee las preguntas frecuentes como encabezados de preguntas literales seguidos de respuestas directas, no ocultas en párrafos."} },
],
},
{
id: "competitor",
name: {en:"Competitor Benchmark", ar:"مقارنة مع المنافسين", es:"Comparación con la Competencia"},
intro: {
en:"A quick manual check, no tools needed, just five minutes and an honest look.",
ar:"فحص سريع يدوي، لا حاجة لأدوات، فقط خمس دقائق ونظرة صادقة.",
es:"Una revisión manual rápida, no se necesitan herramientas, solo cinco minutos y una mirada honesta."
},
items: [
{ id:"cmp01", weight:2,
text:{en:"Searched your specialty + city and noted who appears in the map pack", ar:"بحثتم عن تخصصكم + المدينة ولاحظتم من يظهر في نتائج الخريطة", es:"Buscó su especialidad + ciudad y anotó quién aparece en el paquete de mapas"},
why:{en:"This is exactly what a prospective patient sees before they ever consider you.", ar:"هذا بالضبط ما يراه المريض المحتمل قبل أن يفكر بكم.", es:"Esto es exactamente lo que ve un paciente potencial antes de considerarlo a usted."},
fix:{en:"Search \"[your specialty] in [your city]\" from an incognito window and list the top 3 results.", ar:"ابحثوا \"[تخصصكم] في [مدينتكم]\" من نافذة تصفح خفي ودوّنوا أفضل 3 نتائج.", es:"Busque \"[su especialidad] en [su ciudad]\" desde una ventana de incógnito y liste los 3 primeros resultados."} },
{ id:"cmp02", weight:2,
text:{en:"Compared your review count and rating against those top 3", ar:"قارنتم عدد تقييماتكم وتقييمكم مع أفضل 3 منافسين", es:"Comparó su número de reseñas y calificación con esos 3 primeros"},
why:{en:"Review count and rating are among the most visible trust signals in the map pack.", ar:"عدد التقييمات والتقييم من أبرز مؤشرات الثقة في نتائج الخريطة.", es:"El número de reseñas y la calificación están entre las señales de confianza más visibles en el paquete de mapas."},
fix:{en:"Note their review counts and ratings next to yours, this is your gap to close.", ar:"دوّنوا عدد تقييماتهم وتقييمهم بجانب تقييمكم، هذه هي الفجوة التي عليكم سدها.", es:"Anote su número de reseñas y calificaciones junto a los suyos, esta es la brecha que debe cerrar."} },
{ id:"cmp03", weight:1,
text:{en:"Compared your photo count and posting frequency against theirs", ar:"قارنتم عدد صوركم ووتيرة نشركم مع منافسيكم", es:"Comparó su número de fotos y frecuencia de publicaciones con las de ellos"},
why:{en:"A more active competitor profile often outranks a technically-complete but static one.", ar:"ملف المنافس الأكثر نشاطاً غالباً يتفوق على ملف مكتمل تقنياً لكن ثابت.", es:"Un perfil de competidor más activo suele superar a uno técnicamente completo pero estático."},
fix:{en:"Check how recently they've posted or added photos versus your own last update.", ar:"تحققوا من آخر مرة نشروا أو أضافوا صوراً مقارنة بآخر تحديث لكم.", es:"Revise qué tan recientemente publicaron o agregaron fotos en comparación con su última actualización."} },
{ id:"cmp04", weight:1,
text:{en:"Checked whether they rank higher without having a better clinical reputation", ar:"تحققتم إن كانوا يتصدرون الترتيب دون سمعة سريرية أفضل", es:"Verificó si están mejor posicionados sin tener una mejor reputación clínica"},
why:{en:"If a competitor with weaker reviews outranks you, the gap is almost always local SEO execution, not quality of care.", ar:"إذا تفوق منافس ذو تقييمات أضعف عليكم في الترتيب، فالفجوة غالباً في تنفيذ السيو المحلي، وليس جودة الرعاية.", es:"Si un competidor con reseñas más débiles lo supera en posicionamiento, la brecha casi siempre está en la ejecución de SEO local, no en la calidad de atención."},
fix:{en:"If so, that gap is your evidence to prioritize the exact modules above where they're stronger.", ar:"إذا كان الأمر كذلك، فهذه الفجوة هي دليلكم لإعطاء الأولوية للأقسام أعلاه حيث هم أقوى.", es:"Si es así, esa brecha es su evidencia para priorizar los módulos anteriores donde ellos son más fuertes."} },
],
},
];
// HMA Local Visibility Check, country configuration
// regNote: trilingual callout shown in GBP/Reviews modules
const COUNTRIES = {
uae: {
name: "United Arab Emirates",
region: "Middle East",
directories: ["Google Business Profile","DHA/DoH-linked facility directory (per emirate)","Daman provider directory","Thiqa provider listing","Yelp","Facebook Business Page","Local mall/community directories (if applicable)"],
regNote: {
en:"DHA (Dubai) and DoH (Abu Dhabi) restrict how patient testimonials and before/after content can be advertised, review requests must stay generic and never solicit a specific rating or clinical claim.",
ar:"تفرض هيئة الصحة بدبي وهيئة الصحة بأبوظبي قيوداً على الإعلان عن شهادات المرضى ومحتوى قبل/بعد، يجب أن تبقى طلبات التقييم عامة ولا تطلب تقييماً محدداً أو ادعاءً سريرياً.",
es:"La DHA (Dubái) y el DoH (Abu Dabi) restringen cómo se pueden publicitar los testimonios de pacientes y el contenido antes/después, las solicitudes de reseña deben ser genéricas y nunca pedir una calificación específica o afirmación clínica."
},
},
ksa: {
name: "Saudi Arabia",
region: "Middle East",
directories: ["Google Business Profile","MOH-linked facility listings (where applicable)","Local insurer provider directories","Facebook Business Page","Local business directories"],
regNote: {
en:"Saudi MOH advertising rules restrict clinical claims and testimonials in marketing, keep review requests general and avoid implying guaranteed outcomes.",
ar:"تقيّد أنظمة وزارة الصحة السعودية الادعاءات السريرية والشهادات في التسويق، أبقوا طلبات التقييم عامة وتجنبوا الإيحاء بنتائج مضمونة.",
es:"Las normas publicitarias del MOH saudí restringen las afirmaciones clínicas y los testimonios en marketing, mantenga las solicitudes de reseña generales y evite insinuar resultados garantizados."
},
},
uk: {
name: "United Kingdom",
region: "Europe",
directories: ["Google Business Profile","NHS service directory (if applicable)","Bing Places","Yell.com","Facebook Business Page","PatientAccess/relevant booking directories"],
regNote: {
en:"The CAP/ASA code prohibits misleading claims and requires that testimonials reflect genuine patient experience, never edit or cherry-pick reviews to imply guaranteed results.",
ar:"تحظر لوائح CAP/ASA الادعاءات المضللة وتشترط أن تعكس الشهادات تجربة حقيقية للمريض، لا تحرروا أو تنتقوا التقييمات لإيحاء نتائج مضمونة.",
es:"El código CAP/ASA prohíbe las afirmaciones engañosas y exige que los testimonios reflejen una experiencia genuina del paciente, nunca edite ni seleccione reseñas para insinuar resultados garantizados."
},
},
germany: {
name: "Germany",
region: "Europe",
directories: ["Google Business Profile","Jameda","Doctolib","Das Örtliche","Facebook Business Page"],
regNote: {
en:"The Heilmittelwerbegesetz (HWG) restricts medical advertising claims, keep all patient-facing copy factual and avoid before/after or outcome guarantees.",
ar:"يقيّد قانون الإعلان عن المنتجات الطبية الألماني (HWG) الادعاءات الإعلانية الطبية، أبقوا كل النصوص الموجهة للمرضى واقعية وتجنبوا صور قبل/بعد أو ضمانات النتائج.",
es:"La Heilmittelwerbegesetz (HWG) restringe las afirmaciones publicitarias médicas, mantenga todo el contenido dirigido a pacientes factual y evite garantías de resultados o contenido antes/después."
},
},
france: {
name: "France",
region: "Europe",
directories: ["Google Business Profile","Doctolib","PagesJaunes","Facebook Business Page"],
regNote: {
en:"French Ordre des Médecins/Ordre des Chirurgiens-Dentistes rules limit promotional claims, review requests and content should stay factual and not resemble advertising testimonials.",
ar:"تحد قواعد نقابة الأطباء/نقابة أطباء الأسنان الفرنسية من الادعاءات الترويجية، يجب أن تبقى طلبات التقييم والمحتوى واقعية ولا تشبه الشهادات الإعلانية.",
es:"Las reglas del Ordre des Médecins/Ordre des Chirurgiens-Dentistes franceses limitan las afirmaciones promocionales, las solicitudes de reseña y el contenido deben ser factuales y no parecer testimonios publicitarios."
},
},
switzerland: {
name: "Switzerland",
region: "Europe",
directories: ["Google Business Profile","local.ch","search.ch","Doctena","Facebook Business Page"],
regNote: {
en:"Swiss HMG (Heilmittelgesetz) restricts medical advertising claims; data handling should also respect Swiss FADP requirements when storing patient contact details.",
ar:"يقيّد قانون المنتجات الطبية السويسري (HMG) الادعاءات الإعلانية الطبية؛ يجب أيضاً مراعاة متطلبات قانون حماية البيانات السويسري (FADP) عند تخزين بيانات تواصل المرضى.",
es:"La HMG suiza (Heilmittelgesetz) restringe las afirmaciones publicitarias médicas; el manejo de datos también debe respetar los requisitos de la FADP suiza al almacenar datos de contacto de pacientes."
},
},
spain: {
name: "Spain",
region: "Europe",
directories: ["Google Business Profile","Doctoralia","PáginasAmarillas","Facebook Business Page"],
regNote: {
en:"Spanish healthcare advertising rules restrict outcome claims and require any testimonial to be genuine and unedited.",
ar:"تقيّد أنظمة الإعلان الصحي الإسبانية الادعاءات المتعلقة بالنتائج وتشترط أن تكون أي شهادة حقيقية وغير محررة.",
es:"Las normas españolas de publicidad sanitaria restringen las afirmaciones sobre resultados y exigen que cualquier testimonio sea genuino y sin editar."
},
},
india: {
name: "India",
region: "Asia",
directories: ["Google Business Profile","Practo","Justdial","Sulekha","Facebook Business Page"],
regNote: {
en:"The National Medical Commission's code restricts physicians from soliciting patients through advertising claims, keep listings factual and avoid promotional language around outcomes.",
ar:"تقيّد لائحة اللجنة الطبية الوطنية استقطاب المرضى عبر الادعاءات الإعلانية، أبقوا الملفات واقعية وتجنبوا لغة ترويجية حول النتائج.",
es:"El código de la Comisión Médica Nacional restringe que los médicos capten pacientes mediante afirmaciones publicitarias, mantenga los listados factuales y evite el lenguaje promocional sobre resultados."
},
},
singapore: {
name: "Singapore",
region: "Asia",
directories: ["Google Business Profile","HealthHub (if applicable)","Facebook Business Page","Local clinic directories"],
regNote: {
en:"MOH/SMC advertising guidelines restrict clinical claims and testimonials, keep patient-facing content factual and avoid implying guaranteed outcomes.",
ar:"تقيّد إرشادات وزارة الصحة/المجلس الطبي السنغافوري الادعاءات السريرية والشهادات، أبقوا المحتوى الموجه للمرضى واقعياً وتجنبوا الإيحاء بنتائج مضمونة.",
es:"Las directrices publicitarias del MOH/SMC restringen las afirmaciones clínicas y los testimonios, mantenga el contenido dirigido a pacientes factual y evite insinuar resultados garantizados."
},
},
australia: {
name: "Australia",
region: "Oceania",
directories: ["Google Business Profile","HealthEngine","Yellow Pages Australia","Facebook Business Page","True Local"],
regNote: {
en:"AHPRA's National Law restricts testimonials in advertising for regulated health services, check current AHPRA guidance before featuring patient reviews in ads or on-site.",
ar:"يقيّد القانون الوطني لهيئة AHPRA استخدام الشهادات في الإعلان عن الخدمات الصحية المنظمة، راجعوا إرشادات AHPRA الحالية قبل عرض تقييمات المرضى في الإعلانات أو الموقع.",
es:"La Ley Nacional de AHPRA restringe los testimonios en publicidad de servicios de salud regulados, revise las directrices vigentes de AHPRA antes de mostrar reseñas de pacientes en anuncios o en el sitio."
},
},
usa: {
name: "United States",
region: "Americas",
directories: ["Google Business Profile","Healthgrades","Zocdoc","Vitals","WebMD Provider Directory","Yelp","Facebook Business Page"],
regNote: {
en:"Keep any patient communication and review requests HIPAA-safe, never reference a patient's condition or visit details in a public or semi-public message.",
ar:"أبقوا كل تواصل مع المرضى وطلبات التقييم متوافقة مع HIPAA, لا تذكروا أبداً حالة المريض أو تفاصيل الزيارة في رسالة عامة أو شبه عامة.",
es:"Mantenga toda comunicación con pacientes y solicitudes de reseña conforme a HIPAA, nunca mencione la condición o los detalles de la visita de un paciente en un mensaje público o semipúblico."
},
},
canada: {
name: "Canada",
region: "Americas",
directories: ["Google Business Profile","RateMDs","Yelp","Facebook Business Page","Provincial college directories"],
regNote: {
en:"Provincial College advertising rules (varies by province) restrict testimonials and outcome claims, check your provincial college's code before publishing patient content.",
ar:"تقيّد أنظمة الكليات الطبية الإقليمية (تختلف حسب المقاطعة) الشهادات والادعاءات المتعلقة بالنتائج، راجعوا لائحة كليتكم الإقليمية قبل نشر محتوى المرضى.",
es:"Las normas del colegio provincial (varían según la provincia) restringen los testimonios y las afirmaciones de resultados, revise el código de su colegio provincial antes de publicar contenido de pacientes."
},
},
colombia: {
name: "Colombia",
region: "Americas",
directories: ["Google Business Profile","Doctoralia","PáginasAmarillas Colombia","Facebook Business Page"],
regNote: {
en:"Colombian health advertising regulations (Ley 1438 and related MinSalud rules) restrict promotional claims about outcomes, keep messaging factual and compliant.",
ar:"تقيّد أنظمة الإعلان الصحي الكولومبية (القانون 1438 وقواعد وزارة الصحة ذات الصلة) الادعاءات الترويجية حول النتائج، أبقوا الرسائل واقعية ومتوافقة.",
es:"Las regulaciones colombianas de publicidad en salud (Ley 1438 y normas relacionadas del MinSalud) restringen las afirmaciones promocionales sobre resultados, mantenga los mensajes factuales y conformes."
},
},
mexico: {
name: "Mexico",
region: "Americas",
directories: ["Google Business Profile","Doctoralia","SeccionAmarilla","Facebook Business Page"],
regNote: {
en:"COFEPRIS advertising rules restrict medical outcome claims, keep patient-facing copy factual and avoid guaranteed-result language.",
ar:"تقيّد أنظمة الإعلان الخاصة بـ COFEPRIS الادعاءات المتعلقة بالنتائج الطبية، أبقوا النصوص الموجهة للمرضى واقعية وتجنبوا لغة النتائج المضمونة.",
es:"Las normas publicitarias de COFEPRIS restringen las afirmaciones sobre resultados médicos, mantenga el contenido dirigido a pacientes factual y evite el lenguaje de resultados garantizados."
},
},
global: {
name: "Global / Other",
region: "Everywhere else",
directories: ["Google Business Profile","Your country's leading local business directory","A healthcare-specific directory if one exists in your market","Facebook Business Page","Any insurer-run provider directory you're part of"],
regNote: {
en:"Check your country's medical advertising and patient-testimonial rules before publishing reviews or promotional content, these vary widely and change often.",
ar:"راجعوا أنظمة بلدكم الخاصة بالإعلان الطبي وشهادات المرضى قبل نشر التقييمات أو المحتوى الترويجي، تختلف هذه الأنظمة كثيراً وتتغير باستمرار.",
es:"Revise las normas de su país sobre publicidad médica y testimonios de pacientes antes de publicar reseñas o contenido promocional, varían ampliamente y cambian con frecuencia."
},
},
};
const COUNTRY_ORDER = ["uae","ksa","uk","germany","france","switzerland","spain","india","singapore","australia","usa","canada","colombia","mexico","global"];
// Standalone review templates for the Reviews & Reputation module.
// Compliance rule baked in: never solicit a specific star rating.
const REVIEW_TEMPLATES = [
{
id: "rt1",
title: {en:"Post-visit review request", ar:"طلب تقييم بعد الزيارة", es:"Solicitud de reseña tras la visita"},
when: {en:"Send 2-4 hours after an appointment", ar:"يُرسل بعد 2-4 ساعات من الموعد", es:"Enviar 2-4 horas después de la cita"},
en: "Hi {patient_name}, thank you for visiting {clinic_name} today. If you have a moment, we'd really appreciate you sharing your experience on Google: {review_link}",
ar: "مرحباً {patient_name}، شكراً لزيارتكم عيادة {clinic_name} اليوم. إذا سمح وقتكم، يسعدنا أن تشاركوا تجربتكم على جوجل: {review_link}",
es: "Hola {patient_name}, gracias por visitar {clinic_name} hoy. Si tiene un momento, le agradeceríamos mucho que compartiera su experiencia en Google: {review_link}",
},
{
id: "rt2",
title: {en:"Gentle follow-up (no reply after first ask)", ar:"متابعة لطيفة (دون رد على الطلب الأول)", es:"Seguimiento amable (sin respuesta a la primera solicitud)"},
when: {en:"Send 3-4 days after the first request, only once", ar:"يُرسل بعد 3-4 أيام من الطلب الأول، مرة واحدة فقط", es:"Enviar 3-4 días después de la primera solicitud, solo una vez"},
en: "Hi {patient_name}, just a friendly note, if you'd like to share how your visit to {clinic_name} went, here's the link: {review_link}. No pressure at all!",
ar: "مرحباً {patient_name}، تذكير ودي فقط، إذا رغبتم بمشاركة تجربتكم في عيادة {clinic_name}، إليكم الرابط: {review_link}. بدون أي التزام.",
es: "Hola {patient_name}, solo un recordatorio amable, si desea compartir cómo fue su visita a {clinic_name}, aquí está el enlace: {review_link}. Sin ningún compromiso.",
},
{
id: "rt3",
title: {en:"Thank-you after a review is posted", ar:"شكر بعد نشر التقييم", es:"Agradecimiento tras publicar una reseña"},
when: {en:"Send after noticing a new review from this patient", ar:"يُرسل بعد ملاحظة تقييم جديد من هذا المريض", es:"Enviar al notar una nueva reseña de este paciente"},
en: "Thank you so much for taking the time to leave a review, {patient_name}, we really appreciate it and hope to see you again at {clinic_name}.",
ar: "شكراً جزيلاً لكم على وقتكم في كتابة تقييم، {patient_name}, نقدّر ذلك حقاً ونتطلع لرؤيتكم مجدداً في عيادة {clinic_name}.",
es: "Muchas gracias por tomarse el tiempo de dejar una reseña, {patient_name}, lo apreciamos mucho y esperamos verlo pronto de nuevo en {clinic_name}.",
},
];
const WHATSAPP_TOOL_NOTE = {
en:"Already have the HMA WhatsApp Template Generator? Its Reviews category has 15 more ready-to-send variations, including responses to negative reviews, reuse it alongside this checklist.",
ar:"هل لديكم مولّد قوالب واتساب من HMA؟ يحتوي قسم التقييمات فيه على 15 نسخة إضافية جاهزة للإرسال، بما فيها ردود على التقييمات السلبية، استخدموه جنباً إلى جنب مع هذه القائمة.",
es:"¿Ya tiene el Generador de Plantillas de WhatsApp de HMA? Su categoría de Reseñas tiene 15 variaciones más listas para enviar, incluyendo respuestas a reseñas negativas, úselo junto con esta lista de verificación."
};
(function(){
window.dataLayer = window.dataLayer || [];
function track(event, data){ window.dataLayer.push(Object.assign({event:event}, data||{})); }
var STORAGE_KEY = "hma_local_seo_check_v2";
var ITEM_TO_MODULE = {};
CHECKLIST_MODULES.forEach(function(mod){
mod.items.forEach(function(it){ ITEM_TO_MODULE[it.id] = mod.id; });
});
var state = { uiLang:null, setup:null, checked:{}, openItems:{}, activeModule:CHECKLIST_MODULES[0].id, compare:{} };
function loadState(){
try{
var raw = localStorage.getItem(STORAGE_KEY);
if(raw){
var parsed = JSON.parse(raw);
state.uiLang = parsed.uiLang || null;
state.setup = parsed.setup || null;
state.checked = parsed.checked || {};
state.compare = parsed.compare || {};
}
}catch(e){}
}
function saveState(){
try{ localStorage.setItem(STORAGE_KEY, JSON.stringify({uiLang:state.uiLang, setup:state.setup, checked:state.checked, compare:state.compare})); }catch(e){}
}
function hmalSendSetupEmail(setup){
var countryName = (COUNTRIES[setup.country] && COUNTRIES[setup.country].name) || setup.country;
fetch("https://healthcare-marketing.agency/wp-admin/admin-ajax.php", { // ← replace with your real site URL
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
action: "hmal_send_setup_email",
clinicName: setup.clinicName,
specialty: setup.specialty,
city: setup.city,
country: countryName,
website: setup.website,
insurers: setup.insurers
})
}).catch(function(){ /* fail silently, don't interrupt the tool */ });
}
function t(key){ return (UI[state.uiLang] && UI[state.uiLang][key] !== undefined) ? UI[state.uiLang][key] : UI.en[key]; }
function escapeHtml(str){ return str.replace(/&/g,"&").replace(//g,">"); }
// ---- Language picker (persistent toggle, not a one-time gate) ----
function setActiveLangButton(){
document.querySelectorAll("[data-setlang]").forEach(function(btn){
btn.classList.toggle("active", btn.getAttribute("data-setlang") === state.uiLang);
});
}
document.querySelectorAll("[data-setlang]").forEach(function(btn){
btn.addEventListener("click", function(){
state.uiLang = btn.getAttribute("data-setlang");
track("language_selected", {lang: state.uiLang});
saveState();
applyLanguage();
setActiveLangButton();
});
});
function applyLanguage(){
var root = document.getElementById("hmalRoot");
root.setAttribute("dir", state.uiLang === "ar" ? "rtl" : "ltr");
document.getElementById("hmalHeroEyebrow").textContent = t("heroEyebrow");
document.getElementById("hmalHeroTitle").textContent = t("heroTitle");
document.getElementById("hmalHeroSubtitle").textContent = t("heroSubtitle");
document.getElementById("hmalHowTitle").textContent = t("howTitle");
document.getElementById("hmalHowSteps").innerHTML = t("howSteps").map(function(s){ return "