18function seoFail(
string $message,
int $code): void {
19 fwrite(STDERR,
"FAIL: $message\n");
23$base =
'https://localhost/dbxapp/';
24dbx()->set_system_var(
'dbx_base_url',
$base);
27dbx()->set_system_var(
'dbx_permalink',
'home');
30if (
$web->canonical_home_redirect_target() !==
$base) {
31 seoFail(
'Der Startseitenalias home wird nicht auf die Basis-URL normalisiert.', 1);
35if (
$web->canonical_home_redirect_target() !==
'') {
36 seoFail(
'Schreibende Requests duerfen keinen Startseiten-Redirect erhalten.', 2);
40$_GET = array(
'dbx_modul' =>
'dbxContent',
'dbx_run1' =>
'run');
41if (
$web->canonical_home_redirect_target() !==
'') {
42 seoFail(
'Eine explizite Modulroute darf nicht als Startseitenalias umgedeutet werden.', 3);
45$_GET = array(
'dbx_design' =>
'steal');
46if (
$web->canonical_home_redirect_target() !==
$base) {
47 seoFail(
'Eine reine Darstellungsvariante muss auf die saubere Startseite fuehren.', 4);
50dbx()->set_system_var(
'dbx_permalink',
'produkte');
52if (
$web->canonical_home_redirect_target() !==
'') {
53 seoFail(
'Ein normaler Content-Permalink darf nicht umgeleitet werden.', 5);
56dbx()->set_system_var(
'dbx_lng',
'de');
57dbx()->set_system_var(
'dbx_permalink',
'info-cms');
58if (
$web->content_permalink_redirect_target() !==
$base .
'cms-website') {
59 seoFail(
'Die deutsche Content-Weiterleitung wurde nicht erkannt.', 6);
62dbx()->set_system_var(
'dbx_lng',
'en');
63if (
$web->content_permalink_redirect_target() !==
'') {
64 seoFail(
'Deutsche Content-Weiterleitungen dürfen andere Sprachen nicht verändern.', 7);
67dbx()->set_system_var(
'dbx_lng',
'de');
68$_GET = array(
'dbx_modul' =>
'dbxContent');
69if (
$web->content_permalink_redirect_target() !==
'') {
70 seoFail(
'Explizite Modulrouten dürfen keine Content-Weiterleitung auslösen.', 8);
74$robotsMethod =
new ReflectionMethod(dbxTPL::class,
'effective_robots_meta');
76dbx()->set_system_var(
'dbx_robots',
'index,follow');
78$_GET = array(
'dbx_modul' =>
'dbxContent');
80 seoFail(
'Technische Routen muessen Content-SEO mit noindex,follow ueberstimmen.', 9);
83$_GET = array(
'dbx_edit' =>
'1');
85 seoFail(
'Bearbeitungsrouten muessen noindex,follow erhalten.', 10);
88$_GET = array(
'dbx_do' =>
'delete');
90 seoFail(
'Aktionsrouten muessen noindex,follow erhalten.', 11);
95 seoFail(
'Saubere Content-Routen muessen ihren konfigurierten Robots-Wert behalten.', 12);
98$renderer = new \dbx\dbxContent\dbxContentRenderer();
102 seoFail(
'Die konfigurierte Startseite muss die Basis-URL als Canonical erhalten.', 13);
105 seoFail(
'Normale Inhaltsseiten muessen einen selbstreferenziellen Canonical erhalten.', 14);
110 $root .
'/modules/dbxContent/include/dbxContentSitemap.class.php'
115 || strpos(
$sitemapSource,
'$lngs = array($masterLng)') ===
false) {
116 seoFail(
'Die Sitemap-Regel fuer reine Content-URLs und die Startseite fehlt.', 15);
120if (!preg_match(
'/RewriteRule \\^home\\/\\?\\$ https:\\/\\/dbxapp\\.de\\//',
$htaccess)
121 || strpos(
$htaccess,
'%{HTTPS} !=on') ===
false) {
122 seoFail(
'Die produktive Redirect-Regel fuer /home beziehungsweise HTTPS fehlt.', 16);
127 new RecursiveDirectoryIterator(
$designDir, FilesystemIterator::SKIP_DOTS)
130 if (!
$file->isFile() || strtolower(
$file->getExtension()) !==
'htm') {
133 $html = (string)file_get_contents(
$file->getPathname());
134 if (stripos(
$html,
'<head') ===
false) {
137 if (substr_count(
$html,
'{dbx:head_meta}') !== 1) {
138 seoFail(
'Design-HTML ohne genau einen zentralen Head-Metablock: ' .
$file->getPathname(), 17);
140 if (preg_match(
"/<link\\b[^>]*rel=[\"']canonical[\"']/i",
$html)) {
141 seoFail(
'Canonical darf im Design nicht fest verdrahtet sein: ' .
$file->getPathname(), 18);
if(strpos($sitemapSource, 'collectUserMenuLinks') !==false||strpos($sitemapSource, 'dbxContentHome::masterCid')===false||strpos($sitemapSource, 'isNoindex')===false||strpos($sitemapSource, ' $lngs=array($masterLng)')===false) $htaccess