:
#PROP_VALUE#
Длина, мм
:
506
Ширина, мм
:
454
Высота (мм)
:
588
Количество в упаковке
:
1
Толщина материала, мм
:
0,0
Назначение
:
Решения для дома
Вес, г
:
40000
Толщина, мм
:
0,0
Размер
:
506×454×588
(async () => {
// ============================================================
// КОНФИГ: группы URL, которые попадут в llms.txt
// ============================================================
const SITE = 'https://legkieresheniya.ru';
const GROUPS = {
'Главная': [
'/',
],
'Информация и сервис': [
'/info/docs/',
'/info/requisites/',
'/contacts/',
],
'Фасадные решения': [
'/catalog/fasadnye-resheniya/',
'/catalog/fasadnye-resheniya/metallokassety/',
'/catalog/fasadnye-resheniya/kronshteyny/',
'/catalog/fasadnye-resheniya/korziny-dlya-konditsionerov/',
'/catalog/fasadnye-resheniya/profil-g-z-p-obraznyy/',
],
'Кровельные решения': [
'/catalog/krovelnye-resheniya/',
'/catalog/krovelnye-resheniya/rondol-dozhimnaya/',
'/catalog/krovelnye-resheniya/profil-krovelnyy-faltsevyy/',
],
'Профнастил': [
'/catalog/profnastil/',
'/catalog/profnastil/nesushche-stenovoy-proflist-ns-seriya/',
'/catalog/profnastil/nesushchiy-proflist-n-seriya/',
'/catalog/profnastil/spetsializirovannyy-krovelnyy-proflist-sk-skn-serii/',
'/catalog/profnastil/stenovoy-proflist-s-seriya/',
],
'Строительный профиль ЛСТК': [
'/catalog/stroitelnyy-profil-lstk/',
'/catalog/stroitelnyy-profil-lstk/obreshetochnyy-profil-lstk/',
'/catalog/stroitelnyy-profil-lstk/shveller-p-i-s-obraznyy-gk/',
'/catalog/stroitelnyy-profil-lstk/shveller-p-i-s-obraznyy-otsinkovannyy/',
'/catalog/stroitelnyy-profil-lstk/profil-lstk/',
],
'Быстровозводимые здания': [
'/catalog/bystrovozvodimye-zdaniya/',
'/catalog/bystrovozvodimye-zdaniya/beskarkasnye-arochnye-konstruktsii/',
'/catalog/bystrovozvodimye-zdaniya/garazhi-dlya-tekhniki-lstk/',
'/catalog/bystrovozvodimye-zdaniya/beskarkasnye-zdaniya-exergia-dlya-skladov-i-proizvodstva/',
'/catalog/bystrovozvodimye-zdaniya/beskarkasnye-zdaniya-exergia-dlya-agropromyshlennogo-kompleksa-apk/',
'/catalog/bystrovozvodimye-zdaniya/beskarkasnye-zdaniya-exergia-dlya-sotsialno-znachimykh-i-sportivnykh-obektov/',
'/catalog/bystrovozvodimye-zdaniya/karkasy-domov-izhs-lstk/',
],
'Теплицы': [
'/catalog/teplitsy/',
'/catalog/teplitsy/teplitsy-udachnyy-urozhay/',
'/catalog/teplitsy/gryadki/',
],
'Заборы-жалюзи': [
'/catalog/zabory-zhalyuzi/',
'/catalog/zabory-zhalyuzi/zabor-zhalyuzi-tip-z-1/',
],
'Фермы для крыши': [
'/catalog/fermy-dlya-kryshi/',
'/catalog/fermy-dlya-kryshi/fermy-dlya-kryshi-do-12m/',
'/catalog/fermy-dlya-kryshi/komplekty-stropilnoy-sistemy-lstk-s-faltsevoy-krovley/',
],
'Металлопрокат': [
'/catalog/metalloprokat/',
'/catalog/metalloprokat/rulonnaya-stal-ral/',
'/catalog/metalloprokat/rulonnaya-stal-ots/',
'/catalog/metalloprokat/rulonnaya-stal-gk/',
'/catalog/metalloprokat/rulonnaya-stal-khk/',
'/catalog/metalloprokat/listovaya-stal-khk/',
'/catalog/metalloprokat/listovaya-stal-gk/',
],
};
// ============================================================
// ОСНОВНАЯ ЛОГИКА
// ============================================================
const sleep = ms => new Promise(r => setTimeout(r, ms));
function clean(text) {
return (text || '')
.replace(/\s+/g, ' ')
.replace(/[<>]/g, '')
.trim();
}
async function fetchMeta(path) {
const url = SITE + path;
try {
const res = await fetch(url, {
credentials: 'include',
headers: { 'Accept': 'text/html' },
});
if (!res.ok) return { url, error: `HTTP ${res.status}` };
const html = await res.text();
const doc = new DOMParser().parseFromString(html, 'text/html');
const title = clean(doc.querySelector('title')?.textContent);
const h1 = clean(doc.querySelector('h1')?.textContent);
const desc = clean(
doc.querySelector('meta[name="description"]')?.getAttribute('content') ||
doc.querySelector('meta[property="og:description"]')?.getAttribute('content')
);
return {
url,
name: h1 || title || path,
desc: desc || title || '',
};
} catch (e) {
return { url, error: e.message };
}
}
// Собираем все URL
const allPaths = Object.values(GROUPS).flat();
console.log(`📥 Найдено ${allPaths.length} страниц. Начинаю сбор...`);
const results = {};
let done = 0;
for (const path of allPaths) {
const r = await fetchMeta(path);
results[path] = r;
done++;
const status = r.error ? `❌ ${r.error}` : `✓ ${r.name.slice(0, 60)}`;
console.log(`[${done}/${allPaths.length}] ${path} — ${status}`);
await sleep(500);
}
// Формируем llms.txt
const lines = [];
lines.push('# Лёгкие решения — металлоизделия');
lines.push('');
lines.push('> Производство и поставка металлоизделий из ЛСТК: фасадные и кровельные решения, профнастил, быстровозводимые здания, теплицы, заборы-жалюзи, металлопрокат. Работаем с частными застройщиками, строительными компаниями и АПК.');
lines.push('');
for (const [groupName, paths] of Object.entries(GROUPS)) {
lines.push(`## ${groupName}`);
lines.push('');
for (const path of paths) {
const r = results[path];
if (r.error) {
lines.push(`- [${path}](${r.url}): _ошибка загрузки — ${r.error}_`);
} else {
lines.push(`- [${r.name}](${r.url}): ${r.desc}`);
}
}
lines.push('');
}
const content = lines.join('\n');
// Скачиваем файл
const blob = new Blob([content], { type: 'text/plain;charset=utf-8' });
const a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'llms.txt';
document.body.appendChild(a);
a.click();
a.remove();
console.log('✅ Готово! Файл llms.txt скачан.');
console.log('📄 Предпросмотр:\n');
console.log(content);
})();
