Erstellen Sie einen Google-Index mit über 90.000 Nutzerprofilen

7

Ich habe eine große Anzahl von Benutzerprofilen in diesem Schema gehostet https://example.com/stats.php?player=name(Es ist nicht die schönste URL, .htaccessverlangsamt aber meine Website dramatisch und ich verstehe nicht apache2.conf). Wie kann ich Google dazu bringen, alle diese Seiten dynamisch zu indizieren, ohne alle 90.000 Konten eingeben zu müssen sitemap.xml?

Dalton Edwards
quelle
@ w3d. Während Sie so bearbeiten, sollten Sie auch RFC 2606-Domänennamen verwenden.
TRiG
2
Achtung: Das oberste Element <urlset>ist ein Container für einen Satz von bis zu 50.000 Dokumentelementen . Daher sollten Sie mindestens zwei Sitemaps einreichen, dh die Datenbankausgabe entsprechend LIMITaufteilen ( in der SQL-Abfrage verwenden)
Hagen von Eitzen

Antworten:

12

Sitemaps können genauso dynamisch sein wie Webseiten. Lassen Sie einfach ein PHP-Skript diese Namen aus der Datenbank holen und eine Schleife erstellen, um das XML für jeden Namen wiederzugeben. Stellen Sie außerdem sicher, dass Sie den richtigen Inhaltstyp für Ihr XML ausgeben. Das ist es.

Der folgende Code ist ein grundlegendes Skript zum Generieren einer dynamischen XML-Sitemap. Bitte nicht, dies ist nur ein Beispiel, das Sie oder jeden, der eine dynamische Sitemap erstellen möchte, in die richtige Richtung lenken soll. Hier sollte es wirklich eine bessere Fehlerprüfung und -behandlung geben.

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = "SELECT name FROM users";
if ($result = mysqli_query($link, $query)) {
    echo header("Content-type: text/xml");
?>
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<?php
    $date = date('Y-m-d');
    while ($row = mysqli_fetch_assoc($result)) {
?>
     <url>
      <loc>https://domain.com/stats.php?player=<?php echo $row['name']; ?></loc>
      <lastmod><?php echo $date; ?></lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
   </url>
<?php       
    }
    mysqli_free_result($result);
?>
</urlset> 
<?php   
}
mysqli_close($link);
?>

Beachten Sie, dass eine einzelne Sitemap möglicherweise nur 50.000 Datensätze enthält, sodass dieses Skript seine Grenzen hat. Sie sollten jedoch in der Lage sein, es so zu ändern, dass es mehrere Sitemaps verarbeitet, sodass Sie über das Limit von 50.000 hinauswachsen können.

John Conde
quelle
Ich denke, ich rufe an, dass die Zuweisung der gleichen Priorität zu allem einen Fehler in den Google Webmaster-Tools auslöst. Dies kann jedoch leicht behoben werden, indem beispielsweise die Startseite Ihrer Website mit Priorität 1 hinzugefügt wird.
Hagen von Eitzen
@HagenvonEitzen Um ehrlich zu sein, würde ich dieses Feld komplett weglassen.
John Conde
1
Wenn Sie nicht nachverfolgen, wann die Profile zuletzt in Ihrer Datenbank geändert wurden, würde ich dringend empfehlen, das <lastmod>Feld wegzulassen, anstatt ein Dummy-Datum wie in diesem Beispielcode zu verwenden. Bestenfalls wird es keinen Unterschied geben; Im schlimmsten Fall kann das Lügen darüber, wann Ihre Seiten zuletzt geändert wurden, dazu führen, dass Crawler Änderungen verpassen (wenn das Datum zu alt ist) oder Zeit damit verschwenden, nicht geänderte Seiten ineffizient neu zu zeichnen (wenn es zu neu ist). Die beste Option wäre natürlich, einen Zeitstempel für die letzte Änderung für jedes Profil in der Datenbank zu speichern und in der Sitemap zu melden.
Ilmari Karonen
3

Eine Sitemap hilft normalerweise nicht dabei, Seiten zu indizieren. Siehe Das Sitemap-Paradoxon .

So indizieren Sie Seiten:

  1. Sie müssen von jeder anderen Seite oder vorzugsweise von mehreren anderen Seiten aus auf jede Seite verlinken.
  2. Fügen Sie jedem Profil genügend eindeutigen Inhalt hinzu, damit Google die Seiten nicht als doppelt anzeigt.
  3. Bieten Sie jedem, der über die Google-Suche auf die Seite kommt, eine gute Zielseitenerfahrung. Wenn Google die Seite indiziert, aber dann feststellt, dass niemand darauf klickt oder jeder, der darauf klickt, zurückkehrt, um auf ein anderes Ergebnis zu klicken, wird die Rangfolge verringert oder der Index wird ziemlich schnell verlassen.

Im Allgemeinen sind Benutzerprofilseiten keine großartigen Kandidatenseiten für die Aufnahme in den Google-Suchindex. Sie haben normalerweise nicht viel Inhalt und sind auch keine guten Zielseiten.

Stephen Ostermiller
quelle
2
Tatsächlich werden Seiten in der Sitemap, die nicht direkt verknüpft sind, gesponnen: Ich habe ein PHP-Skript als Wrapper um HTML-Dateien in einer Verzeichnisstruktur und eine dynamische Sitemap hat den Verzeichnisbaum in umschlossene URLs übersetzt. Ein "experimentelles" Verzeichnis wurde im Wrapper-Skript ausdrücklich ausgeschlossen, erschien jedoch einige Zeit später indiziert. Erst als ich mit robot.txt blockierte und all diese Warnungen über blockierte Links in der Sitemap erhielt, bemerkte ich, dass das experimentelle Verzeichnis in der Sitemap enthalten war ...
Hagen von Eitzen
Elemente in einer Sitemap werden zwar gecrawlt, aber es ist nicht sehr wahrscheinlich, dass sie indiziert werden. Selbst wenn sie indiziert werden, werden sie nicht besonders gut rangieren.
Stephen Ostermiller
1
Mit "nicht indiziert" meinen Sie "wird auch bei einer Suche nach nicht gefunden player name site:example.com"? Oder meinst du nur, dass du nicht viel organischen Suchverkehr aus sexy, hochvolumigen Begriffen ziehen wirst? ;-)
Steve Jessop