Mediawiki Sitemap erstellen

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;