Lighthouse — инструмент для аудита веб-страниц, который позволяет оценивать качество сайта по различным метрикам: производительность, доступность, SEO, лучшие практики и прогрессивные веб-приложения. Один из важных аспектов анализа — проверка валидности HTML и корректной структуры DOM, что напрямую влияет на доступность, индексирование и стабильность работы страницы.
Для использования Lighthouse в JavaScript можно работать через Node.js. Установка производится стандартным способом через npm:
npm install -g lighthouse
Либо добавляется как зависимость проекта:
npm install lighthouse --save-dev
После установки библиотека предоставляется как CLI и как модуль для программного использования в Node.js.
Для запуска аудита HTML необходимо импортировать модуль Lighthouse и использовать его API. Простейший пример выглядит следующим образом:
const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');
async function runLighthouse(url, opts = {}, config = null) {
const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
opts.port = chrome.port;
const results = await lighthouse(url, opts, config);
await chrome.kill();
return results.lhr;
}
runLighthouse('https://example.com').then(lhr => {
console.log(lhr.categories.accessibility);
});
Ключевой момент: Lighthouse запускает экземпляр Chrome в headless-режиме, что позволяет получать полные данные о рендеринге страницы и валидности DOM без необходимости открывать браузер вручную.
Lighthouse использует встроенные аудиты для проверки HTML. Среди них:
valid-html — проверяет корректность
тегов и атрибутов.aria-attributes — проверяет
правильность использования ARIA-атрибутов.semantic-html — проверяет, что
структура документа соответствует семантическим тегам.Каждый аудит возвращает объект с score,
details и списком
items, которые содержат ошибки и
предупреждения. Например:
{
"id": "valid-html",
"title": "HTML is valid",
"score": 0.9,
"details": {
"type": "table",
"items": [
{
"node": "<img src='image.png'>",
"message": "Image element missing alt attribute"
}
]
}
}
Lighthouse позволяет создавать собственные конфигурации аудита, чтобы фокусироваться только на валидации HTML. Пример конфигурационного файла:
module.exports = {
extends: 'lighthouse:default',
settings: {
onlyCategories: ['best-practices', 'accessibility']
},
audits: [
'valid-html',
'aria-attributes',
'semantic-html'
]
};
Использование собственной конфигурации упрощает интеграцию с системами CI/CD и позволяет получать отчёты только по нужным метрикам.
node (HTML-код), message
(описание ошибки) и часто selector, чтобы точно
локализовать проблему.Lighthouse может выводить результаты в нескольких форматах:
const fs = require('fs');
fs.writeFileSync('report.html', results.report[0]); // HTML
fs.writeFileSync('report.json', JSON.stringify(results, null, 2)); // JSON
HTML-отчёт удобен для визуальной диагностики, а JSON позволяет интегрировать данные в аналитические системы и автоматические тесты.
Для постоянной проверки валидности HTML рекомендуется:
Пример интеграции с npm-скриптом:
"scripts": {
"audit:html": "node lighthouse-audit.js"
}
Это позволяет автоматически генерировать отчёты при каждом деплое или коммите, что значительно повышает качество HTML-кода и предотвращает накопление ошибок.
items — конкретные
элементы с ошибками, чтобы исправления были точечными.Lighthouse в связке с Node.js предоставляет мощный инструмент для системного анализа HTML, позволяя поддерживать код в соответствии с современными стандартами веб-разработки, повышая доступность, производительность и совместимость страниц.