Find blinde links med Microsoft Powershell

SEO er bl.a. afhængig af korrekt html og styring af links. Blinde links på et site er ikke Google’s kop te. Der findes en række værktøjer, som kan teste for blinde links – f.eks. Xenu…

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.
invoke-webrequest kan bruges til at finde links der ikke virker
 

$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