Hi,

Naar aanleiding van een eerder aangemaakt topic heb ik op mijn website een 404 pagina aangemaakt.
Ik heb dat op de volgende manier gedaan:
Ik heb een .htaccess bestand gemaakt met de volgende code:

ErrorDocument 404 /404.php
ErrorDocument 403 /403.php

En ik heb uiteraard ook de 404.php en 403.php in de root geplaatst.

Ik heb nu nog één vraag.
Bestaat er ook een ErrorDocument of een andere regel voor url's die eindigen met een slash?
Ik wil dit graag toepassen mdat google search console/ dekking pagina's uitsluit voor indexering. Al die pagina's die worden uitgesloten eindigen met een slash.
Dit zijn voorbeelden van goede URL's:
https://background-tiles.com/overview/multi-colors.php
https://background-tiles.com/overview/purple.php
of:
https://background-tiles.com/overview/mixed-colors/1128.php
https://background-tiles.com/overview/purple/1045.php

En dit zijn voorbeelden van URL's die niet bestaan maar die google wel probeerd te indexeren:
https://background-tiles.com/overview/grey/black.php
https://background-tiles.com/overview/blue/purple.php
of:
https://background-tiles.com/overview/5031.php
https://background-tiles.com/overview/1120.php
of met slash erachter:
https://background-tiles.com/overview/mixed-colors/1128.php/
https://background-tiles.com/overview/purple/1045.php/


De foute URL's lijken erg op de goede URL's en ik snap in principe ook wel als een pagina niet bestaat en dat ie dan wordt uitgeloten dat dat niet erg is. Maar toch is het vreemd dat die problemen die ineens zijn ontstaan gepaard gaan met het kelderen van de vindbaarheid van mijn website in google zoekresultaten.
Dat is in principe niet zo vreemd want als je zo'n foute URL aanroept gaat je pagina toch door de vleesmolen (m.a.w. levert een niet-kloppend / niet-werkend / gebrekkig werkend HTML-document op?). Daarnaast is dit dus in zekere zin "dubbele content". Beide zaken leveren je geen waardering op bij zoekmachines.

Websites moeten wat dat betreft redelijk feilloos zijn anders kunnen zoekmachines hier niet goed doorheen crawlen. Dan is het in zekere zin ook logisch dat als je site kuren vertoont dat deze sowieso niet bovenaan staat in de zoekresultaten. Nu spelen er natuurlijk ook andere zaken maar een correct werkende site is zeker een pré.

Dat kan van alles zijn, mogelijk/voornamelijk bots. Waarom zou een bezoeker zelf dingen in gaan typen die afwijken van de reeds aanwezige navigatie en daarmee bewust van de getreden paden af gaan? En als dit dus statistieken of de werking van hulprogramma's vertroebelt dan zul je dus echt een mechanisme moeten hebben die een onjuiste aanroep echt afkeurt. De meest ondubbelzinnig manier om dit te doen is deze rechtstreeks een 404 status geven (door een 404 pagina op te hoesten met bijbehorende 404 status). Als Google die pagina's dan nogmaals inspecteert dan zal deze zien dat de pagina niet (meer) bestaat en zal daar dan verder niet meer naar omkijken. Op deze manier wordt dit probleem ook automatisch opgeschoond. De makkelijkste manier is (wat mij betreft nog steeds) een heel strict beleid: een aanroep is correct of incorrect. Er is geen grijs gebied waarbij een aanroep soms na enige aanpassing wellicht toch juist is.


En dat is waarom ik nou juist graag die slash wil wegwerken.
Ik heb inmiddels naar aanleiding van mijn vorige topic een 404 en een 403 pagina aangemaakt. Nu wil ik alleen nog graag de URL's waar een slash achter zit doorverwijzen naar een 404 pagina of doorverwijzen naar dezelfde URL maar dan zonder slash.
Hm, misschien een hele simpele hack (die ook wat tests vereist) maar als je een include hebt die in alle pagina's gebruikt wordt zou je het volgende hier in kunnen zetten:
<?php
if (empty($_SERVER['PATH_INFO']) === false) {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
    exit;
}
?>

Dit zorgt ervoor dat als er iets achter een scriptnaam staat, dus bijvoorbeeld /test.php[color=#ff0000]/hee/hallo/daar[/color] (in dit geval is PATH_INFO dus niet leeg) dat er een 404 header wordt uitgestuurd en er verder geen code meer wordt geladen noch output wordt geproduceerd.

Dit zul je dus wel even moeten testen :).

Waar de "exit;" staat zou je dus ook een summiere 404 pagina kunnen plaatsen of hier een statisch HTML-document kunnen includen.

Nogmaals, je wilt de slash niet wegwerken, je wilt dit soort constructies gewoon niet accepteren :p.

EDIT: dit is nog steeds een blacklist-constructie. Het geeft alleen aan wanneer een aanroep fout is, niet wanneer deze goed is...

