Загрузка...
Загрузка...
Нашли баг, сбой или ошибку в работе reChecker? Есть предложение по улучшению? Напишите нам, чтобы мы проверили и исправили проблему в сервисе.
Практическое руководство по оптимизации SVG: удаление метаданных, упрощение путей, минификация. Инструменты и приёмы для веб-разработчиков.
Быстрые определения и связанные понятия из SEO-глоссария reChecker.
Минификация (minification) — удаление лишних символов из CSS, JS и HTML без изменения функциональности. Уменьшает размер файлов на 20-60%.
Читать в глоссарии →CSP — HTTP-заголовок безопасности, запрещающий выполнение посторонних скриптов и загрузку ресурсов с чужих сайтов. Защищает от XSS-атак.
Читать в глоссарии →WebP — современный формат изображений от Google. На 25-35% меньше JPEG при том же качестве. Поддерживается всеми современными браузерами.
Читать в глоссарии →Адаптивный дизайн (Responsive Design) — подход к веб-разработке, при котором сайт корректно отображается на всех устройствах: мобильных, планшетах, десктопах.
Читать в глоссарии →Выберите цвет онлайн и получите код в HEX, RGB, HSL. Разница форматов, контрастность WCAG, создание палитр.
CSS & ДизайнРуководство по CSS спрайтам: объединение иконок в один файл, настройка background-position, SVG спрайты и современные альтернативы.
УтилитыСравнение форматов PNG, JPG, WebP, AVIF. Когда конвертировать, как влияет качество на размер файла. Конвертер изображений онлайн.
УтилитыКак обрезать изображение онлайн, какое соотношение сторон выбрать для соцсетей, YouTube, Instagram. Обрезка без потери качества.
Поделитесь с коллегами или изучите другие материалы блога
SVG — векторный формат, который масштабируется без потери качества. Но файлы, экспортируемые из Figma, Illustrator или других редакторов, часто содержат избыточные данные. Оптимизация может сократить размер на 30–80% без визуальных изменений. В этой статье разберём основные приёмы и инструменты.
Для кодирования SVG в base64 и Data URI используйте SVG Encoder на reChecker. Для объединения иконок в спрайт — CSS Sprite на reChecker.
Редакторы добавляют служебную информацию:
<!-- До оптимизации -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Adobe Illustrator 24.0 -->
<metadata>...</metadata>
<path d="..."/>
</svg>
Удалите metadata, comments, title (если не нужен для доступности), desc (если не используется).
Элементы с display="none", opacity="0", visibility="hidden" — кандидаты на удаление, если они не участвуют в анимации.
Координаты с 5–6 знаками после запятой избыточны для экранного отображения. Округление до 2–3 знаков уменьшает размер:
<!-- До: -->
<path d="M 10.123456789 20.987654321 L 30.111111 40.222222"/>
<!-- После: -->
<path d="M 10.12 20.99 L 30.11 40.22"/>
Многие атрибуты имеют значения по умолчанию. fill="black" можно опустить, если нужен чёрный. stroke="none" — дефолт для элементов без обводки.
Несколько path с одинаковыми заливками можно объединить в один:
<!-- До -->
<path fill="#333" d="M0 0 L10 0 L10 10 Z"/>
<path fill="#333" d="M20 0 L30 0 L30 10 Z"/>
<!-- После -->
<path fill="#333" d="M0 0 L10 0 L10 10 Z M20 0 L30 0 L30 10 Z"/>
Команда M (moveto) без заливки промежутка позволяет «перепрыгивать» между контурами.
Повторяющиеся элементы выносите в <defs> и ссылайтесь через <use>:
<defs>
<path id="icon" d="M0 0 L10 10 L0 10 Z"/>
</defs>
<use href="#icon" x="0" y="0"/>
<use href="#icon" x="20" y="0"/>
Сложные кривые Безье можно упростить, уменьшив количество опорных точек. Инструменты вроде SVGO делают это автоматически с настраиваемой точностью.
| Подход | Плюсы | Минусы |
|---|---|---|
| Inline | Нет запроса, можно стилизовать CSS | Увеличивает HTML, не кэшируется отдельно |
| Внешний файл | Кэширование, переиспользование | Дополнительный запрос |
| Спрайт | Один запрос на много иконок | Сложнее поддерживать вручную |
Для 1–3 иконок на странице inline допустим. Для десятков иконок — спрайт. Генерация спрайтов: CSS Sprite на reChecker.
Встраивание SVG в CSS через Data URI избавляет от отдельного запроса:
.icon {
background: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0...') center/contain no-repeat;
}
Минусы: увеличение размера CSS на ~33% из-за base64, сложнее отлаживать. Плюсы: один HTTP-запрос, возможность инлайна в критический CSS.
SVG Encoder на reChecker конвертирует SVG в base64 и Data URI с настройкой сжатия.
Популярный оптимизатор. Установка и базовый запуск:
npm install -g svgo
svgo icon.svg -o icon.optimized.svg
Плагины отключают/включают конкретные преобразования. Конфиг svgo.config.js:
module.exports = {
plugins: [
'removeDoctype',
'removeComments',
'removeMetadata',
'removeEditorsNSData',
'cleanupIds',
'convertColors',
{ name: 'removeViewBox', active: false }, // сохранить viewBox
],
};
Веб-интерфейс для SVGO с визуальным сравнением до/после. Удобно для разовой оптимизации без установки инструментов.
style="..." на атрибуты (fill, stroke) где возможноfill вместо fill-rule в простых случаях| Действие | Экономия |
|---|---|
| Удаление metadata, comments | 5–15% |
| Округление координат | 10–20% |
| Удаление дефолтных атрибутов | 5–10% |
| Объединение путей | 10–30% |
| Упрощение path (SVGO) | 20–50% |
| Минификация пробелов | 5–15% |
Суммарно реально достичь 30–80% уменьшения в зависимости от исходного файла.
При встраивании пользовательского SVG в HTML проверяйте содержимое. SVG может содержать <script>, onload, javascript: в атрибутах. Санитизируйте или используйте CSP для блокировки inline-скриптов.
<use>Интеграция SVG Encoder и CSS Sprite в рабочий процесс ускоряет подготовку SVG для продакшена.
Сохраняйте viewBox при оптимизации — он определяет систему координат и позволяет масштабировать SVG без искажений. Атрибуты width и height можно удалить, если размер задаётся через CSS. Для инлайновых SVG часто оставляют только viewBox:
<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<path d="..."/>
</svg>
Повторяющиеся элементы (иконки в наборе) выносите в общий спрайт. Формат symbol sprite позволяет подключать иконки по ID:
<svg style="display:none">
<symbol id="icon-close" viewBox="0 0 24 24">
<path d="M18 6L6 18M6 6l12 12"/>
</symbol>
</svg>
<svg class="icon"><use href="#icon-close"/></svg>
Один запрос, переиспользование, возможность стилизации через CSS. Генерация таких спрайтов — задача CSS Sprite на reChecker.
После применения SVGO или ручной оптимизации обязательно проверьте:
Визуальные отличия могут проявиться при агрессивных настройках округления координат. Увеличьте точность в конфиге SVGO при необходимости.