【问题标题】:Dynamically set multiple background-image urls without using the HTML style attribute在不使用 HTML 样式属性的情况下动态设置多个背景图片 url
【发布时间】:2018-07-30 01:41:27
【问题描述】:

tl;博士

在不使用 HTML style="" 属性的情况下,还有哪些其他动态解决方案可用于为页面设置 background-image: url()

我的页面以 13 个元素开始,我在其中设置了 url(),当您滚动到页脚时,我们的惰性加载器将加载 9 个(最多 12 个)更多元素,这些元素再次具有自己独特的“动态”图像集。

我认为我们只需要降低我们的 SEO 分数,因为我认为没有更好的解决方案可用。

注意:如果需要,我可以创建一个 JS Fiddle,但我认为这描述得很好/通用,因此不需要它。请让我知道是否需要回答。


目的

我们公司正在努力提高他们的网站 SEO 得分,我们确定要修复的一项是将所有 HTML 样式属性移动到单个 CSS 文件(或 <style></style> 声明)中。我相信这被称为问题的原因是因为我们有几个元素使用它来设置他们的文章background-image: url();

为什么不直接使用<img> 标签呢?

我们的客户有很多不同类型的图片(尺寸、焦点中心等),他们想在发布文章时使用。为了让我们无论屏幕大小都拥有最一致的设计,我们使用 CSS background-image 样式而不是 <img> HTML 标签。我们还在处理一些 WP/XMLRPC 发布限制,我们无法为此创建自定义解决方案。

所以我们不能为此使用 HTML,如果可以的话,这将是一个简单的解决方案。

为什么当前设置在style 属性中?

这是迄今为止我们发现的最好的“动态”解决方案。到目前为止(这会影响我们的 SEO 分数),这从来都不是问题。在我们的 CSS 样式中,我们有 .class {} 共享的特定背景图像样式。每篇文章唯一不同的是图片的 URL,所以我们通过 PHP 在style="background-image: url();" 属性中动态设置。

问题

我的页面以 13 个元素开始,我在其中设置了 url()。我“可以”在顶部设置内联 CSS,为这些元素设置动态类,这些元素将具有其独特的 background-image: url();'s,即使设置/执行听起来很痛苦,这也可以工作。

但是当您滚动到页脚时,我们会发生延迟加载。我们通过 AJAX 加载了 9 个(最多 12 个)更多的元素,这些元素再次拥有自己独特的“动态”图像集。我可以在这里做同样的事情,创建另一个内联<style></style> CSS 位......但这是踢球者。我们对 SEO 的其他抱怨之一是我们将多个内联 CSS(以及 JS)组合到一个声明中。如果我继续创建更多 <style></style> 声明来解决此 SEO 问题,我将创建/恶化另一个 SEO 问题。

问题

在不使用 HTML style="" 属性的情况下,还有哪些其他动态解决方案可用于为页面设置 background-image: url()

我认为我们只需要在这一项上降低我们的 SEO 分数,因为我认为没有更好的解决方案可用。

【问题讨论】:

  • 好吧,让我告诉你一些事情:我用 wordpress 工作了很多,我开发了 50 多个网站,当我的客户告诉我“为什么分数太低??!! " .. 他认为这太糟糕了,但实际上并非如此......当您测试您的页面时,您会收到有关网站应该如何的建议,因为这些建议可以使网站变得更好,但您永远无法满足所有这些建议。 ..所以我的看法是,你会浪费很多时间去优化,你不能达到100% ..你可以测试知名网站的分数来比较。
  • 检查亚马逊的分数有多糟糕gtmetrix.com/reports/amazon.com/ajgoZnXe ...所以我相信您只是想获得 2 或 3 分的分数,这对您的网站没有影响...最重要的是快速加载、移动友好、编写良好的元、语义标签等......延迟解析 JS、压缩 CSS、删除查询字符串、避免内联 CSS 是一个简单的建议,可能会对您有所帮助,但如果您的网站已经快速,没有必要这样做并使您的生活复杂化
  • 是的,你可以保持这个开放,因为这是一个有趣的问题,但我只是想分享我的想法,因为我多次面临这个问题;)当我遇到这个问题时,我试图说服我的客户而不是让我的生活复杂化:)
  • @TemaniAfif 是的,这里建立了很多网站,但总是一样的,他们看待问题的方式就像你试图摆脱工作一样 :)
  • @skplunkerin 如果你害怕弄乱(打开/写入)主css文件,那么只需创建一个新文件whatever.php并将其包含在主css文件中@import'whatever.php' ;

