xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Кэш поисковиков + агрегация css = fail

Опубликовано в

При включённой агрегации, все стили объединяются в один большой css файл с уникальным именем. При изменении хоть одного файла и сбрасывании кэша, папка со стилями очищается и файл создаётся по новой, но уже с другим именем. Поэтому пользователи, просматривающие сайт из кэша гугла, стили которого были изменены, могут наблюдать такую картинку:

Попытка просмотреть сайт из кэша гугла

А системный журнал при этом будет пополняться сообщениями вида:

Системный журнал

Для решения проблемы, нужно в папке темы создать новый файл all.css, в котором подключить все стили используемые на страницах, примерно так:

@import url(/modules/node/node.css);
@import url(/modules/system/defaults.css);
@import url(/modules/system/system.css);
@import url(/modules/user/user.css);
@import url(/modules/taxonomy/taxonomy.css);
@import url(/sites/all/themes/themename/css/reset.css);
@import url(/sites/all/themes/themename/css/style.css);
@import url(/sites/default/files/geshifilter-languages.css);
@import url(/sites/all/modules/geshifilter/geshifilter.css);

И в .htaccess, перед

# Rewrite URLs of the form 'x' to the form 'index.php?q=x'.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

добавить:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^sites/default/files/css/css_[a-z0-9]{32}\.css$ sites/all/themes/themename/all.css [L]

Результат:

Сайт из кэша Google с подключённым файлом all.css

Написанное актуально для Drupal 6.x
Похожие записи

Комментарии RSS

Спасибо, Работает!
А по аналогии можно и с жаба-скриптами поступить?
P.S. У вас полезный для человечества ресурс :)

разумеется)

По какому принципу это работает?
Если нет сжатого файла css, то посетителю передается файл sites/all/themes/themename/css/all.css?

Тогда почему у вас имя сжатого файла одинаково на этой странице и в кеше?

У меня генерируются имена сжатых файлов все время разные (после чистки кеша) и поэтому этот метод не работает...

Если нет сжатого файла css, то посетителю передается файл sites/all/themes/themename/css/all.css?

да

Тогда почему у вас имя сжатого файла одинаково на этой странице и в кеше?

потому что после последнего посещения паука, css файлы небыли пересобраны

У меня генерируются имена сжатых файлов все время разные (после чистки кеша) и поэтому этот метод не работает...

этот метод как раз для этого и нужен, и он прекрасно работает

Спасибо, у меня оказывается редирект не работал.
Поставил конструкцию в начало файла и заработало.

Интересная тема, но метод не совсем правильный.
Если я не ошибаюсь, то при кэшировании ксс не просто собираются в один файл, но и из них убираются всякий мусор (лишние отступы, повторяющие стили, комменты).

включённый gzip эффективней любых оптимизаций файлов

Скажите, пожалуйста, по каким причинам может не работать редирект? Где хотя бы искать?

Уже по всякому эту конструкцию в htaccess ставил. И до, и после, и в начале, по всякому...
Не хочет на all.css редиректить и всё тут. Хотя, вроде всё просто и понятно..

редиректить и не должно. должно по адресу sites/default/files/css/css_[a-z0-9]{32}\.css открываться файл sites/all/themes/themename/css/all.css. может имя темы забыли прописать, или опечатались

Нет, опечатки точно нет, сто раз проверил. Да и суть того, что должно произойти я, в общем, понимаю. Просто глубины htaccess мне не подвластны. Мне кажется, у меня в htaccess что-то включено не то, а я не понимаю, что. У меня там редирект стоит с "без www" на "с www", ещё какие-то штуки. Вот я и думаю... Ну, видать, надобно разбираться всё-таки в этом htaccesse.

А за пост, спасибо, очень вовремя. Ну и вообще, сайт ваш чоткий.

откройте в браузере адрес example.com/sites/all/themes/themename/css/all.css и посмотрите результат

в статье была небольшая ошибка, файл предлагалось создать в папке темы, а в .htaccess был указан путь к вложенной папке css

example.com/sites/all/themes/themename/css/all.css - всё нормуль, видит файл. Насчёт ошибки в статье, это я понял и учёл. Суть-то данного метода мне ясна. Именно htaccess, зараза, не переключает. Или вот может на хостинге что-нибудь.. Хотя, опять же, другие редиректы работают. Да и правило ваше, простецкое вроде. Прочитал про него на htaccess.net.ru, никаких подвохов не вижу...

Сейчас временно css расклеил. Хочу всё же кэш увидеть, да и есть у меня подозрение, что на SEO-шные дела это влияет. Короче говоря, буду решать всё равно. Как решу - отпишусь.

Все. Недавно вышедший модуль http://drupal.org/project/advagg решил все проблемы. И с кэшем поисковиков и с оптимизацией / зжатием ксс, js.
Это новый грааль оптимизатора!))

А я обещал доковырять и доложить о результатах и забросил. А надо..

Кэш в поисковики вернулся после расклейки.

Поставил я AdvAgg. Вроде всё чётко. Жду реакции поисковиков.

скажите пожалуйста, влияет ли на позиции при выдаче в поисковике если кеш сайта в поиковике выглядит каряво, без стилей css я так понял,
и услышать отзывы о advagg очень было бы полезно(я так понял с его помошью можно решить эту проблему ничего не правя ни в каких кодах)
он нужен только при агрессивном кешировании или и при нормальном режиме?
всем спасибо

не влияет

Андрей (#comment-1805) большое спасибо!!!
Это решило проблему сжатия на мультисайтинге!

а как по мне пофигу что поисковики видят каждый раз разный css

хотя вот сам попал в эту статью потому что варнинги в админке красуются :)

имхо проще указать путь к родному /sites/all/themes/mytheme/style.css

нафиг там еще системные указывать и прочие др модулей

сделал тупо
#css файл, после очистки кеша
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^media/css/css_[a-z0-9]{32}\.css$ themes/my/style.css [L]

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании