Zum Inhalt springen

Mediawiki Sitemap erstellen

Aus LHlab Wiki

Um Google, Bing und anderen Suchmaschinen das Indizieren deiner MediaWiki Installation einfacher zumachen, nutzt man eine "Sitemap". Hier eine kurz Anleitung zum erstellen einer MediaWiki Sitemap.

Sitemap generieren

habt ihr MediaWiki direkt auf einem installiert könnt ihr so vorgehen:

# wechselt in euere MediaWiki root Verzeichnis
cd /srv/httpd/vhosts/wiki.vhost.de/htdocs/
# erstellt einen Sitemap Ordner
mkdir sitemap
# Startet die erste Generierung
php maintenance/run.php generateSitemap --skip-redirects --fspath sitemap --server http://wiki.domain.tld --urlpath sitemap/

via Docker Setup sieht es dann so aus:

docker exec -i <MediawikiContainerName> php maintenance/run.php generateSitemap --skip-redirects --fspath sitemap --server http://wiki.domain.tld --urlpath sitemap/

Sitemap automatisch einmal am Tag erstellen

erstellt dazu einfach folgendes Script:

/usr/local/sbin/wikisitemap.sh

#!/bin/bash
cd /srv/httpd/vhosts/wiki.vhost.de/htdocs/
php maintenance/run.php generateSitemap --skip-redirects --fspath sitemap --server http://wiki.domain.tld --urlpath sitemap/

gebt ihm das execute Recht und verlinkt es in den cron.daily

chmod +x /usr/local/sbin/wikisitemap.sh
ln -s /usr/local/sbin/wikisitemap.sh /etc/cron.daily/wikisitemap

oder via Docker Setup einfach einen cronjob mit dem Aufruf anlegen: /etc/cron.d/wikisitemap

#
# Regular cron job for the Wiki Sitemap generation
#
20 */12 * * *      root   docker exec -i <MediawikiContainerName> php maintenance/run.php generateSitemap --skip-redirects --fspath sitemap --server http://wiki.domain.tld --urlpath sitemap/

sitemap.xml Ort publizieren

damit Google und Co. nun auch wissen, das unsere sitemap.xml unter /sitemap liegt müssen wir dies noch via redirect und auch per robots.txt konfigurieren.

legt dafür einfach entweder im vHost selbst oder in der .htaccess folgendes an:

Redirect 301 /sitemap.xml /sitemap/sitemap-index-wiki.xml

in der robots.txt

Sitemap: https://www.example.com/sitemap/sitemap-index-wiki.xml

Problem bei php suhosin Verwendung

Wenn man PHP mit dem suhosin Modul nutzt kommt es zu folgender Fehlermeldung, da suhosin es verbietet Skripten das Memory Limit anzupassen:

ALERT - script tried to disable memory_limit by setting it to a negative value -1 bytes which is not allowed (attacker 'REMOTE_ADDR not set', file 'unknown') 

Um den Fehler zu eliminieren, muss man den memory-limit Wert von max nach default in der maintenance/Maintenance.php anpassen:
maintenance/Maintenance.php

'memory-limit', 'default'
        public function memoryLimit() {
                $limit = $this->getOption( 'memory-limit', 'default' );
                $limit = trim( $limit, "\" '" ); // trim quotes in case someone misunderstood
                return $limit;
        }

Fehler nach Upgrade auf MariaDB und Debian Stretch

ich bekam nach dem Upgrade auf Debian Stretch beim Generieren folgende Fehlermeldung:

php maintenance/generateSitemap.php
0 ()
	/srv/httpd/vhosts/www.laub-home.de/htdocs/sitemap-wikidb-NS_0-0.xml.gz
[40c2e64c921d3f448fac4a4d] [no req]   Wikimedia\Rdbms\DBQueryError from line 1075 of /srv/httpd/vhosts/www.laub-home.de/htdocs/includes/libs/rdbms/database/Database.php: A database query error has occurred. Did you forget to run your application's database schema updater after upgrading? 
Query: SELECT  user_name,up_value  FROM `user` LEFT JOIN `user_properties` ON ((user_id = up_user) AND up_property = 'gender')   WHERE user_name = '𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁𨮁喃'  
Function: GenderCache::doQuery/MediaWikiTitleCodec::getNamespaceName
Error: 1300 Invalid utf8 character string: 'F0A8AE' (localhost)

Backtrace:
#0 /srv/httpd/vhosts/www.laub-home.de/htdocs/includes/libs/rdbms/database/Database.php(933): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean)
#1 /srv/httpd/vhosts/www.laub-home.de/htdocs/includes/libs/rdbms/database/Database.php(1269): Wikimedia\Rdbms\Database->query(string, string)
#2 /srv/httpd/vhosts/www.laub-home.de/htdocs/includes/cache/GenderCache.php(171): Wikimedia\Rdbms\Database->select(array, array, array, string, array, array)
#3 /srv/httpd/vhosts/www.laub-home.de/htdocs/includes/cache/GenderCache.php(81): GenderCache->doQuery(string, string)
#4 /srv/httpd/vhosts/www.laub-home.de/htdocs/includes/title/MediaWikiTitleCodec.php(91): GenderCache->getGenderOf(string, string)
#5 /srv/httpd/vhosts/www.laub-home.de/htdocs/includes/Title.php(995): MediaWikiTitleCodec->getNamespaceName(integer, string)
#6 /srv/httpd/vhosts/www.laub-home.de/htdocs/includes/Title.php(1428): Title->getNsText()
#7 /srv/httpd/vhosts/www.laub-home.de/htdocs/includes/Title.php(1440): Title->prefix(string)
#8 /srv/httpd/vhosts/www.laub-home.de/htdocs/includes/Title.php(1753): Title->getPrefixedDBkey()
#9 /srv/httpd/vhosts/www.laub-home.de/htdocs/includes/Title.php(1882): Title->getLocalURL(string)
#10 /srv/httpd/vhosts/www.laub-home.de/htdocs/maintenance/generateSitemap.php(554): Title->getCanonicalURL()
#11 /srv/httpd/vhosts/www.laub-home.de/htdocs/maintenance/generateSitemap.php(331): GenerateSitemap->generateLimit(string)
#12 /srv/httpd/vhosts/www.laub-home.de/htdocs/maintenance/generateSitemap.php(203): GenerateSitemap->main()
#13 /srv/httpd/vhosts/www.laub-home.de/htdocs/maintenance/doMaintenance.php(111): GenerateSitemap->execute()
#14 /srv/httpd/vhosts/www.laub-home.de/htdocs/maintenance/generateSitemap.php(564): require_once(string)
#15 {main}

Dies konnte wie hier beschrieben durch ein ändern der USER Tabelle gelöst werden:

mysql -uroot
ALTER TABLE user CONVERT TO CHARACTER SET binary;

Quellen