Blinde links findes nemt med PowerShell
Man kan nemt selv lave en test af blinde links i Windows PowerShell. Under grafikken er et eksempel på kode, som selv crawler et domæne.
Invoke-Webrequest gør arbejdet
CMDlet’en Invoke-Webrequest kan loade websider ind og analysere nærmest alt – herunder links, images, html-kode m.m.
Koden starter i roden af domænet – her ZoomTek.dk. Først loades hovedsiden. Herfra findes alle links på forsiden. Links findes med .links.href. Alle links sættes i et array ($array). Der tjekkes på om et givent link allerede findes i $array.
$array indeholder derfor en unik liste over sider/links. $counter peger mod det element i arrayet, som testes lige nu. Hermed loades sider ind en ad gangen, skannes for links, som sættes i arrayet, hvis de ikke findes i forvejen. Siderne behandles en ad gangen ved hjælp af $counter.
$fejlkode=$_.Exception.Response.StatusCode.Value__}
Denne kode returnerer værdien 404 (integer), hvis en given side/link ikke findes. Det blinde link skrives ud og sættes IKKE i arrayet.
Koden ser således ud:
cls;$domain=”https://zoomtek.dk“;$array = @($domain+”/”);$counter=0;$blind=@()
$abl=0; $specfejl=@(“component”,”id=”,”22-page”)
do {
$a=invoke-webrequest -URI $array[$counter]
write-host “… ($($counter+1)/$($array.length))”
$urlside=@()
foreach ($li in $a.links) {
$url=$li.href.tostring()
if ($url.substring(0,1) -eq “/”) {$url=$domain+$url}
if ($url -notmatch $domain ) {$url=””}
if ($url -match “index.php”) {$url=””}
if ($url -ne “”) {$urlside=$urlside+$url}
}
$urlside=$urlside | select -unique
foreach ($us in $urlside) {
$fejlkode=0
if ($array -notcontains $us) {
try { $response = Invoke-WebRequest $us } catch {
$fejlkode=$_.Exception.Response.StatusCode.Value__}
if ($fejlkode -eq 404) {
$abl=$abl+1
write-host “$($array[$counter]) —$abl) BLINDT LINK–> $us”
$blind=$blind+”$($array[$counter]) —$abl) —— BLINDT LINK–> $us”
$blind | clip }
else {
foreach ($sf in $specfejl) {
if ($us -match $sf) {
write-host “$($array[$counter]) —$abl) BLINDT LINK $sf –> $us”
}
}
$array+=$us
}
}
}
$counter=$counter+1
}
while ($counter -lt $array.length)
$counter er en simpel pointer, der peger mod et nth element i arrayet. Efterhånden som arrayet bygges op vil pointeren pege på næste link i arrayet.
$specfejl søger på specifikke karakterer i url’er, som OGSÅ angives som fejl. Det skyldes, at ZoomTek benytter Joomla, og ligesom andre CMS-systemer produceres der af og til dublet content med mærkelige url’er, hvis man ikke passer på.
Dem fanger jeg også i koden. Der testes også for index.php, hvilket igen er en af børnesygdommene ved Joomla, som jeg forsøger at undgå.
Koden kan køres direkte (copy/paste). Du skal blot ændre $domain – alternativt lave en read-host, hvor du kan taste domænet for hver kørsel.
Få udvidet kode gratis
Kontakt ZoomTek. Så får du en kode, der gør følgende:
- Scanner for blinde links
- Tester for title-tags
- Tester for Description meta-data
- Genererer et sitemap.txt