Почему стандартные плагины jekyll далеки от идеала
В этой заметке я не буду приводить полный код для всех компонентов, только дам сниппеты и подсказки, на что стоит обратить внимание при сборке сайта на jekyll.
Время модификации файла
Каждая страница имеет как минимум три точки отображения временной отметки в разных файлах, элементах страницы или ответе сервера, и все они должны быть одинаковыми.
- ld+json
"dateModified": "2025-03-07T15:43:42+00:00" - sitemap
<lastmod>2025-03-07T15:43:42+00:00</lastmod> - headres
last-modified: Fri, 07 Mar 2025 15:43:42 GMT
Начнём с sitemap.xml, в стандартном jekyll-sitemap, для страниц page, которые на этом сайте используются для вывода collections, время изменения берётся из времени изменения файла.
То есть, для страницы https://webart4.me/en/linux/blog/
будет установлено время изменения файла /categories/en/blog.md:
{{ page.last_modified_at | date_to_xmlschema }}, а это не совсем правильно.
Потому что, при модификации, а главное при добавлении новой публикации в этой категории (коллекции), время изменения
Поэтому, выбираем все публикации для данной локали, потом те, которые относятся к этой категории, сортируем по дате, выбираем самую новую.
1 2 3 4 5 6 | |
Соответственно, для генерации Structured Data будет такая же логика.
Ответ сервера Last-Modified
Тут уже интересней.
При пересборке сайта jekyll build --destination файлы будут обновлены. Даже если использовать --incremental, всё равно не получится перенести корректные атрибуты файлов, учитывая, что для некоторых файлов они должны иметь генерированные значения.
Для этого используем изящный и простой скрипт, который должен запускаться после каждого деплоя на сервере.
nano touch_files.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | |
Скрипт парсит sitemap.xml, и для всех файлов из <loc> устанавливает <lastmod>.