xref: /plugin/combo/ComboStrap/Robots.php (revision 5b0932ef22f2e064613880e6bde517ef4aa415b2)
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