1

我最近完成了一个网站的构建,在尝试让谷歌索引该网站时,我似乎遇到了一些奇怪的事情,并希望有人能对此有所了解,因为我的谷歌-fu 没有透露任何信息。

我正在运行的服务器堆栈由以下部分组成:

Debian 7 / Apache 2.2.22 / MySQL 5.5.31 / PHP 5.4.4-14

我遇到的问题是 Google 似乎想要索引一些奇怪的 URL,并且目前它们的排名高于实际的合法页面。我将在这里列出奇怪的:

www.mydomain.com/srv/www/mydomain?srv/www/mydomain
www.mydomain.com/srv/www?srv/www
www.mydomain.com/srv/www?srv/www/index‎

网站管理员工具现在告诉我“这是一个被 robots.txt 阻止的重要页面”,因为我一发现问题,就将一些301 重定向放入htaccess文件中以将这些请求发送到主页并阻止机器人文件中的地址。

另外,我已经向网站管理员工具提交了一个包含所有正确 URL 的 XML 站点地图。

所有网站文件都存储在:

/srv/www/mydomain/public_html/

现在,我认为这与我设置 .htaccess mod-rewrite 规则的方式有关,但我似乎无法理解正在做的事情。它也可能是我的 Apache vhosts 配置。我将包括以下两者:

.htaccess mod-rewrite规则:

<IfModule mod_rewrite.c>
    RewriteEngine on

# Redirect requests for all non-canonical domains
# to same page in www.mydomain.com
    RewriteCond %{HTTP_HOST} .
    RewriteCond %{HTTP_HOST} !^www\.mydomain\.com$
    RewriteRule (.*) http://www.mydomain.com/$1 [R=301,L]


# Remove .php file extension
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}\.php -f
    RewriteRule ^(.*)$ $1.php

# redirect all traffic to index
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ index [L]

# Remove 'index' from URL
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s(.*)/index [NC]
    RewriteRule ^ / [R=301,L]

</IfModule>

阿帕奇虚拟主机:

<VirtualHost *:80>
    ServerAdmin webmaster@mydomain.com
    ServerName mydomain.com
    ServerAlias www.mydomain.com
    DocumentRoot /srv/www/mydomain/public_html/
    ErrorLog /srv/www/mydomain/logs/error.log
    CustomLog /srv/www/mydomain/logs/access.log combined
</VirtualHost>

此外,如果它可能相关,我的 PHP 页面处理是:

# Declare the Page array
$Page = array();

# Get the requested path and trim leading slashes
$Page['Path'] = ltrim($_SERVER['REQUEST_URI'], '/');

# Check for query string
if (strpos($Page['Path'], '?') !== false) {

    # Seperate path and query string
    $Page['Query']  = explode('?', $Page['Path'])['1'];
    $Page['Path']   = explode('?', $Page['Path'])['0'];
}

# Check a path was supplied
if ($Page['Path'] != '') {

    # Select page data from the directory
    $Page['Data'] = SelectData('Directory', 'Path', '=', $Page['Path']);

    # Check a page was returned
    if ($Page['Data'] != null) {

        # switch through allowed page types
        switch ($Page['Data']['Type']) {

            # There are a bunch of switch cases here that
            # Determine what page to serve based on the
            # page type stored in the directory

        }

    # When no page is returned
    } else {

        # 404
        $Page = Build404ErrorPage($Page);
    }

# When no path supplied
} else {

    # Build the Home page
    $Page = BuildHomePage($Page);
}

任何人都可以在这里看到任何会导致这种情况的东西吗?

4

1 回答 1

1

经过大量研究,我得出结论,我的问题是由于谷歌试图在网站完成之前对其进行索引以及一些不完整的页面处理脚本造成的。我的错误是在开发过程中没有阻止所有机器人。

问题的解决方案是这样的:

  1. 将包含所有有效 URL 的xml 站点地图提交给谷歌网站管理员工具

  2. 301 将所有奇怪的 URL 重定向到正确的主页

  3. 使用谷歌网站管理员工具请求删除不正确的网址

  4. 使用robots.txt 文件阻止 googlebot 访问不正确的 URL

  5. 等待 Google 重新抓取该网站并正确为其编制索引。

等待 googlebot 纠正问题是最困难的部分。

于 2014-01-24T02:49:07.430 回答