Google Sitemap Modul XML

lux
Beiträge: 33
Registriert: Di 12. Okt 2004, 14:11
Wohnort: .at
Kontaktdaten:

Google Sitemap Modul XML

Beitrag von lux » So 5. Jun 2005, 19:57

Da Google einen neuen Sitemapservice zur besseren Indizierung der Webseiten herausgebracht hat, hab ich euch ein neues Modul entwickelt wo ihr direkt aus dem Contenido so einene XML Sitemap erstellen könnt.

1. Anmelden beim Google Sitemaps Service unter: https://www.google.com/webmasters/sitemaps/login

bis ihr die Anmeldebstätigung von Google erhaltet könnt ihr das neue Modul installieren.

2. neues Modul anlegen und Input und Output einfügen
3. neues Layout (blanko) mit nur CMS_CONTAINER[1] ohne weitere HTML oder sonstigen Tags erstellen
4. neues Template erstellen mit dem neuen Modul und Layout
5. neue Kategorie erstellen und das neue Template zuweisen
bei Link dieser XML Seite: z.b.: http://www.dashandwerk.info/cms/cms9/cm ... ?idcat=698
bei Domainpfad zur front_content.php: z.b.: http://www.dashandwerk.info/cms/cms9/cms/

Diese zwei Pfadangaben müssen richtig sein!!!

6. nun einen neuen Artikel in die neue Kategorie setzen und als Startartikel definieren

Jetzt den Link dieser XML Seite im IExplorer aufrufen und testen

Diesen Link gebt ihr nun Google bekannt und ein paar Stunden später seit ihr im Google vertreten

Wie das ganze fertig aussieht seht ihr unter: http://www.dashandwerk.info/cms/cms9/cm ... ?idcat=698

Fragen, Wünsche, Anregungen hier bitte posten

Und hier ist der Code:

Input:

Code: Alles auswählen

/**
* Google Sitemaps Ausgabe als XML - 05.06.2005
*
* INPUT
*
* Author Luxmedia Österreich
* Copyright www.luxmedia.at
*/

// selected category
$selected = "CMS_VALUE[0]";

echo  "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">\n
        <tr>
          <td>Link dieser XML Seite:</td>
          <td><input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\"></td>
        </tr>
<tr>
          <td>Domainpfad zur front_content.php:</td>
          <td><input type=\"text\" name=\"CMS_VAR[2]\" value=\"CMS_VALUE[2]\"></td>
        </tr>
				
      </table>";

Output:

Code: Alles auswählen


<?php

/**
* Google Sitemaps Ausgabe als XML - 05.06.2005
*
* OUTPUT
*
* Author Luxmedia Österreich
* Copyright www.luxmedia.at
*/


{

	$xml_titel = "CMS_VALUE[1]";
                $xml_link = "CMS_VALUE[2]";
	
	// Header ausgeben
	header("Content-type: text/xml");
	print '<?xml version="1.0" encoding="UTF-8"?>
	        <urlset xmlns="'.$xml_titel.'">';


	// select all articles in category widthout start article
	$query = "SELECT idart FROM ".$cfg["tab"]["art_lang"]."";

	
	// execute query
	$db->query($query);
	
	unset($linkID);
	
	// get id's of sub articles
	while ($db->next_record()) {
	  $linkID[] = $db->f("idart");
	} // end while
	
	// loop through subarticles
	if (is_array($linkID)) {
	
		foreach ($linkID as $key => $value) {
	
					
			// link
			$link = $xml_link."front_content.php?idart=$linkID[$key]";
			print "<url>\n";
			print "<loc>\n".htmlspecialchars($link)."\n</loc>\n";
                                                print "</url>\n";
			  
	
		} // end foreach

	
		
	} // end if (is_array)
	
	print '</urlset>';

}

?>

Viel Spass beim Ausprobieren

LUX

http://www.luxmedia.at
Das Leben besteht aus Nullen und Einsen!

emergence
Beiträge: 10644
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Re: Google Sitemap Modul XML

Beitrag von emergence » Mo 6. Jun 2005, 08:35

lux hat geschrieben:Diesen Link gebt ihr nun Google bekannt und ein paar Stunden später seit ihr im Google vertreten
geht das wirklich so schnell ?
na wie auch immer, idee vom modul ist sehr gut...
*** make your own tools (wishlist :: thx)

lux
Beiträge: 33
Registriert: Di 12. Okt 2004, 14:11
Wohnort: .at
Kontaktdaten:

Geht relativ schnell

Beitrag von lux » Mo 6. Jun 2005, 08:42

Geht relativ schnell - Die ersten Seiten hat er nach 4 Stunden gelistet! bin ja mal gespannt wie lang es bei 3500 Seiten geht! 8)
Das Leben besteht aus Nullen und Einsen!