标签: php html css wordpress seo


【解决方案1】:

一个想法是将background-image内联样式更改为对SEO分数没有影响的数据属性,然后您可以添加一些JS代码以将它们更改为内联样式。

当然,这可能会对其他脚本产生影响,因为我不知道您的网站是如何构建的,因此您可以将此 JS 代码添加为第一个 JS 代码,以便更改所有内联样式并准备好它们对于任何未来的脚本。

$('.box').each(function() {
  var url = $(this).data('background');
  $(this).css('background-image','url('+url+')');
})
.box {
  width:100px;
  height:100px;
  display:inline-block;
  background-size:cover;
  border:1px solid;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="box" data-background="https://lorempixel.com/400/200/">
</div>
<div class="box" data-background="https://lorempixel.com/300/200/">
</div>
<div class="box" data-background="https://lorempixel.com/400/400/">
</div>

顺便说一句,我们可以将此解决方案推广到任何内联样式。所以想法是将所有样式设置为数据属性,然后我们只需将它们更改为内联样式:

$('[data-style]').each(function() {
  $(this).attr('style',$(this).data('style'));
  /*Not mandatory*/
  $(this).removeAttr('data-style');
})
.box {
  width:100px;
  height:100px;
  display:inline-block;
  background-size:cover;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="box" data-style="background-image:url(https://lorempixel.com/400/200/);padding:20px;border-color:yellow;">
</div>
<div class="another-box" data-style="background-image:url(https://lorempixel.com/200/200/);margin:20px;border:5px solid pink;height:50px;">
</div>
<div data-style="background-image:url(https://lorempixel.com/200/200/);height:200px;">
</div>

注意:正如我上面所说,我们需要在网站的复杂性和我们获得的分数之间取得平衡。如果我们可以轻松获得 80%,则无需为了获得 85% 或 90% 而使网站过于复杂,并且可能会产生一些错误或使网站的维护变得困难。

【讨论】:

  • 嗯,测试这个会很有趣,因为我想知道如果某些 SEO 测试人员允许 JS 解析,结果是否会有所不同......虽然我想他们不会(允许 JS 解析) .我再次同意@TemaniAfif,仅仅为了获得一些额外的 SEO“建议”点而使网站更加复杂并不理想。不过,我真的很喜欢这种开箱即用的想法。
  • @skplunkerin 我不认为有任何 SEO 工具可以解析 JS ......因为这对于使用纯 JS 框架(如 Angular)构建的网站来说也是一个常见问题,而此类网站有时必须这样做将静态版本提供给非真实用户(机器人、爬虫等),仅将 JS 站点提供给真实用户。所以我很确定你会得到一些分数:)......顺便说一下,这也可以是任何内联麦粒肿的通用解决方案;)你可以例如使用data-style,稍后您将其更改为style ..我将其添加到我的答案中:)
  • 聪明人,不错的补充! :) 这是有道理的,我实际上想知道 Angular/likes 如何在 SEO 记者中工作......需要自己解析(通过提供静态版本)是有道理的。我将把它标记为它的信息的正确答案,谢谢!
猜你喜欢
  • 2014-11-09
  • 1970-01-01
  • 2015-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
相关资源
最近更新 更多