Office 365 – Check your site for broken links in SharePoint Online – Part 1

On Tech Community I came across a question about how to  check for broken links on your SharePoint sites in SharePoint Online.

So I’m first starting with the connection to a site collection in Office 365 using PnP PowerShell:

[code lang=text]
$cred = get-Credential -Message “Pass” -UserName “”
Connect-PnPOnline https:/ / -Credentials $cred

Office 365 - Check your site for broken links in SharePoint Online - Part 1 1

Then to check if a url exists I’m running:

[code lang=text]
invoke-webrequest $url -DisableKeepAlive -UseBasicParsing -Method head

this returns the following for a valid request:

[code lang=text]
StatusCode : 200
StatusDescription : OK
Content :
RawContent : HTTP/1.1 200 OK
Pragma: no-cache
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
x-ms-request-id: afdbecd9-02c3-419c-8677-94ef…
Forms :
Headers : {[Pragma, no-cache], [Strict-Transport-Security, max-age=31536000; includeSubDomains], [X-Content-Type-Options,
nosniff], [X-Frame-Options, DENY]…}
Images : {}
InputFields : {}
Links : {}
ParsedHtml :
RawContentLength : 0

So now I just have to go through all sites and all the lists and libraries in my site to collect all the urls from the content. First looping through all the sites.

[code lang=text]
$web = Get-PnPWeb
Get-WebForBrokenLinks -Web $web
ForEach ($subweb in $subwebs)
Get-WebForBrokenLinks -Web $subweb

I will go through the content in part 2 of this series where I will implement the Get-WebForBrokenLinks function that will use the invoke-webrequest.


In the meanwhile there is also a uservoice  that needs up voting:

Part 2 of this series can be found here:


9 thoughts on “Office 365 – Check your site for broken links in SharePoint Online – Part 1

  1. commented on October 7, 2017 by Kaycee

    Nice.. Really need it

  2. commented on October 8, 2017 by Mike

    This is exactly what I have been looking for, is Part 2 up yet ?

  3. commented on September 14, 2018 by Dips


    PS doesn’t seem to recognise Get-WebForBrokenLinks – how do I overcome this?? I have module SharePointPnPPowerShellOnline v 2.28.18 installed

    Can anyone help please.


  4. commented on May 22, 2019 by Rick

    It seems to me that as long as the site collection part of the URL is valid, the Invoke-WebRequest returns 200. If the rest of the URL is actually not valid, it still returns 200, giving you a false positive.

  5. Do you have the full script anywhere for this? I’ve got the same pain but trying to compile the script out of these various tidbits is going to be difficult

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: