PHP, JavaScript -检测屏幕宽度并从URL中删除$_GET值

PHP, JavaScript - Detect screen-width and remove the $_GET values from URL

本文关键字:删除 URL GET JavaScript 检测 屏幕 PHP      更新时间:2023-09-26

我使用以下JavaScript来检测屏幕宽度,并通过条件语句将其作为模板文件中的常量来显示/不显示站点的部分。虽然这和我的问题没有太大关系,但以防万一……是的,我正在使用WordPress。此外,我已经在使用mobiledetect PHP库。

function getLayoutWidth() {
        if (isset($_GET['width'])) {
          define( "SCREEN_WIDTH", $_GET['width']);
        } else {
          echo "<script language='javascript'>'n";
          echo "  location.href='"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}"
                        . "&width='" + screen.width;'n";
          echo "</script>'n";
          exit();
        }
    }

重要提示:

  1. 请不要建议媒体查询解决方案,因为这种技术不能解决我的问题。假设我的网站大小为2MB,它仍然会加载2MB的内容,然后通过使用CSS属性(如display:none;)在移动设备上隐藏1.5MB的内容。然而,我不希望模板部分自己加载,因此不需要隐藏任何东西。例如—@1200px我只想显示1个侧边栏。@1600px我想显示2个边栏,超过1600px我想显示3个边栏。

  2. 我不希望像jQuery这样加载整个JavaScript库,因为location.href='"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}". "&width='" + screen.width;是我整个网站中唯一的JavaScript。其余的一切都是纯PHP, HTML和CSS为基础的。我甚至在前端模板中禁用了WordPress的jQuery

我的问题:

  1. 从SEO的角度来看,这是一个好的/正确的方法吗?如果不是,为什么?我不想加载的内容无论如何都不需要索引

  2. 我的URL显示为example.com/my-product-category/my-product-name/?width=1440如何删除/?width=1343并仅显示example.com/my-product-category/my-product-name部分?

请不要把建议作为答案。让有正确答案的人去做吧。请在评论区发表建议

从SEO的角度来看,这是一个好的/正确的方法吗?如果不是,为什么?我不想加载的内容是不需要加载的索引。

是的。这会给SEO带来问题。

考虑一些(设计糟糕的)网站有像www.example.com/index.php?page=homepage这样的url,其中page参数实际上决定了页面的整个内容。因此,搜索引擎必须考虑每个唯一的URL是一个不同的页面,即使一个参数只影响页面的布局。

如果有人在不知情的情况下链接到包含宽度参数的页面,该特定URL将获得反向链接的信用,而不会给予其他具有其他相同内容的URL信用。

如果由于某些原因你不能解决这些问题-至少使用一些规范的url。

此外,该页可能返回一个HTTP 200状态码,表明该页是正确的。但是您随后决定使用Javascript将用户重定向到一个不同的页面。对于良好的SEO(以及一般的编程实践),您的网页必须提供准确的状态码。当你重定向用户时,你需要一个3XX状态码。

我的URL显示为example.com/my-product-category/my-product-name/?width=1440如何删除/?宽度=1343,显示刚好example.com/my-product-category/my-product-name部分?

您可以使用会话来存储请求之间的数据,但这仍然需要单独的$_GET$_POST请求来让PHP第一次访问数据。这就留下了我上面描述的问题。


出于某种原因,您觉得有必要让PHP控制页面布局。这是一种非常糟糕的做法。PHP旨在解释传入的HTTP请求并为页面提供适当的内容。向PHP提供有关视口宽度的信息迫使PHP做出布局决定。PHP不应该被用来控制页面布局——那是CSS的工作。

如果你想要好的SEO和好的编程实践,让每个组件做它应该做的工作。

你不能。你不能在没有设置get参数的情况下从get参数获取宽度。然而,你可以将它存储在cookie中。

另外,我认为这听起来像是一件奇怪的事情,可能有更好的方法(如移动检测)。