micattack
Beiträge: 28
Registriert: Fr 14. Nov 2003, 13:31
Kontaktdaten:

Beitrag von micattack » Di 7. Jun 2005, 14:11

So, habe mir das mal angeschaut und etwas modifiziert. Bin vielleicht nicht so der spezialist, aber sollte so besser sein.

Änderungen:
  • Das Select liefert auch das Last Modified Feld zurück (letzte Änderung) und durchsucht nur Artikel die Online sind
    Die Letzte Änderung wird bei jeder URL im XML mit ausgegeben, damit google weiß, ob sich die Seite geändert hat
    Ich habe außerdem die Schleife etwas vereinfacht (?) da mit das mit dem foreach zu kompliziert erschien, und bei mir auch so funktioniert => Feedback bitte
    ACHTUNG: ich habe front_content.php bei mir durch index.php ersetzt !
Offene To-Do's
  • url-redirects sollte man gleich auf die richtige URL schicken, da die sowieso in der Tabelle drinnen stehen (entweder geschicktes SQL oder nachher händisch schauen, ob eine redirect-url existiert
    U.U. dann noch Dupletten abgleichen.
    Eine Möglichkeit finden, Priority bzw. Update Frequenze (Daily, Weekly, etc) aus den Contenido Tabellen zu lesen.
Meine Sitemap: http://www.mpwi.at/index.php?idcat=73

Ausgabe:

Code: Alles auswählen

Neuerer Code weiter unten...
Zuletzt geändert von micattack am Di 14. Jun 2005, 10:35, insgesamt 1-mal geändert.

lux
Beiträge: 33
Registriert: Di 12. Okt 2004, 14:11
Wohnort: .at
Kontaktdaten:

Man bedenke

Beitrag von lux » Di 7. Jun 2005, 14:49

Die Lösung ist Sicher eleganter als meine... :oops:
Eine Möglichkeit finden, Priority bzw. Update Frequenze (Daily, Weekly, etc) aus den Contenido Tabellen zu lesen
Dann müsste man eine Speicherstatistik führen, daraus ein Durchschnitt errechnen und dieser müsste dann den einzelnen Kategorien zugeordnet werden...

Oder man hinterlegt die jeweilige Kategorie bei jedem Artikel manuell...

und die dritte Variante ist das man gleich im Modul eine Kategorie angibt!
was die einfachste und sicher beste Lösung ist (bei Daily würde Google täglich vorbei schauen...)
--> aber dann besteht wieder der Konflikt mit dem Datum
ein Lösung wäre vielleicht das man nicht die Timestamp vom Artikel nimmt sondern diese Automatisch bei der Abfrage von Server generiert.

weitere Fragen zum Thema werden gerne beantwortet...?!?

lux

http://www.luxmedia.at
Das Leben besteht aus Nullen und Einsen!

micattack
Beiträge: 28
Registriert: Fr 14. Nov 2003, 13:31
Kontaktdaten:

Re: Man bedenke

Beitrag von micattack » Di 7. Jun 2005, 15:04

lux hat geschrieben:Die Lösung ist Sicher eleganter als meine...
Häh? Ist doch immer noch "deine", nur ein bißchen angepaßt.
Dann müsste man eine Speicherstatistik führen, daraus ein Durchschnitt errechnen und dieser müsste dann den einzelnen Kategorien zugeordnet werden...

Oder man hinterlegt die jeweilige Kategorie bei jedem Artikel manuell...

und die dritte Variante ist das man gleich im Modul eine Kategorie angibt!
was die einfachste und sicher beste Lösung ist (bei Daily würde Google täglich vorbei schauen...)
Ich denke das wir das zu weit denken. wenn schon mal lastmod immer stimmt (und das muß es ja) weiß google sowieso, ob er die Seite nochmal anschauen muß. vielleicht sollte man als Option (Input) eine Combo Box anbieten und je nach Wunsch Daily/Weekly/Monthly für alle selektieren (damit eine Website mit wenigen Änderungen auch von google nur monthly belästigt wird, und die mit viel Geltungsdrank eben Täglich upgedatet werden), da gebe ich denn Ball zurück an dich.

Also weiter To-Dos:
  • Input-Plugin mit Select für Update-Frequenz
    URL der Sitemap und der Domain automatisch aus Servervariablen lesen, dadurch leichter für Newbies zum Einrichten (kann ich "programmieren")

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Di 7. Jun 2005, 15:43

URL der Sitemap und der Domain automatisch aus Servervariablen lesen, dadurch leichter für Newbies zum Einrichten (kann ich "programmieren")
Will euch ja nicht aufhalten, aber

bei Domainpfad zur front_content.php: $cfgClient[$client]["path"]["htmlpath"]
bei Link dieser XML Seite: $cfgClient[$client]["path"]["htmlpath"]."/front_content.php?idcat=".$idcat

Man müsste auch $cfgClient[$client]["path"]["htmlpath"]."/front_content.php?idcatart=".$idcatart oder $cfgClient[$client]["path"]["htmlpath"]."/front_content.php?idart=".$idart nutzen können, dann muss es nicht unbedingt der Startartikel sein.

Alternativ gibt es noch $auth-url();, aber da könnte auf einigen Systemen die Session mit dranhängen, denke ich.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Dakota
Beiträge: 22
Registriert: Mi 27. Okt 2004, 09:24
Kontaktdaten:

Beitrag von Dakota » Di 7. Jun 2005, 17:45

Hallo,

erstmal Danke für die Idee und Umsetung, habe das Modul jetzt installiert und die Ergebnisliste sieht auch so aus wie Eure Beispiele.

siehe hier http://www.quarterundpainthorses.de/fro ... p?idcat=50

ABER
im Gegensatz zu Euren Beispielen liefern die URLs der Liste mit idart am Ende in den Browser kopiert nur eine Loginseite, fehlt da nicht noch idcat etc?

Zur Erklärung: gemietetes contenido 4.4.4, nur Zugriff auf das contenido nichts was darunter liegt.

Danke
Manfred

alexd
Beiträge: 33
Registriert: Mi 29. Dez 2004, 14:56
Kontaktdaten:

Google nimmt die Liste nicht an

Beitrag von alexd » Do 9. Jun 2005, 07:51

Habe mal eine Frage,

bei mir ist die XML - Liste soweit ok, Google nimmt diese aber nicht an
(Fehlerhafter Aufbau). Also ich kann keinen finden und probiere das jetzt nur mal mit den Links, ohne lastmod.

Die Xml Datei
[url]http://www.ecopact.de/front_content.php?idcat=188[/url]

Ich verwende die idcatart.

Wäre dankbar, wenn jemand wüßte, warum Google meine Sitemap nicht nimmt.

Alex

micattack
Beiträge: 28
Registriert: Fr 14. Nov 2003, 13:31
Kontaktdaten:

Re: Google nimmt die Liste nicht an

Beitrag von micattack » Do 9. Jun 2005, 11:03

alexd hat geschrieben:Habe mal eine Frage,

bei mir ist die XML - Liste soweit ok, Google nimmt diese aber nicht an
(Fehlerhafter Aufbau). Also ich kann keinen finden und probiere das jetzt nur mal mit den Links, ohne lastmod.

Die Xml Datei
http://www.ecopact.de/front_content.php?idcat=188
Also außer dem Zusätzlichen Space beim urlset attribut oben ( ....idcat=188 " ) fällt mir nichts auf.
Vgl. das nochmal mit http://www.partnerhund.com/index.php?idcat=101

Bei der lastmod-Modifikation habe ich auch den Source etwas schöner eingerückt, aber das ist es wohl auch nicht.

Ciao

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 9. Jun 2005, 11:53

ABER
im Gegensatz zu Euren Beispielen liefern die URLs der Liste mit idart am Ende in den Browser kopiert nur eine Loginseite, fehlt da nicht noch idcat etc?

Zur Erklärung: gemietetes contenido 4.4.4, nur Zugriff auf das contenido nichts was darunter liegt.
Wenn ich mich dunkel richtig erinnere, reicht in V4.4.4 nur die idart nicht aus - da benötigt man noch die idcat. Aber die idcatart würde reichen, ab V4.4.5 reicht auch idart.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

micattack
Beiträge: 28
Registriert: Fr 14. Nov 2003, 13:31
Kontaktdaten:

Neue Version

Beitrag von micattack » Do 9. Jun 2005, 14:48

Was haltet ihr davon. Skriptname wird jetzt nach Forums-Hinweis automatisch gesucht.
Sonstige Änderungen:
  • PHP Skript Name wird erfragt (index.php/front_content.php)
    Soll das letzte Änderungsdatum eingetragen werden (ja/nein)
    Soll die Änderungshäufigkeit für alle Links gesetzt werden (nein/hourly/daily...)
INPUT

Code: Alles auswählen

/**
* Google Sitemaps Ausgabe als XML - 05.06.2005
*
* INPUT
*
* Author Luxmedia Österreich
* Copyright www.luxmedia.at
*
* Angepasst durch micattack@gmx.net
*  2005-06-09
*  - Abfrage des Skriptnames
*  - Einbindung von lastmod je nach Wunsch
*  - changefreq
*/

echo "Mehr Info &uuml;ber Google Sitemaps <a href=\"https://www.google.com/webmasters/sitemaps/docs/de/protocol.html\">hier</a>\n";

// selected category
$selected = "CMS_VALUE[0]";
echo  "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">\n
        <tr>
          <td>cms php skript:</td><td>";
echo "<select name=\"CMS_VAR[0]\">";
echo "<option value=\"front_content.php\">front_content.php</option>";
echo "<option value=\"index.php\">index.php</option>";
echo "</select></td>";

echo "</tr><tr><td>Letztes &Auml;nderungsdatum verwenden:</td><td>";
echo "<select name=\"CMS_VAR[1]\">";
echo "<option value=\"1\" selected=\"selected\">Ja</option>";
echo "<option value=\"0\">Nein</option>";
echo "</select></td>";

echo "</tr><tr><td>&Auml;nderungsh&auml;ufigkeit aller Seiten:</td><td>";
echo "<select name=\"CMS_VAR[2]\">";
echo "<option value=\"0\" selected=\"selected\">-- Nicht setzen --</option>\n";
echo "<option value=\"always\">Immer</option>\n";
echo "<option value=\"hourly\">St&uuml;ndlich</option>\n";
echo "<option value=\"daily\">T&auml;glich</option>\n";
echo "<option value=\"weekly\">W&ouml;chentlich</option>\n";
echo "<option value=\"monthly\">Monatlich</option>\n";
echo "<option value=\"yearly\">J&auml;hrlich</option>\n";
echo "<option value=\"never\">Niemals</option>\n";
echo "</select></td>";

echo "</tr>            
        </table>";
Output

Code: Alles auswählen

<?php

/**
* Google Sitemaps Ausgabe als XML - 05.06.2005
*
* OUTPUT
*
* Author Luxmedia Österreich
* Copyright www.luxmedia.at
*
* Angepasst durch micattack@gmx.net
*  2005-06-09
* - Nur Artikel die Online sind
* - lastmod, changefreq, Skriptname aus INPUT
* - lastmod Datumsformat iso8601
*/

function iso8601_date($time) {
   $tzd = date('O',$time);
   $tzd = substr(chunk_split($tzd, 3, ':'),0,6);
   $date = date('Y-m-d\TH:i:s', $time) . $tzd;
   return $date; 
}


{

/*   $xml_titel = "CMS_VALUE[1]";
   $xml_link = "CMS_VALUE[2]"; */                
   $xml_titel = $cfgClient[$client]["path"]["htmlpath"]."/CMS_VALUE[0]?idcat=".$idcat;
   $xml_link =  $cfgClient[$client]["path"]["htmlpath"];
   
   
   // Header ausgeben
   header("Content-type: text/xml");
   print '<?xml version="1.0" encoding="UTF-8"?>
           <urlset xmlns="'.$xml_titel.'">'. "\n\n";


   // select all articles in category widthout start article
   $query = "SELECT idart, UNIX_TIMESTAMP(lastmodified) as lastmod FROM ".$cfg["tab"]["art_lang"]." where  online='1'";

   
   // execute query
   $db->query($query);
   
   
   // get id's of sub articles
   while ($db->next_record()) {
        $linkid = $db->f("idart");
        $lastmod =   iso8601_date( $db->f("lastmod") ); 
         // link
         $link = $xml_link. "CMS_VALUE[0]?idart=$linkid";
         print "<url>\n";
         print "   <loc>".htmlspecialchars($link)."</loc>\n";
         if(CMS_VALUE[1])
          { print "   <lastmod>". $lastmod."</lastmod>\n"; }
         if(CMS_VALUE[2])
          { print "   <changefreq>CMS_VALUE[2]</changefreq>\n"; }
         print "</url>\n\n"; 
   
   } // end while
       
   
   print '</urlset>';

}

?>

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 9. Jun 2005, 18:41

Du solltest die CMS-Variablen-Werte in Variablen speichern und ggf. mit sinnigen Default belegen, falls jemand die Konfiguration vergisst oder etwas schief geht.

E.g.

Code: Alles auswählen

$link = "CMS_VALUE[0]";
if ($link == "")
   $link = "front_content.php";
Natürlich auch für CMS_VALUE[1 und 2]. Zumindest sollten die Variablen immer in Anführungszeichen stehen, z.B. if ("CMS_VALUE[1]") da sie direkt ersetzt werden (-> if (1) oder if () ...).

Aber ansonsten schick.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Steffen44
Beiträge: 134
Registriert: So 12. Dez 2004, 12:18
Kontaktdaten:

Beitrag von Steffen44 » So 12. Jun 2005, 15:56

Frage : Listet dieses Script auch Kategorion auf die nicht "Online" sind als absichtlich ausgeschaltet wurden ?


Danke und Gruß
Steffen
Super neues Forum **freu** jetzt geht auch die E-Mail Benachrichtigung für Freenet Acounts !

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » So 12. Jun 2005, 16:36

Artikel, die nicht online sind, werden nicht gelistet. Es werden nur Artikel gelistet, die online sind; auch, wenn sie sich in einer Kategorie befinden, die nicht online ist.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

Gesperrt