A maioria dos mecanismos de pesquisa indexa imagens ocultas, desde que você não use estilos embutidos para ocultar a imagem. A maioria dos navegadores não carrega imagens ocultas.
Há uma página de teste que pode verificar esta reivindicação. Alguns navegadores móveis mais antigos são a exceção, mas eu argumento que o carregamento lento em telefones celulares pode ser contraproducente para uma boa experiência de navegação.
http://www.w3.org/2009/03/image-display-none/test.php
No seu arquivo CSS, adicione a seguinte modificação.
.lazy-img { display: none; }
Agora você pode carregar uma página com imagens preguiçosas como esta e elas serão indexadas.
<body>
<img class="lazy-img" src="img1.jpeg" title="image title"/>
<img class="lazy-img" src="img2.jpeg" title="image title"/>
<img class="lazy-img" src="img3.jpeg" title="image title"/>
<img class="lazy-img" src="img4.jpeg" title="image title"/>
</body>
É importante que você inclua o title
atributo para a imagem. Ou você envolve a <img
tag> com uma <a
tag> link e texto do link. Caso contrário, os mecanismos de pesquisa associarão as palavras-chave à imagem por distância da palavra. Você está enfrentando todo esse problema para o SEO e pode ir até o fim.
Se você usar o acima como está. Nada será exibido quando as imagens estiverem ocultas. Você deseja remover esta classe na parte inferior do documento. A chave aqui é usar Javascript puro embutido. Este Javascript é executado imediatamente após a conclusão do layout dos elementos acima. Se você carregar todos os seus arquivos JS externos na parte inferior (como deveria). Você deve colocar esse bloco Javascript acima desses arquivos. Para que não haja atraso na modificação do DOM.
<body>
<!--[if lte IE 8]
<style type="text/css">.lazy-img { display: block !important; }</style>
[endif]-->
<noscript><style type="text/css">.lazy-img { display: block !important; }</style></noscript>
<img class="lazy-img" src="img1.jpeg" title="image title"/>
<img class="lazy-img" src="img2.jpeg" title="image title"/>
<img class="lazy-img" src="img3.jpeg" title="image title"/>
<img class="lazy-img" src="img4.jpeg" title="image title"/>
<![if gte IE 9]>
<script type="text/javascript">
var images = document.getElementsByClassName('lazy-img');
Array.prototype.forEach.call(images, function(image){
image.setAttribute("data-src",image.getAttribute("src"));
image.setAttribute("src","loading.gif");
});
while(images.length > 0) { images[0].className = ""; }
</script>
<![endif]>
</body>
Agora eu adicionei condicionais para o IE9, uma vez que não suporta getElementsByClassName
em 8 ou mais. O que deveria acontecer (não testado) é que esses navegadores apenas carregam a imagem como estão.
A vantagem dessa abordagem é que mantém o HTML limpo da perspectiva do webcrawler.