像somesite.com/index.php这样的url搜索引擎有问题吗?page=照片


Do search engines have trouble with urls like somesite.com/index.php?page=photos

我对php编码、web开发和搜索优化都是新手。在学习php和web开发的过程中,我一直在尝试不同的网站架构和布局。我正在研究的一个使用如下方法:

我有一个index.php页面,它总是加载header.php、sidebar.php和footer.php。index.php还包含一个开关,因此根据传递的页面变量,它加载不同的核心内容。例如examplesite.com/index.php?page=照片和examplesite.com/index.php?page=stories都有相同的页眉、页脚和边栏,但其中一个有照片,另一个有故事作为主要内容。

<?php $page = $_GET['page'];?>
<?php include("header.php"); ?>
<?php include("nav.php"); ?>
<?php 
      switch ($page)
      {
      case 'play':
        include("photos.php");
        break;
      case 'cards':
        include("stories.php");
        break;
      default:
        include("frontpage.php");
      } 
      ?>
<?php include("footer.php"); ?>

我的导航是由href="index.php?page=…"链接组成的,因此在索引页上选择菜单按钮本质上就是将自己传递给要加载的新核心。

我不知道这是否是一种完全非正统的方法,但这一切都是因为我最初打算创建一个wordpress主题,但中途决定不在wordpress中进行。

我担心的是,当涉及到搜索引擎、索引、seo等时,这种方法可能会有什么缺点。

我还应该考虑哪些缺点或问题,也许我没有?

提前感谢!

我不知道这是否是一种完全非正统的方法

使用查询字符串加载各种页面本质上没有什么"非正统"之处。数十亿网站使用这种方法。搜索引擎可以索引这样的页面
尽管如此,

我有一个index.php页面,它总是加载header.php、sidebar.php和footer.php。

这是一个错误的概念
只有一个index.php文件来加载页眉和页脚是没有意义的,而且会使您的网站明显无法使用。

以下是您设计中的主要错误:

  1. 您假设在每次页面调用时都会调用header.php。这是错误的
  2. 您假设header.php将始终是静态的。这是错误的
  3. 您忘记为页面本身创建模板

每个人都必须牢记的主要规则:

在所有数据准备就绪之前,不需要向浏览器发送任何字符

为什么?

  • 今天是2012年。AJAX时代。如果您的代码将不得不发送JSONed数据而不是整个HTML页面,该怎么办
  • 有一种东西叫做CCD_ 1。有时我们不得不送他们。如果你已经发送了华丽的HTML头,那就不可能了
  • 将显示逻辑与业务逻辑分离将允许您在许多站点上使用相同的php代码。您将不得不只更改模板,不要触摸引擎文件。这真是一大好处
  • 想象一下,您将根据页面内容为页面制作一个自定义的<title>标记。这不是很普通的事情吗?但如果不使用模板,就无法实现

所以,您必须有一个包含页眉和页脚的通用网站模板,以及每个php脚本的专用模板
只有当所有业务逻辑都完成时,这些模板才能被调用,也就是说,您已经准备好了所有数据。

一个布局示例如下:

.1页面本身。

它不输出任何东西,但只收集所需的数据,然后调用一个模板:

<?
//include our settings, connect to database etc.
include dirname($_SERVER['DOCUMENT_ROOT']).'/cfg/settings.php';
//getting required data
$DATA=dbgetarr("SELECT * FROM links");
$pagetitle = "Links to friend sites";
//etc
//and then call a template:
$tpl = "links.tpl.php";
include "template.php";
?>

.2.template.php,它是您的主站点模板,

由页眉和页脚组成:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>My site. <?=$pagetitle?></title>
</head>
<body>
<div id="page">
<? include $tpl ?>
</div>
</body>
</html>

最后links.tpl.php是实际的页面模板:

<h2><?=$pagetitle?></h2>
<ul>
<? foreach($DATA as $row): ?>
<li><a href="<?=$row['link']?>" target="_blank"><?=$row['name']?></a></li>
<? endforeach ?>
<ul>

这样,您就不需要任何包含的索引