Статичні файли кешуються ненадовго або не кешуються взагалі

У звітіStatic assets without long-lived caching

static_asset_short_cache_ttl · Потребує перегляду

Коротка відповідь

Це з’являється, коли скрипт, таблиця стилів, зображення чи шрифт надсилається без часу життя в кеші — no-store, no-cache, max-age=0 або взагалі без політики — чи коли версіонований файл, тобто такий, назва чи адреса якого містить версію, кешується за замовчуванням менш ніж на 30 днів. Тоді відвідувачі, що повертаються, завантажують або повторно перевіряють файли, які не змінилися. Дайте версіонованим файлам довгий час життя, а кожному файлу — хоч якийсь.

Серйозність: До уваги. На перегляд: це стосується повторних відвідувань, а деякі файли можуть належати іншим компаніям.

Чому це важливо

Файл може повторно використовуватися з кешу браузера, поки збережена відповідь залишається свіжою, що дає змогу уникнути повторного завантаження. Lighthouse давно перевіряє час життя в кеші; починаючи з Lighthouse 13, це частина його use-cache-insight, що замінив аудит uses-long-cache-ttl.

Що зробити

  1. Перегляньте знахідку: у ній показано файл, його Cache-Control чи Expires, час життя, який ми вирахували, і сторінки, що його використовують.
  2. Для файлів, назва чи адреса яких змінюється з кожною версією, надсилайте довгий час життя, як-от Cache-Control: max-age=31536000, тобто рік.
  3. Для інших файлів надсилайте хоч якийсь час життя або додайте версію до їхньої адреси, щоб довгий був безпечним; файли інших компаній можуть змінити лише вони.

Коли залишити як є: якщо файл належить іншій компанії або має бути свіжим за кожного запиту, можна залишити як є.

Що ми читаємо

Ми читаємо збережені відповіді скриптів, таблиць стилів, зображень і шрифтів, на які посилаються перевірені сторінки, та визначаємо оголошений час життя з Cache-Control, а за його відсутності — з Expires. Збирання ресурсів підпорядковується записаній для запуску політиці й захисним межам; файл без достатніх збережених доказів залишається неперевіреним. no-store, сам no-cache, нульовий час життя і відсутність політики вважаються відсутністю; недійсний max-age залишається без оцінки, тоді як недійсна дата Expires вважається нулем; s-maxage ігнорується.

Файл фіксується, коли він не має часу життя або коли він версіонований і його час життя менший за налаштування — за замовчуванням 30 днів, — яке записується з кожним аудитом. Файл вважається версіонованим, коли його назва має шістнадцятковий токен із 8–64 символів, як-от app.3f9a2c1b.js, або його адреса має параметр v, ver, version, rev чи hash. Файли з інших сайтів теж охоплено.

Файл не оцінюється, коли його тип чи політика неясні, наприклад Cache-Control: public без часу життя, а сторінка позначається як неперевірена, коли її HTML не вдалося прочитати повністю, наприклад тому, що він містить непідтримувану розмітку SVG, <select> чи <math>, або оголошеного нею файлу не було серед завантажених.

Приклад і докази

Ілюстративний приклад — заголовок кешування одного файлу, а не реальний аудит.

https://bakery.example/css/site.3f9a2c1b.css, що використовується на 42 сторінках, надіслано з:

Cache-Control: max-age=3600

Назва містить версію, а одна година коротша за 30 днів, тому файл фіксується разом зі сторінками, що його використовують.

Cache-Control: max-age=31536000, immutable

Можливе виправлення: рік, бо нова версія отримує нову назву.

Підтвердити й перевірити знову

Перевірте самі: відкрийте інструменти розробника вашого браузера на вкладці Network, клацніть файл і прочитайте його заголовок Cache-Control.

Повторна перевірка: Повний аудит — Запустіть новий аудит сайту. Підтвердження виправлення потребує достатніх поточних доказів для того самого файлу та сторінок, що на нього посилаються, і часу життя в кеші, який більше не відповідає умові знахідки. Зниження записаного мінімуму може прибрати знахідку про короткий час життя версіонованого файлу, але не усуває нульового чи відсутнього часу життя. Відсутні або неповні докази не підтверджують виправлення.

Обмеження та джерела

Це одна відповідь на файл нашому сканеру, і враховується лише оголошений час життя, а не Age, immutable, копії в CDN чи service worker. Версіонування розпізнається за шістнадцятковим токеном у назві файлу або за підтримуваним параметром запиту v, ver, version, rev чи hash; інші схеми версій не розпізнаються. Повторні відвідування не вимірюються.

Упевненість: Висока, бо час життя вираховується безпосередньо із заголовків файлу.

Джерела

Редакційна перевірка: 1 листопада 2026