Hầu hết các công cụ tìm kiếm sẽ lập chỉ mục hình ảnh bị ẩn miễn là bạn không sử dụng kiểu nội tuyến để ẩn hình ảnh. Phần lớn các trình duyệt sẽ không tải hình ảnh ẩn.
Có một trang thử nghiệm có thể xác minh yêu cầu này. Một số trình duyệt di động cũ là ngoại lệ, nhưng tôi cho rằng việc lười tải trên điện thoại di động có thể phản tác dụng với trải nghiệm duyệt tốt.
http://www.w3.org/2009/03/image-display-none/test.php
Trong tệp CSS của bạn thêm sửa đổi sau.
.lazy-img { display: none; }
Bây giờ bạn có thể tải một trang với hình ảnh lười biếng như thế này và chúng sẽ được lập chỉ mục.
<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>
Điều quan trọng là bạn bao gồm title
thuộc tính cho hình ảnh. Hoặc bạn bao quanh <img
thẻ> bằng một liên kết <a
> thẻ và văn bản liên kết. Nếu không, các công cụ tìm kiếm sẽ liên kết các từ khóa với hình ảnh theo khoảng cách từ. Bạn sẽ gặp tất cả những rắc rối này cho SEO, bạn cũng có thể đi tất cả các cách.
Nếu bạn sử dụng như trên. Không có gì sẽ hiển thị như những hình ảnh được ẩn. Bạn muốn loại bỏ lớp này ở dưới cùng của tài liệu. Chìa khóa ở đây là sử dụng Javascript thuần túy nội tuyến. Javascript này được thực thi ngay lập tức sau khi bố trí các yếu tố trên kết thúc. Nếu bạn tải tất cả các tệp JS bên ngoài của bạn ở dưới cùng (như bạn nên). Bạn nên đặt khối Javascript này lên trên các tệp đó. Vì vậy, không có độ trễ trong việc sửa đổi 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>
Bây giờ tôi đã thêm các điều kiện cho IE9 vì nó không hỗ trợ getElementsByClassName
trong 8 tuổi trở lên. Điều gì sẽ xảy ra (không được kiểm tra) là những trình duyệt đó sẽ chỉ tải hình ảnh như hiện tại.
Ưu điểm của phương pháp này là giữ cho HTML trông sạch sẽ từ góc nhìn của webcrawler.