1*5b0932efSgerardnico<?php 2*5b0932efSgerardnico 3*5b0932efSgerardniconamespace ComboStrap; 4*5b0932efSgerardnico 5*5b0932efSgerardnicouse ComboStrap\Web\Url; 6*5b0932efSgerardnico 7*5b0932efSgerardnicoclass Robots 8*5b0932efSgerardnico{ 9*5b0932efSgerardnico 10*5b0932efSgerardnico const INDEX_DELAY = 'indexdelay'; 11*5b0932efSgerardnico 12*5b0932efSgerardnico /** 13*5b0932efSgerardnico * @throws ExceptionNotEnabled - if the page can be indexed 14*5b0932efSgerardnico */ 15*5b0932efSgerardnico public static function canBeIndexedAndGetFollowValue(MarkupPath $page, ExecutionContext $executionContext): string 16*5b0932efSgerardnico { 17*5b0932efSgerardnico 18*5b0932efSgerardnico $action = $executionContext->getExecutingAction(); 19*5b0932efSgerardnico if ($action !== ExecutionContext::SHOW_ACTION) { 20*5b0932efSgerardnico return "nofollow"; 21*5b0932efSgerardnico } 22*5b0932efSgerardnico 23*5b0932efSgerardnico /** 24*5b0932efSgerardnico * No indexing for slot page 25*5b0932efSgerardnico */ 26*5b0932efSgerardnico if ($page->isSlot()) { 27*5b0932efSgerardnico return "follow"; 28*5b0932efSgerardnico } 29*5b0932efSgerardnico 30*5b0932efSgerardnico /** 31*5b0932efSgerardnico * Resolution of the Google Search Console Issue 32*5b0932efSgerardnico * `Alternative page with proper canonical tag` 33*5b0932efSgerardnico * when Google crawls URl with functional Query String such as 34*5b0932efSgerardnico * 35*5b0932efSgerardnico * https://datacadamia.com/lang/java/comment?redirectId=java:comment&redirectOrigin=canonical 36*5b0932efSgerardnico * https://datacadamia.com/os/windows/pathext?referer=https://gerardnico.com/os/windows/pathext 37*5b0932efSgerardnico * 38*5b0932efSgerardnico * TODO: Ultimately, we should use a script that returns only the good url 39*5b0932efSgerardnico * doing a redirect with a query to the resource is not Search Engine friendly 40*5b0932efSgerardnico */ 41*5b0932efSgerardnico $queryProperties = Url::createFromGetOrPostGlobalVariable()->getQueryProperties(); 42*5b0932efSgerardnico foreach ($queryProperties as $key => $value) { 43*5b0932efSgerardnico if ($key !== DokuwikiId::DOKUWIKI_ID_ATTRIBUTE) { 44*5b0932efSgerardnico // follow but no index as we return a value 45*5b0932efSgerardnico return "follow"; 46*5b0932efSgerardnico } 47*5b0932efSgerardnico } 48*5b0932efSgerardnico 49*5b0932efSgerardnico if ($page->isLowQualityPage() && LowQualityPage::isProtectionEnabled()) { 50*5b0932efSgerardnico if (LowQualityPage::getLowQualityProtectionMode() !== PageProtection::CONF_VALUE_ACL) { 51*5b0932efSgerardnico return "follow"; 52*5b0932efSgerardnico } 53*5b0932efSgerardnico } 54*5b0932efSgerardnico if ($page->isLatePublication() && PagePublicationDate::isLatePublicationProtectionEnabled()) { 55*5b0932efSgerardnico if (PagePublicationDate::getLatePublicationProtectionMode() == PageProtection::CONF_VALUE_ACL) { 56*5b0932efSgerardnico return "nofollow"; 57*5b0932efSgerardnico } else { 58*5b0932efSgerardnico return "follow"; 59*5b0932efSgerardnico } 60*5b0932efSgerardnico } 61*5b0932efSgerardnico throw new ExceptionNotEnabled(); 62*5b0932efSgerardnico } 63*5b0932efSgerardnico} 64