Найден корректный robots.txt
Файл управления сканированием сайта роботами
?
Robots.txt указывает поисковым роботам, какие страницы сканировать, а какие — нет. Ошибки в файле могут случайно закрыть важные разделы от индексации.
Robots.txt настроен корректно. Размер файла: 11027 байт. Загружен за: 79мсек.
Проверяемая страница не запрещена в robots.txt.
Цепочка редиректов для файла robots.txt:
http://croopa.ru/robots.txt
308 PermanentRedirect
https://croopa.ru/robots.txt
200 OK
Показать содержимое robots.txt
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<!-- Yandex.Metrika counter (only when VITE_YANDEX_METRIKA_ENABLED=true) -->
<script type="text/javascript">
window.__YANDEX_METRIKA_ENABLED__ = "true" === "true";
if (window.__YANDEX_METRIKA_ENABLED__) {
(function(m, e, t, r, i, k, a) {
m[i] =
m[i] ||
function() {
(m[i].a = m[i].a || []).push(arguments);
};
m[i].l = 1 * new Date();
for (var j = 0; j < document.scripts.length; j++) {
if (document.scripts[j].src === r) {
return;
}
}
(k = e.createElement(t)),
(a = e.getElementsByTagName(t)[0]),
(k.async = 1),
(k.src = r),
a.parentNode.insertBefore(k, a);
})(
window,
document,
"script",
"https://mc.yandex.ru/metrika/tag.js?id=105894391",
"ym"
);
ym(105894391, "init", {
ssr: true,
webvisor: true,
clickmap: true,
ecommerce: "dataLayer",
accurateTrackBounce: true,
trackLinks: true,
});
}
</script> <!-- /Yandex.Metrika counter -->
<link rel="icon" type="image/svg+xml" href="/assets/images/smLogo.svg">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
<link href="https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, interactive-widget=resizes-content, viewport-fit=cover">
<meta name="theme-color" content="#C62A01">
<meta name="apple-mobile-web-app-status-bar-style" content="default">
<meta name="apple-mobile-web-app-title" content="Croopa">
<link rel="apple-touch-icon" href="/pwa/logo_180.png">
<title>Croopa - планировщик питания</title>
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-2048-2732.png" media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1668-2388.png" media="(device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1536-2048.png" media="(device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1488-2266.png" media="(device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1640-2360.png" media="(device-width: 820px) and (device-height: 1180px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1668-2224.png" media="(device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1620-2160.png" media="(device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1320-2868.png" media="(device-width: 440px) and (device-height: 956px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1206-2622.png" media="(device-width: 402px) and (device-height: 874px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1290-2796.png" media="(device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1179-2556.png" media="(device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1284-2778.png" media="(device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1170-2532.png" media="(device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1125-2436.png" media="(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1242-2688.png" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-828-1792.png" media="(device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-1242-2208.png" media="(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-750-1334.png" media="(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<link rel="apple-touch-startup-image" href="/pwa/splash/apple-splash-640-1136.png" media="(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
<script type="module" crossorigin src="/assets/index-BmdN7NID.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-aL7yeCGY.css">
<link rel="manifest" href="/manifest.webmanifest"></head>
<body>
<div id="root"></div>
<script>
(function() {
// Фабрика: создает трекер для конкретного счетчика
function createMetricsTracker(counterId, options = {}) {
const defaultOptions = {
storagePrefix: "ym_goal_",
storageType: "localStorage",
expireDays: null, // срок хранения в днях (null = бессрочно)
};
const config = {
...defaultOptions,
...options
};
// Получаем хранилище в зависимости от типа
function getStorage() {
return config.storageType === "sessionStorage" ?
sessionStorage :
localStorage;
}
// Утилита для однократного вызова
function once(goalName, callback) {
const storage = getStorage();
const storageKey = config.storagePrefix + goalName;
const stored = storage.getItem(storageKey);
if (stored) {
// Если есть срок годности, проверяем его
if (config.expireDays) {
const data = JSON.parse(stored);
const now = new Date().getTime();
if (now > data.expire) {
storage.removeItem(storageKey);
} else {
return;
}
} else {
return;
}
}
// Вызываем callback
callback();
// Сохраняем факт отправки
let value = "1";
if (config.expireDays) {
const expireTime =
new Date().getTime() + config.expireDays * 24 * 60 * 60 * 1000;
value = JSON.stringify({
sent: true,
expire: expireTime,
});
}
storage.setItem(storageKey, value);
}
// Трекинг клика по CSS-классу
function trackClick(selector, goalName) {
document.addEventListener("click", function(e) {
const btn = e.target.closest(selector);
if (!btn) return;
once(goalName, () => {
if (typeof ym !== "undefined") {
ym(counterId, "reachGoal", goalName);
}
});
});
}
// Упрощенный вызов: класс === цель
function trackGoal(goalName) {
trackClick(`.${goalName}`, goalName);
}
// Сброс всех сохраненных целей
function resetGoals() {
const storage = getStorage();
const keys = Object.keys(storage);
keys.forEach((key) => {
if (key.startsWith(config.storagePrefix)) {
storage.removeItem(key);
}
});
}
// Проверка, была ли цель отправлена
function isGoalSent(goalName) {
const storage = getStorage();
const storageKey = config.storagePrefix + goalName;
return !!storage.getItem(storageKey);
}
return {
trackClick,
trackGoal,
resetGoals,
isGoalSent
};
}
// ============================================
// ИСПОЛЬЗОВАНИЕ
// ============================================
const COUNTER_ID = 105894391;
// Вариант 1: Хранение навсегда (по умолчанию)
// const metrics = createMetricsTracker(COUNTER_ID);
// Вариант 2: Хранение только на сессию
// const metrics = createMetricsTracker(COUNTER_ID, { storageType: 'sessionStorage' });
// Вариант 3: Хранение 30 дней
const metrics = createMetricsTracker(COUNTER_ID, {
expireDays: 30,
});
// Инициализация (только при включённой Метрике)
function initMetrics() {
if (!window.__YANDEX_METRIKA_ENABLED__) {
return;
}
metrics.trackGoal("auth_sms");
metrics.trackGoal("auth_vk");
metrics.trackGoal("auth_ya");
metrics.trackGoal("profile_skip");
metrics.trackGoal("profile_continue");
metrics.trackGoal("payment_success");
metrics.trackGoal("auth_all");
metrics.trackGoal("profile_step");
}
// Автозапуск
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initMetrics);
} else {
initMetrics();
}
})();
</script>
</body>
</html>