// seo.jsx — per-page SEO meta for the SPA. // Updates , description, og:*, twitter:*, canonical and <html lang> // whenever the active route or language changes. // // To edit the copy: change the SEO_META object below. // To add a new page: add a new key here and a matching route in AppAlt.jsx. (function () { const SITE_URL = "https://goldorient.kz"; const OG_IMAGE = SITE_URL + "/assets/ad-landscape.jpg"; const SEO_META = { main: { ru: { path: "/", title: "Gold Orient Logistics — Грузоперевозки из Китая в Казахстан и Россию", description: "Доставка грузов из Китая под ключ: авто, ЖД, авиа и мультимодальные перевозки. Один менеджер на маршрут, фиксированный тариф за кг, страхование груза. Расчёт стоимости за 30 секунд.", keywords: "грузоперевозки из Китая, доставка из Китая в Казахстан, доставка из Китая в Россию, логистика Китай Казахстан, карго из Китая, авто перевозки, ЖД перевозки, авиа доставка, мультимодальные перевозки, таможенное оформление, Gold Orient Logistics", }, kz: { path: "/kz/", title: "Gold Orient Logistics — Қытайдан Қазақстан мен Ресейге жүк тасымалы", description: "Қытайдан жүк жеткізу қызметі: авто, теміржол, әуе және мультимодалды тасымал. Маршрутта бір менеджер, кг үшін тұрақты тариф, жүкті сақтандыру. 30 секундта есептеу.", keywords: "Қытайдан жүк тасымалы, Қытайдан Қазақстанға жеткізу, Қытайдан Ресейге жеткізу, карго Қытай, авто тасымал, теміржол тасымалы, әуе жеткізу, кедендік ресімдеу, Gold Orient Logistics", }, }, about: { ru: { path: "/about-us", title: "О компании — Gold Orient Logistics | Логистика из Китая в Алматы", description: "Gold Orient Logistics — логистическая компания из Алматы. Доставка грузов из Китая в Казахстан и Россию: миссия, команда, преимущества, география маршрутов и цифры в работе.", keywords: "о компании Gold Orient Logistics, логистическая компания Алматы, доставка грузов Казахстан, команда логистов, миссия компании, грузоперевозки из Китая", }, kz: { path: "/kz/about-us", title: "Компания туралы — Gold Orient Logistics | Алматыдағы логистика", description: "Gold Orient Logistics — Алматыдағы логистикалық компания. Қытайдан Қазақстан мен Ресейге жүк жеткізу: миссия, команда, артықшылықтар және маршруттар географиясы.", keywords: "Gold Orient Logistics компаниясы, Алматыдағы логистика, Қытайдан жеткізу, логистикалық команда, компания миссиясы", }, }, contacts: { ru: { path: "/contacts", title: "Контакты — Gold Orient Logistics | Телефон, WhatsApp, офис в Алматы", description: "Свяжитесь с Gold Orient Logistics: офис в Алматы, телефон +7 708 909 88 10, WhatsApp, email info@goldorient.kz. Бесплатный расчёт стоимости доставки из Китая за 30 секунд.", keywords: "Gold Orient Logistics контакты, телефон логистической компании, WhatsApp карго Китай, офис Алматы, info@goldorient.kz, расчёт доставки", }, kz: { path: "/kz/contacts", title: "Байланыс — Gold Orient Logistics | Телефон, WhatsApp, Алматы кеңсесі", description: "Gold Orient Logistics-пен байланысыңыз: Алматыдағы кеңсе, телефон +7 708 909 88 10, WhatsApp, info@goldorient.kz. Қытайдан жеткізу құнын тегін есептеу — 30 секундта.", keywords: "Gold Orient Logistics байланыс, логистикалық компания телефоны, WhatsApp карго Қытай, Алматы кеңсесі, info@goldorient.kz", }, }, }; // --- DOM helpers -------------------------------------------------------- function upsertMeta(attr, name, content) { if (!content) return; let el = document.head.querySelector(`meta[${attr}="${name}"]`); if (!el) { el = document.createElement("meta"); el.setAttribute(attr, name); document.head.appendChild(el); } el.setAttribute("content", content); } function upsertLink(rel, href, extraAttrs) { let selector = `link[rel="${rel}"]`; if (extraAttrs && extraAttrs.hreflang) { selector += `[hreflang="${extraAttrs.hreflang}"]`; } let el = document.head.querySelector(selector); if (!el) { el = document.createElement("link"); el.setAttribute("rel", rel); if (extraAttrs) { Object.keys(extraAttrs).forEach((k) => el.setAttribute(k, extraAttrs[k])); } document.head.appendChild(el); } el.setAttribute("href", href); } // --- Public API --------------------------------------------------------- function applySEO(route, lang) { const langKey = lang === "kz" ? "kz" : "ru"; const page = (SEO_META[route] && SEO_META[route][langKey]) || SEO_META.main[langKey]; const altLangKey = langKey === "ru" ? "kz" : "ru"; const altPage = (SEO_META[route] && SEO_META[route][altLangKey]) || SEO_META.main[altLangKey]; const url = SITE_URL + page.path; const altUrl = SITE_URL + altPage.path; // <html lang=""> document.documentElement.setAttribute("lang", langKey === "kz" ? "kk" : "ru"); // Title document.title = page.title; // Primary meta upsertMeta("name", "description", page.description); upsertMeta("name", "keywords", page.keywords); upsertMeta("name", "robots", "index, follow"); upsertMeta("name", "author", "Gold Orient Logistics"); // Canonical + hreflang alternates upsertLink("canonical", url); upsertLink("alternate", url, { hreflang: langKey === "kz" ? "kk" : "ru" }); upsertLink("alternate", altUrl, { hreflang: altLangKey === "kz" ? "kk" : "ru" }); upsertLink("alternate", SITE_URL + SEO_META[route].ru.path, { hreflang: "x-default" }); // Open Graph upsertMeta("property", "og:type", "website"); upsertMeta("property", "og:site_name", "Gold Orient Logistics"); upsertMeta("property", "og:locale", langKey === "kz" ? "kk_KZ" : "ru_RU"); upsertMeta("property", "og:locale:alternate", altLangKey === "kz" ? "kk_KZ" : "ru_RU"); upsertMeta("property", "og:url", url); upsertMeta("property", "og:title", page.title); upsertMeta("property", "og:description", page.description); upsertMeta("property", "og:image", OG_IMAGE); upsertMeta("property", "og:image:width", "1920"); upsertMeta("property", "og:image:height", "1080"); // Twitter upsertMeta("name", "twitter:card", "summary_large_image"); upsertMeta("name", "twitter:title", page.title); upsertMeta("name", "twitter:description", page.description); upsertMeta("name", "twitter:image", OG_IMAGE); } window.applySEO = applySEO; window.SEO_META = SEO_META; })();