301 redirect met PHP
Ik bezig met het verbeteren van de SEO en wil graag links van mijn website redirecten via 301. Omdat het er nogal veel zijn wil ik dit graag vanuit de MySQL database en via PHP afhandelen in plaats van via .htaccess.
Ik had een beetje rondgezocht en kwam uit bij het volgende. Mijn vraag is eigenlijk of onderstaande code in alle gevallen volstaat voor een 301 redirect? En of dit efficiënt is.
Scheelt een regel. Zal qua tijd wel niet veel uitmaken.
Ik denk dat je meer winst kunt behalen bij "Hier dan nagaan of de link omgeleid moet worden". Vragen die dan bij me opkomen:
- hoe doe je je database lookup?
- om hoeveel pagina's gaat het precies?
- hoe dynamisch is de "redirect" data?
Heel strict genomen zou een Location-header ook een absolute URI moeten hebben, en geen relatieve. Ook uit oogpunt van (on)dubbelzinnigheid. Een absolute URI biedt geen ruimte voor alternatieve interpretaties.
En dan nog een SEO dingetje. Is de oude content ook echt niet meer beschikbaar? Anders krijg je misschien strafpunten voor "duplicate content".
Misschien is dit ook een goed moment om even een adempauze in te lassen? Als het echt nog allemaal losse PHP-scripts zijn zou je eens na kunnen gaan denken over een gecentraliseerde aanpak met één ingang naar je applicatie: index.php. En vervolgens zou je ook eens kunnen gaan kijken naar echte zoekmachine-vriendelijke URL's, waarbij je nagenoeg vrij bent in de naamgeving van je pagina's. Bezint eer gij begint?
Het probleem is een beetje als volgt. Ik ben begonnen met pagina's als:
- /person.php?id=1&view=resultaten&jaar=2019
Nu heb ik de URL's opgeschoond, met een slug. En als canonical heb ik dan de nieuwe URL aangegeven.
- /person/michael-jordan/resultaten/2019/
Ik heb het wel zo gedaan dat de oude URL's nog werken. Maar ik denk dat het beter is om alle oude varianten met 301 door te linken naar de nieuwe versie? Daarnaast zijn er meerdere &view's (resultaten, historie, overzicht, ...), en meerdere jaren, dus het betreft per persoon wel een heel aantal links.
Het was misschien wat slordig, maar alle begin is lastig. Ik denk dat ik al wel flink wat strafpunten binnen heb, maar het is dan ook de bedoeling om dat te gaan verbeteren.
Ik ben er zelf nog niet helemaal uit hoe ik dit moet gaan vormgeven.
Ook komt het soms voor dat er 'dubbele' personen ontstaan. Dat bijvoorbeeld later blijkt dat michael-jordan en mike-jordan dezelfde persoon is. Dus dan zou ik alle pagina's met mike-jordan naar de juiste pagina van michael-jordan willen doorsturen. Liefst natuurlijk direct naar de juiste pagina. En daarnaast zou het het natuurlijk het mooiste zijn als hetzelfde gebeurt met de pagina's met de id van mike-jordan.
Ik had een beetje het volgende bedacht:
Is het een idee om de URL te controleren op de aanwezigheid van '.php?' voor de oude URL's, de parameters in de juiste volgorde te zetten, en te controleren of de in een speciale database table staan? En zo ja, doorsturen naar de aangegeven URL?
En als dat niet het geval is controleren of bv .../person/mike-jordan/.../ voorkomt in een andere (kleinere) table voor nieuwe en toekomstige verwijzigingen, of verandering van slug bijvoorbeeld?
Ik zou hierbij wel voor een makkelijke oplossing gaan. Dus een waarbij je niet allerlei "regels" programmeert (als het x.php is controleer a, als het y.php is controleer b etc.), maar gewoon volledige pagina-verwijzingen (REQUEST_URI's) en doelpagina's in die tabel gooien. Dus alleen maar een letterlijke mapping van oud naar nieuw. Het enige wat je dan hoeft te controleren is of de oude URL overeen komt met de huidige REQUEST_URI, zo ja redirect naar nieuwe pagina, zonee, ga door met normale afhandeling van de pagina-aanroep. Dit lijkt mij qua "flow" ook het makkelijkste - een URI/URL matcht wel of niet, en hoeft niet te worden berekend door allerlei code.
Je hebt dan wel wat werk aan het opstellen van alle mappings van oud naar nieuw en daarom is het zaak dat je heel goed nadenkt over de nieuwe naamgeving, en hoe je deze opbouwt, nog los van techniek (dus puur hoe URLs in de nieuwe situatie zijn opgebouwd). Je wilt namelijk deze exercitie niet nog tig keer uitvoeren :p.
Gewijzigd op 24/11/2019 23:11:52 door Thomas van den Heuvel
Maar ik ga er eerst nog even goed over nadenken hoe ik dat het beste kan vormgeven. Mocht ik nog ergens tegenaan lopen dan zal ik wel weer even langskomen. Bedankt in ieder geval voor zover voor de feedback, altijd erg prettig!
Houd het simpel.
Over die ? in de URI, het hangt er een beetje vanaf of dat verwijst naar pagina's met "echte" content of naar een soort resultaatpagina van zoekfunctionaliteit. In het laatste geval hoef je hier waarschijnlijk niet allerlei vertalingen van oud naar nieuw voor bij te houden maar als het bijvoorbeeld naar webteksten wijst die in de vorige versie nog geen "nette" naamgeving hadden (bijvoorbeeld documentation.php?id=12 ofzo) dan loont het
Je zou natuurlijk ook eens kunnen kijken - als je deze informatie hebt - welke pagina's in het verleden het drukst bezocht werden. Je zou je dan van een soort van 80/20-regel kunnen bedienen en enkel voor de interessantse pagina's vertalingen kunnen opstellen.
Gewijzigd op 26/11/2019 14:45:07 door Thomas van den Heuvel