Websites moeten wat dat betreft redelijk feilloos zijn anders kunnen zoekmachines hier niet goed doorheen crawlen. Dan is het in zekere zin ook logisch dat als je site kuren vertoont dat deze sowieso niet bovenaan staat in de zoekresultaten. Nu spelen er natuurlijk ook andere zaken maar een correct werkende site is zeker een pré.


Ik weet zeker dat ik een zeer redelijk feilloze website heb. Daar ben ik van overtuigd. Ik snap ook niet waar google die niet werkende URL's vandaan haalt. Nogmaals mijn website heeft het altijd goed gedaan en ik was lekker aan het stijgen in de zoekresultaten en plots was er die ommekeer.


[size=xsmall]Toevoeging op 18/03/2019 01:46:41:[/size]


Hm, misschien een hele simpele hack (die ook wat tests vereist) maar als je een include hebt die in alle pagina's gebruikt wordt zou je het volgende hier in kunnen zetten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
<?php
if (empty($_SERVER['PATH_INFO']) === false) {
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
exit;
}
?>

Dit zorgt ervoor dat als er iets achter een scriptnaam staat, dus bijvoorbeeld /test.php/hee/hallo/daar (in dit geval is PATH_INFO dus niet leeg) dat er een 404 header wordt uitgestuurd en er verder geen code meer wordt geladen noch output wordt geproduceerd.

Dit zul je dus wel even moeten testen :).

Waar de "exit;" staat zou je dus ook een summiere 404 pagina kunnen plaatsen of hier een statisch HTML-document kunnen includen.

Nogmaals, je wilt de slash niet wegwerken, je wilt dit soort constructies gewoon niet accepteren :p.

EDIT: dit is nog steeds een blacklist-constructie. Het geeft alleen aan wanneer een aanroep fout is, niet wanneer deze goed is...

Helaas werkt dit niet. Ik krijg een blanco pagina als ik mijn website bezoek.
Maakt het uit als ik de code in het head gedeelte plaats of is het van belang dat het bovenaan (nog voor het html gedeelte) plaats?
Oh, dat moest iets anders zijn, eh, isset($_SERVER['PATH_INFO']) && empty($_SERVER['PATH_INFO']) === false. empty() geeft ook true terug als de variabele niet bestaat. isset() vangt dit af (met lazy evaluation).

Het is al laat :p.

Oorspronkelijk voorstel ook aangepast maar zoals aangegeven blijft dit een hack / blacklist.

Heb er nog even over na zitten denken, deze isset() toevoeging zou niet nodig moeten zijn. Geen idee hoe $_SERVER['PATH_INFO'] dan in jouw installatie werkt.

Het kan ook met .htaccess (als je Apache gebruikt):

Hallo Ward,
Het is me al meerdere keren afgeraden om een slash niet weg te werken en dat ik zulke constructies niet zou moeten willen.
Ik weet nu niet zo goed of ik het wel of niet moet gebruiken en welke risico's ik loop.


Verder zou ik een canonical URL toevoegen aan elke pagina:

Ik maak gebruik van een sitemap.xml
Hiermee geef ik toch ook aan wat de cannonieke URL's zijn van mijn website?
Als je weet wat de juiste bestemming is, namelijk dezelfde URL maar dan zonder slash, kun je beter een 301 Moved Permanently-redirect uitvoeren dan alleen maar een 404 Not Found-clientfout melden. Strikt genomen maakt de client weliswaar een fout, door een URL te gebruiken die je niet wilt ondersteunen, maar het is wel een fout waarvoor je al een oplossing hebt. Voor Google geldt dat helemaal: in plaats van een request slechts afstraffen met een clientfout kun je veel beter Googlebot duidelijk maken wat de bedoeling is.
Maar de fout(e aanroep) werd met opzet gecreëerd (topicstarter constateert dat als je pagina's aanroept met een slash dat zijn site uit elkaar valt)? En vervolgens ga je deze fout ook zelf rechtbuigen? En nogmaals, waar houdt dit op? Als je dadelijk weer iets verzint wat een ongewenst effect heeft, ga je die dan ook weer corrigeren met een RewriteRule? Wat ben je dan aan het oplossen? Het achterliggende probleem is niet weggenomen. Je wilt dit soort verkeerde requests toch niet voeden? Veel duidelijker dan "pagina bestaat wel" en "pagina bestaat niet" wordt het toch niet?

Je bent in zekere zin ook niets aan het afstraffen want het was in eerste instantie helemaal niet de bedoeling dat deze niet-bestaande pagina's werden aangesproken en vervolgens worden behandeld alsof ze dan toch ergens anders staan? :/

Wat mij betreft moet je niet cateren voor wat niet geldig is, maar voor wat wél geldig is (en dus ook niet een brug proberen te slaan tussen deze twee).

Laat verkeerde requests gewoon fout gaan.

Reageren