Responsywne obrazy (srcset)
Jak serwować responsywne obrazy za pomocą atrybutów srcset i sizes oraz elementu picture, kiedy używać każdego z nich i jak responsywne obrazy naprawiają LCP i CLS, nie będąc bezpośrednim sygnałem rankingowym.
Responsywne obrazy pozwalają przeglądarce (przez srcset + sizes) lub autorowi (przez <picture>) serwować obraz o odpowiednim rozmiarze dla danego urządzenia. srcset/sizes to przełączanie rozdzielczości (ten sam obraz, wybiera przeglądarka — sugestia); <picture> to kierowanie artystyczne lub zmiana formatu (kadry/formaty narzucone przez autora — polecenie). Większość witryn potrzebuje tylko srcset/sizes. To nie jest bezpośredni sygnał rankingowy i nie zmienia tego, co indeksuje Google — Google indeksuje URL src — ale to konkretna poprawka zalecana przez Lighthouse dla zbyt dużych obrazów (jego audyt „Properly size images” kończy się niepowodzeniem przy różnicy 4KiB) i w połączeniu z jawnymi atrybutami width/height zapobiega CLS. Zachowaj identyczny tekst alternatywny i stabilne URL-e obrazów w różnych punktach przerwania dla indeksowania mobile-first. Używam dokładnie tego samego wzorca srcset + width/height co w moim artykule o CLS na Ahrefs. Artykuł jest zagnieżdżony w hubie Image SEO.
Dowód potwierdzający to twierdzenie The HTML responsive-image features srcset, sizes, and picture let browsers select an appropriate image candidate. Zakres: Current HTML responsive image behavior. Poziom ufności: wysoki · Zweryfikowano: WHATWG HTML: Responsive images Dowód potwierdzający to twierdzenie Google can process responsive images and recommends src as a fallback while using srcset or picture for responsive delivery. Zakres: Current Google Images responsive-image guidance. Poziom ufności: wysoki · Zweryfikowano: Google Search Central: Responsive imagesTL;DR — Obrazy responsywne pozwalają przeglądarce wczytać wersję dopasowaną rozmiarem zamiast jednego ogromnego pliku — małą na telefonie i dużą na komputerze. Służą do tego atrybuty
srcsetisizesw tagu<img>: podajesz dostępne rozmiary, a przeglądarka wybiera wariant. Nie podnosi to pozycji bezpośrednio, ale przyspiesza strony i zapobiega przeskokom układu podczas ładowania obrazów, a szybkość jest jednym z elementów mierzonych przez Google.
Czym są obrazy responsywne
Obraz „responsywny” dostosowuje się do urządzenia, na którym jest wyświetlany. Zamiast wysyłać to samo ogromne zdjęcie na telefon i komputer, dajesz przeglądarce kilka wersji o różnych rozmiarach i pozwalasz jej pobrać tę, która pasuje. Telefony otrzymują mały plik; duże ekrany — duży. Mniej marnowanych danych, szybsze strony.
Są dwa sposoby, aby to zrobić, i warto wiedzieć, który jest który:
srcset+sizesna<img>— najczęstszy. Ten sam obraz, różne rozmiary. Wypisujesz, co masz, a przeglądarka wybiera. Nazywa się to przełączaniem rozdzielczości.- Element
<picture>— gdy chcesz mieć naprawdę inny obraz przy różnych rozmiarach (na przykład szerokie przycięcie na komputerze i wysokie, ciasne na telefonie) lub nowoczesny format pliku z zapasowym. Nazywa się to art direction i większość witryn tego nie potrzebuje.
Podstawowa wersja
Oto jak wygląda przełączanie rozdzielczości:
<img
src="puppy-1000.jpg"
srcset="puppy-1000.jpg 1000w, puppy-2000.jpg 2000w, puppy-3000.jpg 3000w"
sizes="(max-width: 600px) 480px, 1000px"
width="1000" height="1000"
alt="Puppy with balloons" />srcto Twój normalny, zawsze obecny zapas. Zachowaj go.srcsetwypisuje wersje, które masz, i jak szeroka jest każda (1000w= 1000 pikseli szerokości).sizesinformuje przeglądarkę, jak duży obraz będzie faktycznie wyświetlany, aby mogła wybrać właściwy plik zanim cokolwiek załaduje.widthiheightrezerwują miejsce, aby strona nie skakała podczas ładowania obrazu.altto ten sam opis, który zawsze piszesz. Zachowaj go identyczny w każdej wersji.
Po co to robić (szczera odpowiedź)
Obrazy responsywne nie dają Ci „wzmocnienia” pozycji. Robią to, że strony ładują się
szybciej i zapobiegają przesuwaniu układu — a to są rzeczy, które Google mierzy jako
część doświadczenia strony. Jeśli narzędzie do szybkości (Lighthouse, PageSpeed Insights) namawia
Cię do „właściwego rozmiaru obrazów”, srcset/sizes to poprawka, o którą prosi.
Jeszcze jedna rzecz: to nie zmienia tego, co pojawia się w Google Images. Google indeksuje
obraz w Twoim atrybucie src — warianty responsywne to tylko dostarczanie. Więc
zachowaj tekst alt, nazwę pliku i główny URL obrazu takie same, niezależnie od tego, którą
wersję załaduje przeglądarka.
Chcesz dokładną wersję — deskryptory w vs x, kiedy naprawdę potrzebujesz
<picture>, mechanikę LCP i przesuwania układu oraz zasady indeksowania mobilnego —
przełącz na zakładkę Zaawansowane.
Dowód potwierdzający to twierdzenie The HTML responsive-image features srcset, sizes, and picture let browsers select an appropriate image candidate. Zakres: Current HTML responsive image behavior. Poziom ufności: wysoki · Zweryfikowano: WHATWG HTML: Responsive images Dowód potwierdzający to twierdzenie Google can process responsive images and recommends src as a fallback while using srcset or picture for responsive delivery. Zakres: Current Google Images responsive-image guidance. Poziom ufności: wysoki · Zweryfikowano: Google Search Central: Responsive imagesTL;DR — Dwa zadania, jedna rodzina składni.
srcset/sizesna<img>= przełączanie rozdzielczości (ten sam obraz, przeglądarka wybiera najlepsze dopasowanie — sugestia);<picture>= art direction lub przełączanie formatu (przycięcia/formaty narzucone przez autora — polecenie). Większość witryn potrzebuje tylko pierwszego. Obrazy responsywne nie są bezpośrednim sygnałem rankingowym i nie zmieniają tego, co Google indeksuje — Google indeksuje URLsrc, więc zachowaj tekstalt, nazwy plików i URL obrazów stabilne między punktami przerwania (indeksowanie mobile-first). Prawdziwa korzyść to Core Web Vitals: właściwe rozmiary obrazów to poprawka stojąca za audytem Lighthouse „Properly size images” (nieudany przy luce 4KiB), awidth/height(lubaspect-ratio) — niesrcset— to zapobiega CLS. Nie ładuj leniwie obrazu LCP. Używam dokładnie tego samego wzorcasrcset+width/heightz mojego artykułu o CLS w Ahrefs.
Dwa różne zadania, jedna rodzina składni
Wszystko w tym temacie sprowadza się do dwóch mechanizmów, a połowa zamieszania wynika z ich mieszania:
- Zmiana rozdzielczości — ten sam obraz w różnych rozmiarach lub gęstościach pikseli.
Dajesz przeglądarce menu z
srcsetisizesna<img>, a przeglądarka decyduje, który plik pobrać na podstawie viewportu i gęstości ekranu. To typowy przypadek. - Art direction — zupełnie inny obraz dla każdego warunku: szerokie przycięcie na
desktopie, wąskie pionowe przycięcie na mobile, lub całkowicie inny format pliku. Tutaj
ty decydujesz o wyborze za pomocą elementu
<picture>.
Kurs web.dev Learn: Responsive images
ujmuje tę różnicę dokładnie tak: z srcset przeglądarka otrzymuje
sugestie, natomiast “element picture wydaje polecenia.”
A zdanie wyznaczające zakres, które warto powiesić na ścianie, również z web.dev: “You
probably won’t need to use the picture element for most of your responsive images —
the srcset and sizes attributes on the img element cover a lot of use cases.”
(tłumaczenie) „Prawdopodobnie nie będziesz musiał używać elementu picture dla większości responsywnych obrazów — atrybuty srcset i sizes na elemencie img pokrywają wiele przypadków użycia.”
Sięgaj po <picture> tylko wtedy, gdy faktycznie potrzebujesz innego obrazu, a nie innego
rozmiaru tego samego.
srcset i sizes — zmiana rozdzielczości
Deskryptory w vs. deskryptory x
srcset przyjmuje listę kandydatów oddzielonych przecinkami, każdy oznaczony
deskryptorem. Są dwa rodzaje:
- Deskryptory szerokości (
w) — podajesz wewnętrzną szerokość pikselową każdego pliku (puppy-2000.jpg 2000w). Przeglądarka łączy to z wartościąsizes, aby ustalić, który plik najlepiej pasuje do przestrzeni oraz gęstości pikseli urządzenia. To elastyczna opcja, której będziesz używać najczęściej. - Deskryptory gęstości pikseli (
x) — podajesz, który plik jest dla jakiego współczynnika pikseli urządzenia (logo.png 1x, logo@2x.png 2x). Użyj ich dla obrazów o stałym rozmiarze (awatar, logo), gdzie wyświetlany rozmiar się nie zmienia; nie potrzebujeszsizesz deskryptoramix.
Zasada kciuka: płynne obrazy o szerokości treści → deskryptory w + sizes; obrazy UI o stałym rozmiarze → deskryptory x.
Dlaczego sizes ma znaczenie (i co się stanie, jeśli je pominiesz)
Z deskryptorami w, sizes nie jest opcjonalną ozdobą — to sposób, w jaki przeglądarka
wie, jak duży obraz zostanie wyrenderowany, aby mogła wybrać przed układem. Według
web.dev, sizes “tells the browser what size you expect the image to be displayed at under different conditions,” (tłumaczenie) „informuje przeglądarkę, w jakim rozmiarze obraz ma być wyświetlany w różnych warunkach”, jako
lista warunków medialnych i szerokości oddzielona przecinkami:
sizes="(max-width: 600px) 480px, 1000px"Czytaj to jako: “jeśli viewport ma 600px lub mniej, obraz będzie miał około 480px
szerokości; w przeciwnym razie około 1000px.” Pomiń sizes, a przeglądarka założy, że obraz wypełnia
pełną szerokość viewportu (100vw) — więc na szerokim ekranie może pobrać największy plik
dla obrazu, który faktycznie renderuje się na 400px, cicho niwecząc cały sens.
Brak sizes to najczęstszy błąd srcset.
Nie zgaduj tych wartości szerokości z układu w głowie — sprawdź rzeczywistą
wyrenderowaną szerokość CSS obrazu w przeglądarce (DevTools → Elements → obliczona
szerokość ramki <img>) na każdym breakpoincie, który Cię interesuje, i ustaw sizes
tak, aby pasowały. Wartość sizes, która nie pasuje do rzeczywistej wyrenderowanej szerokości, nadal powoduje,
że przeglądarka wybiera niewłaściwego kandydata, nawet jeśli znaczniki są składniowo
poprawne — sama walidacja składni tego nie wykryje; zobacz sprawdzenie currentSrc
poniżej, aby potwierdzić, co faktycznie zostało załadowane.
Przykład z praktyki (mój powtarzalny wzorzec)
To dokładny wzorzec z mojego artykułu na Ahrefs,
What Is Cumulative Layout Shift (CLS) & How To Improve It,
rozszerzony o sizes:
<img
src="puppy-1000.jpg"
srcset="puppy-1000.jpg 1000w,
puppy-2000.jpg 2000w,
puppy-3000.jpg 3000w"
sizes="(max-width: 600px) 480px, 1000px"
width="1000" height="1000"
alt="Puppy with balloons" />Każdy element jest istotny: src to wersja zapasowa i adres URL indeksowany przez Google;
srcset zawiera listę kandydatów z deskryptorami w; sizes informuje przeglądarkę o
wyrenderowanej szerokości; width/height rezerwują miejsce (poprawka CLS — więcej poniżej); alt pozostaje
identyczny niezależnie od tego, który plik się wczytuje.
Element picture — kierowanie artystyczne i przełączanie formatów
Kiedy naprawdę go potrzebujesz
Użyj <picture> do dwóch rzeczy, których srcset nie potrafi:
- Kierowanie artystyczne — inny kadr dla każdego punktu granicznego. Przykład z web.dev: na wąskim telefonie możesz serwować wysoki, ciasny kadr; na szerokim monitorze — krótki, szeroki. Ten sam temat, celowo inne kadrowanie.
- Przełączanie formatów — zaoferuj AVIF/WebP z zapasowym JPEG przez
<source type="…">, pozwalając przeglądarce wybrać pierwszy obsługiwany format. To bezpośrednio wiąże się z wytycznymi dotyczącymi formatów w centrum SEO obrazów.
Składnia (i zasada wersji zapasowej)
Element <picture> zawiera jeden lub więcej elementów <source> i zawsze kończy się
zwykłym <img>:
<!-- Art direction: different crop per breakpoint -->
<picture>
<source media="(max-width: 600px)" srcset="hero-crop-mobile.jpg">
<img src="hero-crop-desktop.jpg" width="1200" height="675"
alt="Product hero shot">
</picture>
<!-- Format switching: modern format with a fallback -->
<picture>
<source type="image/avif" srcset="hero.avif">
<source type="image/webp" srcset="hero.webp">
<img src="hero.jpg" width="1200" height="675" alt="Product hero shot">
</picture>Ten końcowy <img src> nie jest opcjonalny. Google stwierdza to wprost: zgodnie z
sekcją 4.8.1 standardu HTML,
“make sure that you provide an img element as a fallback with a src attribute when
using the picture element.” (tłumaczenie) „upewnij się, że podajesz element img jako wersję zapasową z atrybutem src, gdy używasz elementu picture.” To plik, do którego odwołują się starsze przeglądarki i roboty indeksujące —
i, ponownie, ten, który Google indeksuje.
Czy srcset pomaga SEO? Bezpośrednio vs. pośrednio
Oto ujęcie, które gubi każdy konkurencyjny przewodnik, więc będę bezpośredni.
Bezpośrednio: nie. Znaczniki obrazów responsywnych nie są sygnałem rankingowym tak, jak tekst alternatywny czy
nazwy plików w wyszukiwarce obrazów. Dodanie srcset nie podnosi Twoich pozycji i
nie zmienia tego, co pojawia się w Grafice Google. Google indeksuje obraz wskazany w
src; warianty srcset/<picture> są mechanizmem dostarczania, a nie osobno
indeksowanymi zasobami. Trzymaj tekst alt, nazwę pliku i dane strukturalne przypisane do
tego głównego obrazu src.
Pośrednio: tak, i to jedna z największych dźwigni, jakie masz. Obrazy o odpowiednim rozmiarze są najskuteczniejszą konkretną poprawką dla dwóch podstawowych wskaźników internetowych — LCP i CLS — które zasilają sygnały doświadczenia strony w Google. To cała korzyść. To ten sam schemat, co historia WebP/AVIF w centrum SEO obrazów: brak wzmocnienia dla samego formatu, wygraną jest szybkość.
Obrazy responsywne a LCP
Obrazy o zbyt dużych rozmiarach to jedna z najczęstszych przyczyn wolnego Largest Contentful Paint, a obrazy responsywne to zalecana poprawka w Lighthouse. Audyt Lighthouse „Obrazy o odpowiednich rozmiarach” wymienia “all images in your page that aren’t appropriately sized, along with the potential savings” (tłumaczenie) „wszystkie obrazy na Twojej stronie, które nie są odpowiednio zwymiarowane, wraz z potencjalnymi oszczędnościami” — wszystko, co jest większe niż potrzeba, “just results in wasted bytes and slows down page load time.” (tłumaczenie) „po prostu skutkuje zmarnowanymi bajtami i spowalnia czas ładowania strony”. Jego poprawka, dosłownie: “With responsive images, you generate multiple versions of each image, and then specify which version to use in your HTML or CSS using media queries, viewport dimensions, and so on.” (tłumaczenie) „Dzięki obrazom responsywnym generujesz wiele wersji każdego obrazu, a następnie określasz, której wersji użyć w HTML lub CSS, korzystając z zapytań o media, wymiarów okna przeglądarki i tak dalej”.
Dwie konkretne rzeczy, które warto znać:
- Próg błędu to 4 KiB. Lighthouse flaguje obraz tylko wtedy, gdy “the rendered size is at least 4KiB smaller than the actual size.” (tłumaczenie) „wyrenderowany rozmiar jest co najmniej 4 KiB mniejszy niż rzeczywisty rozmiar”. Małe przekroczenia się nie liczą; serwowanie pliku 3000px do slotu 400px — tak.
- Skrót narzędziowy. Google zaleca
RespImageLint,
“a helpful bookmarklet for identifying the optimal
srcsetandsizesvalues for your images.” (tłumaczenie) „przydatny bookmarklet do identyfikowania optymalnych wartościsrcsetisizesdla Twoich obrazów”. Uruchom go, zanim ręcznie obliczysz punkty graniczne.
Nie ładuj leniwie obrazu LCP
To jest zasada, którą ludzie łamią najczęściej. srcset na hero jest w porządku — ale nigdy nie łącz go z leniwym ładowaniem na elemencie LCP. Największy obraz powyżej linii zagięcia powinien ładować się z fetchpriority="high", dokładnie jak opisano w hubie Image SEO. A gdy budujesz responsywny <picture> hero, zachowaj natywną logikę zamiany: Google ostrzega, że “nie wczyta treści wymagających interakcji użytkownika”, takich jak przesuwanie czy klikanie, więc schemat JS, który ładuje prawdziwy obraz dopiero po interakcji, ukrywa go przed Google.
Responsywne obrazy i CLS
Oto pułapka: sam srcset nie robi nic dla przesunięcia układu. Przełączanie rozdzielczości decyduje, który plik się ładuje; nie rezerwuje dla niego miejsca. Bez podanych wymiarów, zgodnie z przewodnikiem web.dev Optimize CLS, “gdy obrazy się ładują, tekst przesuwa się w dół strony, aby zrobić im miejsce” — ponieważ miejsce “nie może być dla niego przydzielone, dopóki przeglądarka nie zacznie go pobierać i nie będzie mogła określić jego wymiarów.”
Rozwiązaniem są jawne wymiary, które współgrają z responsywnym znacznikiem:
- Ustaw atrybuty
widthiheightna<img>. Nowoczesne przeglądarki “ustawiają domyślny współczynnik proporcji obrazów na podstawie atrybutówwidthiheightobrazu”, więc te dwie liczby rezerwują odpowiednie pole przed pobraniem jakiegokolwiek wariantusrcset. (web.dev) - Połącz je z
height: autow CSS dla płynnych kontenerów. To część, która wygląda na sprzeczną, ale nie jest: zalecenie samego web.dev to “użyj CSS, aby zmienić rozmiar obrazu do szerokości kontenera” i “ustawheight: auto;, aby uniknąć używania stałej wartości dla wysokości obrazu.” Atrybuty HTML ustawiają wewnętrzny współczynnik proporcji; CSS pozwala obrazowi płynnie skalować się. Razem zapobiegają CLS i pozostają responsywne. - Lub użyj CSS
aspect-ratio, aby zarezerwować miejsce, gdy nie możesz ustawić atrybutów.
To obala trwały mit: atrybuty width/height nie psują płynnych układów. Atrybuty + height: auto to właściwa kombinacja, a nie konflikt. Omawiam pełną mechanikę przesunięcia układu w moim artykule Ahrefs CLS; w skrócie: “zarezerwuj miejsce, aby nie było przesunięcia” i pozwól obrazowi je wypełnić.
Implikacje indeksowania mobile-first
Google indeksuje głównie mobilną wersję Twoich stron, więc dwie zasady mają teraz większe znaczenie niż kiedyś, gdy serwujesz responsywne warianty:
- Zachowaj identyczny tekst alternatywny we wszystkich punktach przerwania. Najlepsze praktyki indeksowania mobile-first Google mówią: “make sure that the mobile site has the same alt text for images as the desktop site.” (tłumaczenie) „upewnij się, że mobilna witryna ma ten sam tekst alternatywny dla obrazów co wersja desktopowa”. Mobilny kadr art-directed nie może tracić kontekstu, którego potrzebuje Google.
- Utrzymuj stabilne adresy URL obrazów. Nie używaj adresów URL, które zmieniają się przy każdym załadowaniu strony dla obrazów. To współgra z wytycznymi Google dotyczącymi SEO obrazów, aby konsekwentnie odwoływać się do obrazu tym samym adresem URL, aby mógł go buforować i ponownie używać. Responsywne CDN-y, które tworzą nowy URL dla każdego żądania, to psują — przypisz stabilne URL-e dla swoich wariantów.
Podsumowanie Google dotyczące dlaczego warto to robić jest proste: “projektowanie responsywnych stron internetowych prowadzi do lepszego doświadczenia użytkownika, ponieważ ludzie mogą uzyskać do nich dostęp na wielu różnych urządzeniach.”
A co z Bing?
Nie ma wytycznych specyficznych dla Binga dotyczących srcset, sizes ani elementu <picture> —
publiczna dokumentacja Binga w ogóle nie porusza kwestii znaczników obrazów responsywnych. Więc nie
uzasadniaj obrazów responsywnych hakiem algorytmu Binga; argumentem są wydajność i UX,
które Bing (podobnie jak Google) traktuje jako jakość doświadczenia strony, a nie coś, na co
można wskazać jako udokumentowaną regułę dotyczącą obrazów responsywnych.
Częste błędy
- Zapominanie o
sizesz deskryptoramiw— przeglądarka zakłada100vwi może pobrać największy plik dla małego miejsca. - Pomijanie zapasowego
srcw<picture>— naruszenie specyfikacji, które Google wyraźnie flaguje, i to jest URL indeksowany przez crawlerów. - Niedopasowany stosunek
width/heightdo faktycznie serwowanego obrazu — nadal powoduje przesunięcie. - Leniwe ładowanie obrazu LCP — opóźnia LCP bez powodu; ładuj go eagerly z
fetchpriority="high". - Regenerowanie URL-i obrazów przy każdym żądaniu — łamie cache Google i mobilną zasadę „stabilnego URL”.
- Sięganie po
<picture>, gdy wystarczysrcset/sizes— niepotrzebna złożoność; web.dev mówi, że większość stron tego nie potrzebuje.
Gdzie to się znajduje
To jest szczegółowy przewodnik dotyczący rozmiaru i dostarczania w ramach szerszego hubu Image SEO —
wydajnościowa połowa SEO obrazów, równolegle do tego, jak przewodnik po tekście alternatywnym zajmuje się
połową związaną z wyszukiwaniem obrazów. Pełne mechanizmy przesunięcia układu znajdziesz w moim artykule Ahrefs CLS;
jeśli chodzi o LCP, fetchpriority i strategię ładowania, to praca nad Core Web Vitals
w przebraniu obrazów.
Podsumowanie AI
Skrócona wersja wersji zaawansowanej:
- Dwa mechanizmy, jedna rodzina.
srcset/sizesna<img>= przełączanie rozdzielczości (ten sam obraz, przeglądarka wybiera najlepsze dopasowanie — sugestia).<picture>= art direction lub przełączanie formatu (dyktowane przez autora przycięcia/formaty — polecenie). Większość stron potrzebuje tylkosrcset/sizes. - Deskryptory: deskryptory
w(szerokość) wymagają atrybutusizesi obejmują płynne, obrazy o szerokości treści; deskryptoryx(gęstość pikseli) pasują do obrazów UI o stałym rozmiarze i nie wymagająsizes. sizesjest obowiązkowe z deskryptoramiw— pominięcie go powoduje, że przeglądarka zakłada100vw, często pobierając największy plik niepotrzebnie. Najczęstszy błądsrcset.- Nie jest bezpośrednim sygnałem rankingowym. Responsywne znaczniki nie zmieniają tego, co Google
indeksuje — Google indeksuje URL
src; warianty to tylko dostarczanie. Zachowaj tekst alternatywny, nazwy plików i dane strukturalne na głównym obraziesrc. - Korzyść LCP: zbyt duże obrazy to główna przyczyna wolnego LCP; responsywne obrazy to
zalecana poprawka Lighthouse (audyt „Properly size images”; nieudany przy 4KiB różnicy;
RespImageLint pomaga wybrać
srcset/sizes). - CLS: sam
srcsetnie robi nic dla przesunięcia — ustaw atrybutywidth/height(lub CSSaspect-ratio), w połączeniu zheight: autodla płynnych układów. Atrybuty +height: autoto poprawna kombinacja, nie konflikt. - Nigdy nie ładuj leniwie obrazu LCP; ładuj go eagerly z
fetchpriority="high", i utrzymuj responsywne zamiany natywnie (Google nie załaduje treści wyzwalanej interakcją). - Indeksowanie mobile-first: ten sam tekst alternatywny i stabilne URL-e obrazów we wszystkich breakpointach; nie twórz nowego URL-a przy każdym żądaniu.
- Bing: brak dedykowanych wytycznych dotyczących obrazów responsywnych — uzasadnij pracę wydajnością/UX.
Oficjalna dokumentacja
Dokumentacja ze źródeł pierwotnych i wskazówki dla deweloperów.
Google — Search
- Google Images best practices — notatka o
srcset, wymóg zapasowegosrcw<picture>, wskazówki dotyczące tego samego URL-a i uzasadnienie responsywnego designu. - Mobile-first indexing best practices — ten sam tekst alternatywny i stabilne URL-e obrazów na mobile i desktopie; nie ładuj leniwie głównej treści przy interakcji.
Google — web.dev (wskazówki dla deweloperów)
- Learn: Responsive images —
srcsetuzupełniasrc; jak działająsizesi warunki media. - Learn: The picture element — kiedy potrzebujesz
<picture>, art direction i „sugestie vs. polecenia”. - Optimize Cumulative Layout Shift — atrybuty
width/height, proporcje obrazu iheight: autodla płynnych obrazów. - Fetch Priority API —
fetchpriority="high"dla obrazu LCP.
Chrome DevTools / Lighthouse
- Properly size images (uses-responsive-images) — audyt, próg 4KiB i zakładka RespImageLint.
MDN
- Using responsive images in HTML — odniesienie do
srcset,sizes, deskryptoróww/xi składni<picture>.
Cytaty ze źródła
Oświadczenia na piśmie z dokumentacji i wskazówek dla deweloperów Google. Tam, gdzie strona udostępnia tekst, link jest linkiem bezpośrednim, który przeskakuje do cytowanego fragmentu.
Google — dokumentacja SEO obrazów
- “The
srcsetattribute allows specifying different versions of the same image, specifically for different screen sizes.” (tłumaczenie) „Atrybutsrcsetpozwala określić różne wersje tego samego obrazu, w szczególności dla różnych rozmiarów ekranu.” Przejdź do cytatu - “Designing responsive web pages leads to better user experience, since people can access them across a plethora of device types.” (tłumaczenie) „Projektowanie responsywnych stron internetowych prowadzi do lepszego doświadczenia użytkownika, ponieważ ludzie mogą uzyskać do nich dostęp na wielu typach urządzeń.” Źródło
- O utrzymywaniu stabilnych adresów URL obrazów: “consistently reference the image with the same URL, so that Google can cache and reuse the image.” (tłumaczenie) „konsekwentnie odwołuj się do obrazu za pomocą tego samego adresu URL, aby Google mogło go buforować i ponownie wykorzystywać.” Przejdź do cytatu
Google — dokumentacja indeksowania mobile-first
- “Make sure that the mobile site has the same alt text for images as the desktop site.” (tłumaczenie) „Upewnij się, że witryna mobilna ma ten sam tekst alternatywny dla obrazów co witryna na komputery.” Przejdź do cytatu
- “Don’t use URLs that change every time the page loads for images.” (tłumaczenie) „Nie używaj adresów URL, które zmieniają się przy każdym załadowaniu strony dla obrazów.” Przejdź do cytatu
web.dev — srcset vs. picture
- “Where the
srcsetattribute gives suggestions to the browser, thepictureelement gives commands.” (tłumaczenie) „Tam, gdzie atrybutsrcsetdaje przeglądarce sugestie, elementpicturewydaje polecenia.” Przejdź do cytatu
Ja — o poprawce CLS
- “Reserve the space so that there’s no shift” (tłumaczenie) „Zarezerwuj miejsce, aby nie było przesunięcia” — obraz po prostu je wypełnia. Przejdź do cytatu
<picture> / srcset dla SEO obrazów, ale nie udało się znaleźć pierwotnego zapisu z możliwym do zacytowania sformułowaniem, więc pominąłem to zamiast cytować. Nie istnieją żadne wskazówki dotyczące responsywnych obrazów specyficzne dla Bing, które można by zacytować. Cytaty z web.dev, Lighthouse i dokumentów Google powyżej pochodzą z aktywnych stron z linkami bezpośrednimi. Gotowe wzorce responsywnych obrazów
Trzy wzorce, które pokrywają prawie każdy rzeczywisty przypadek. Wszystkie zachowują zapasowy src, jawne width/height (poprawka CLS) i identyczny tekst alt.
1. Przełączanie rozdzielczości — codzienne <img srcset> (mój wielokrotnego użytku wzorzec)
<img
src="puppy-1000.jpg"
srcset="puppy-1000.jpg 1000w,
puppy-2000.jpg 2000w,
puppy-3000.jpg 3000w"
sizes="(max-width: 600px) 480px, 1000px"
width="1000" height="1000"
alt="Puppy with balloons" />Połącz to z tym CSS, aby obraz skalował się płynnie bez powodowania przesunięcia układu:
img {
max-width: 100%;
height: auto; /* with width/height attributes set, this prevents CLS */
}2. Obraz o stałym rozmiarze — deskryptory gęstości pikseli (x), bez potrzeby sizes
<img
src="logo.png"
srcset="logo.png 1x, logo@2x.png 2x"
width="200" height="60"
alt="Company logo" />3. Obraz LCP — eager + wysoki priorytet i rezerwowy format przez <picture>
<picture>
<source type="image/avif" srcset="hero.avif">
<source type="image/webp" srcset="hero.webp">
<img
src="hero.jpg"
width="1200" height="675"
fetchpriority="high"
loading="eager"
alt="Product hero shot" />
</picture>Zasady wbudowane w te wzorce:
- Zawsze zachowuj końcowy
<img src>— to rezerwowy i URL, który indeksuje Google. - Z deskryptorami
wwymagany jestsizes; bez niego przeglądarka zakłada100vw. - Z deskryptorami
xpomińsizes. - Nigdy nie dodawaj
loading="lazy"do obrazu LCP (wzorzec 3) — to opóźnia LCP; użyjfetchpriority="high"zamiast tego.
Aby znaleźć właściwe wartości srcset/sizes zamiast zgadywać, uruchom
RespImageLint,
zakładkę, którą zaleca Google, na żywej stronie.
Którego faktycznie potrzebujesz: srcset/sizes czy picture?
Przeanalizuj rzeczywistą gałąź, którą artykuł rysuje między przełączaniem rozdzielczości a kierowaniem artystycznym / przełączaniem formatu.
srcset/sizes a element picture
Większość witryn zatrzymuje się na pierwszej gałęzi i nigdy nie wychodzi poza srcset/sizes — sięgnij po
<picture> tylko wtedy, gdy sam obraz musi się zmienić, a nie tylko jego rozmiar.
Czego nie robić
Sześć konkretnych błędów, które artykuł wymienia, każdy z wyjaśnieniem, dlaczego jest błędny, i poprawką.
- Zapominanie o atrybucie
sizesz deskryptoramiw. Dlaczego to błąd: bezsizesprzeglądarka zakłada, że obraz wypełnia pełną szerokość viewportu (100vw), więc może pobrać Twój największy kandydat dla miejsca, które renderuje się znacznie mniejsze. Zamiast tego: zawsze łączsrcsetz deskryptoremwz wartościąsizes, która odpowiada temu, jak obraz faktycznie się renderuje na każdym breakpoincie. - Pomijanie fallbacku
<img src>w<picture>. Dlaczego to błąd: to naruszenie specyfikacji, które Google wyraźnie flaguje, i to ten URL jest indeksowany przez crawlerów i Google Images — brak fallbacku oznacza brak indeksowalnego obrazu. Zamiast tego: każdy blok<picture>kończy się zwykłym<img src="...">, nigdy tylko elementami<source>. - Niedopasowany stosunek
width/heightdo faktycznie serwowanego obrazu. Dlaczego to błąd: atrybuty ustawiają zarezerwowany współczynnik proporcji; jeśli prawdziwy obraz nie pasuje do niego, układ nadal się przesuwa po załadowaniu obrazu. Zamiast tego: utrzymuj stosunekwidth/height(lubaspect-ratio) identyczny z plikami obrazów, które faktycznie serwujesz we wszystkich wariantachsrcset/<picture>. - Leniwe ładowanie obrazu hero LCP. Dlaczego to błąd:
loading="lazy"opóźnia pobranie dokładnie tego obrazu, który mierzy Largest Contentful Paint, przesuwając LCP później bez żadnych korzyści. Zamiast tego: ładuj obraz LCP eagerly zfetchpriority="high", nigdyloading="lazy". - Regenerowanie URL-i obrazów przy każdym żądaniu. Dlaczego to błąd: to psuje cache’owanie obrazów przez Google i narusza zasadę mobile-first indexing dotyczącą URL-i, które zmieniają się za każdym razem, gdy strona się ładuje. Zamiast tego: przypisz stabilne, spójne URL-e dla każdego wariantu obrazu, aby Google mógł je cache’ować i ponownie używać.
- Sięganie po
<picture>, gdy wystarczysrcset/sizes. Dlaczego to błąd: to niepotrzebna złożoność — web.dev jest jednoznaczne, że większość stron w ogóle nie potrzebuje<picture>. Zamiast tego: domyślnie używaj przełączania rozdzielczościsrcset/sizes; dodawaj<picture>tylko wtedy, gdy naprawdę potrzebujesz innego przycięcia lub formatu dla danego warunku.
Częste problemy
Wyszukiwanie od symptomów dla dwóch problemów z obrazami responsywnymi, na które faktycznie trafiają czytelnicy.
Układ nadal się przesuwa (CLS), mimo że srcset jest skonfigurowany
- Objaw: Lighthouse lub PageSpeed Insights nadal raportuje przesunięcie układu na
obrazie, albo wizualnie widać, jak treść skacze podczas ładowania obrazu, mimo działającego
srcset/sizes. - Prawdopodobna przyczyna: sam
srcsetnie robi nic dla przesunięcia układu — tylko decyduje, który plik się ładuje, a nie ile miejsca zarezerwować. Obraz nie ma atrybutówwidth/height(ani CSSaspect-ratio), więc przeglądarka nie może przydzielić miejsca, dopóki plik nie zacznie się pobierać i jego wymiary nie będą znane. - Naprawa + potwierdzenie: Dodaj jawne atrybuty
widthiheightdo<img>(lub ustaw CSSaspect-ratio) i połącz je zheight: autow CSS, aby obraz nadal skalował się płynnie. Potwierdź, ponownie uruchamiając kontrolę CLS (Lighthouse lub live CrUX check) i obserwując, czy przesunięcie zniknie — zarezerwowane pole powinno teraz utrzymywać swój rozmiar, zanim obraz się załaduje.
Lighthouse flaguje „Properly size images” / ładuje się zbyt duży obraz
- Objaw: Audyt Lighthouse „Properly size images” wymienia jeden lub więcej obrazów z zmarnowanymi bajtami, albo strona wydaje się wolno osiągać Largest Contentful Paint, mimo że sam obraz wygląda dobrze.
- Prawdopodobna przyczyna: Wyświetlany rozmiar obrazu jest co najmniej 4KiB mniejszy niż
faktyczny serwowany plik — zwykle dlatego, że nie ma w ogóle
srcset, albo brakujesizes, przez co przeglądarka przyjęła100vwi pobrała największy kandydat dla małego miejsca. - Poprawka + potwierdzenie: Dodaj (lub popraw)
srcsetz odpowiednio dobranymi kandydatami oraz wartośćsizesodpowiadającą rzeczywistej wyświetlanej szerokości; uruchom RespImageLint, aby sprawdzić wartości zamiast zgadywać. Potwierdź, ponownie uruchamiając audyt Lighthouse „Properly size images” i sprawdzając, czy oznaczony obraz już się nie pojawia (lub jego potencjalne oszczędności spadną poniżej progu 4KiB).
Ściągawka: deskryptory, picture vs. srcset oraz zasady CLS/LCP
| Sytuacja | Użyj | Uwagi |
|---|---|---|
| Płynny obraz o szerokości treści, skalujący się z kontenerem | srcset z deskryptorami w + sizes | sizes jest obowiązkowe — bez niego przeglądarka przyjmuje 100vw |
| Obraz o stałym rozmiarze (logo, awatar, ikona) | srcset z deskryptorami x | sizes nie jest potrzebne — wyświetlany rozmiar się nie zmienia |
| Ten sam obraz, inny wyświetlany rozmiar | srcset/sizes na <img> (przełączanie rozdzielczości) | Sugestia dla przeglądarki — wybiera ona najlepiej dopasowany plik |
| Inne przycięcie/kadrowanie na każdym breakpoincie | <picture> z <source media="..."> (art direction) | Polecenie — to Ty decydujesz, który obraz się ładuje |
| Nowoczesny format (AVIF/WebP) z fallbackiem | <picture> z <source type="..."> | Zawsze kończ zwykłym fallbackiem <img src> |
| Zapobieganie CLS | Atrybuty width/height lub CSS aspect-ratio, plus height: auto dla układów płynnych | Sam srcset nie zapobiega przesunięciu układu |
| Naprawa wolnego LCP spowodowanego zbyt dużym obrazem | Odpowiednio dobrane srcset/sizes | Poprawka audytu Lighthouse „Properly size images”; próg błędu to 4KiB |
| Strategia ładowania obrazu hero LCP | fetchpriority="high", nigdy loading="lazy" | Leniwe ładowanie elementu LCP opóźnia LCP bez powodu |
| Co indeksuje Google | Tylko URL src | Warianty srcset/<picture> to kwestia dostarczania, nie osobno indeksowane zasoby |
Testy walidacyjne
Kontrolki zaliczenia/niezaliczenia, które potwierdzają, że zmiana obrazu responsywnego faktycznie zadziałała.
Odpowiednio dobrane obrazy są poprawnie dostarczane
Test do uruchomienia: Uruchom audyt Lighthouse „Properly size images” (Chrome DevTools >
Lighthouse > Performance lub PageSpeed Insights) na stronie, którą właśnie zaktualizowałeś.
Oczekiwany wynik: Naprawiony obraz nie pojawia się już na liście flagowanej przez audyt,
albo jego potencjalne oszczędności spadają poniżej progu 4KiB. Interpretacja błędu:
Jeśli obraz nadal jest flagowany, albo kandydaci srcset są wciąż zbyt duzi dla wyświetlanego
rozmiaru, albo brakuje sizes / jest błędne i przeglądarka nadal przyjmuje 100vw.
Okno monitorowania: Natychmiastowe — uruchom ponownie zaraz po wdrożeniu zmiany.
Trigger wycofania: Audyt nadal flaguje ten sam obraz z niezmienionymi potencjalnymi
oszczędnościami po potwierdzeniu, że sizes odpowiada rzeczywistej wyświetlanej szerokości.
Wartości srcset/sizes są faktycznie optymalne
Test do uruchomienia: Uruchom
RespImageLint
(bookmarklet zalecany przez Google) na żywej stronie. Oczekiwany wynik: Brak
ostrzeżeń o zbyt dużych kandydatach lub brakującej/błędnej wartości sizes.
Interpretacja błędu: Ostrzeżenie oznacza albo kandydata niepotrzebnie dużego dla
danego breakpointu, albo sizes nie odpowiadające rzeczywistej wyświetlanej szerokości kontenera.
Okno monitorowania: Natychmiastowe, na żywym URL po wdrożeniu. Trigger wycofania:
RespImageLint nadal flaguje ten sam obraz po poprawieniu wartości sizes.
Przeglądarka faktycznie wybrała oczekiwanego kandydata
Test do wykonania: Przejście kontroli Lighthouse/RespImageLint potwierdza, że Twój kod jest poprawny — nie potwierdza jednak, że przeglądarka wybrała plik, który zamierzałeś przy danej szerokości widocznego obszaru. Załaduj stronę przy punkcie granicznym, który Cię interesuje, otwórz DevTools, zaznacz <img> i sprawdź jego właściwość currentSrc w konsoli ($0.currentSrc w DevTools Chrome/Firefox) — przykład na stronie MDN robi dokładnie to: porównuje currentSrc z oczekiwaną nazwą pliku, aby potwierdzić, który kandydat został załadowany. Porównaj z kartą Network, aby zobaczyć, który plik został faktycznie pobrany. Powtórz to dla wąskich i szerokich punktów granicznych oraz dla współczynnika pikseli 1x i 2x, jeśli go emulujesz.
Oczekiwany wynik: currentSrc odpowiada plikowi kandydata, którego oczekujesz dla tej szerokości widocznego obszaru i gęstości pikseli, a karta Network pokazuje, że pobrano tylko ten plik. Interpretacja błędu: Jeśli currentSrc zwraca kandydata większego lub mniejszego niż oczekiwano, albo wartość sizes nie odpowiada rzeczywistej wyrenderowanej szerokości CSS obrazu (patrz „Dlaczego sizes ma znaczenie” w zakładce Advanced), albo deskryptor srcset jest błędny. Pamiętaj, że wybór przeglądarki jest zdefiniowany przez implementację — standard HTML pozostawia dokładny wybór spośród prawidłowych kandydatów przeglądarce (gęstość, powiększenie i warunki sieciowe mogą mieć znaczenie), więc nie oczekuj identycznego zachowania w różnych przeglądarkach; sprawdzaj „rozsądnego kandydata”, a nie jedną ustaloną odpowiedź. Okno monitorowania: Natychmiastowe — sprawdzaj przy każdym punkcie granicznym zaraz po wdrożeniu. Wyzwalacz wycofania: currentSrc nadal zwraca zbyt duży kandydat przy wąskim widocznym obszarze po poprawieniu sizes tak, aby odpowiadało rzeczywistej wyrenderowanej szerokości.
Brak przesunięcia układu spowodowanego obrazem
Test do wykonania: Sprawdź Cumulative Layout Shift dla strony — wynik CLS w Lighthouse lub dane terenowe CrUX/PageSpeed Insights dla adresu URL. Oczekiwany wynik: CLS przypisywany obrazowi spada do (prawie) zera po ustawieniu width/height (lub aspect-ratio). Interpretacja błędu: Utrzymujące się przesunięcie zwykle oznacza, że proporcje width/height nie odpowiadają faktycznie serwowanemu obrazowi lub atrybuty są całkowicie pominięte. Okno monitorowania: Dane laboratoryjne są natychmiastowe; dane terenowe (CrUX) potrzebują około 28 dni, aby zgromadzić wiarygodny trend. Wyzwalacz wycofania: CLS w danych terenowych nie poprawia się po 28 dniach mimo zdanego testu laboratoryjnego — sprawdź ponownie, czy proporcje serwowanego obrazu faktycznie odpowiadają zarezerwowanemu polu.
Sprawdź się: Obrazy responsywne
Pięć szybkich pytań o srcset, sizes, <picture> i o to, jak obrazy responsywne wpływają na SEO. Wybierz odpowiedź na każde, a następnie sprawdź.
Dziennik zmian
Zaktualizowano 18 lip 2026.
Podsumowanie redakcyjne i zapisane szczegóły zmian.Szczegóły zmian
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
-
Szczegółowe uwagi dotyczące zmian są obecnie dostępne po angielsku.
Pełne porównanie jest niedostępne — dla tej wersji nie zarchiwizowano wcześniejszej migawki.