I am using a logo in my Master Page which will be displayed on all pages. How do I use its relative URL? Currently it is written as:

<img src="/sites/Style Library/Images/logo.jpg">

But it is not being displayed. Is there a property in SharePoint which will allow me to define relative URL here for e.g. like this?

<img src="<% sharepoint_site_url %>/sites/Style Library/Images/logo.jpg">

There are 2 ways you can insert an image in a SharePoint master page. Both of them are relative url.

14 Hive (Physically hosted): You can place your images physically in the 14 hive folder under C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\IMAGES

Place a image here (logo.png) and you can access this image in your masterpage like this

<SharePoint:SiteLogoImage LogoImageUrl="/_layouts/images/logo.png" runat="server"/>

Site Collection (Library hosted) Upload the logo.png file in any document library on your site collection. If your library name is "Images" here is how you can access the image.

<img src="../../Images/logo.png" />

Both the approaches are fine depending on your portability requirement of the site.

  • 1
    Don't want to use "_layouts" folder although I will use it as last resort if nothing works. I tried the second approach and it worked but I am not sure if it will work for all my site pages. Apr 6 '13 at 2:23

You can do this :

<img src="<asp:literal runat='server' Text='<%$SPUrl:~sitecollection/Style Library/Images/logo.jpg%>'></asp:literal>" />

I think your URL is wrong. It should be just

<img src="/Style Library/Images/logo.jpg" />

If you want to have it accessible from another sitecollection I suggest you deploy the image to the "/_layouts/images" folder instead. Thereby you can alwas reach it by just using the relative URL:

<img src="/_layouts/images/logo.jpg" />
  • I tried the first URL you gave above but it didn't work. Problem is this is a multi language site which means my page which is accessing the image could be like "webapp/sites/mysite/English/Pages/default.aspx". Don't want to use "_layouts" folder although I will use it as last resort if nothing works. Apr 6 '13 at 2:22
  • Why don't you want to use the layouts folder? Since it is a Mapped Folder it will always have the same URL relative to the site you are on. If you want to upload your image to a library you will most certainly need to upload it to all of your site collections, and also perform lots of testing on nested subwebs to really test the functionality Apr 8 '13 at 6:13
  • Also, If your web is using publishing, you could get hold of the PublishingWeb and from that object get .ImageLibrary, and get the URL from that. This will help you overcome problems with different languages (though it is harder to implement) Apr 8 '13 at 6:16
  • Using a relative url for the image in the _layouts directory as you have will work, but it means that the client is downloading and caching a separate copy of the image for every site that they navigate to. If you use /_layouts/images/logo.jpg, the client will only need to download it a single time (as long as it lasts in the client's cache.)
    – Hutch
    Mar 3 '14 at 21:30

Sharepoint has tokens you can use which will be replaced at runtime

~site – Web site (SPWeb) relative link.

~sitecollection – site collection (SPSite) relative link.

Agree with Robert that you would probably want to deploy it to the layouts folder. The url you have given points to a specific library, unless you're planning to deploy the logo to each site collection's style library.

  • This is wrong. An asp:image control (and even more so an html img tag) won't resolve any of the special ~ SharePoint tokens. So, neither ~site nor ~sitecollection will work.
    – MdMazzotti
    Jan 26 '14 at 11:51
  • Tokens are only valid when used with $SPUrl:.....
    – GoldBishop
    Apr 11 '14 at 13:55

SharePoint Server, not Foundation, offers a feature to use $SPUrl as a placeholder. So your url would look like this:

<img src="<% $SPUrl:~sitecollection/sites/Style Library/Images/logo.jpg %>">

Here's some more info: http://thechriskent.com/2012/04/02/relative-paths-in-sharepoint-using-spurlexpressionbuilder-spurl/

  • I used this method but it says "Code blocks are not allowed in this file" Apr 6 '13 at 2:18
  • Honestly, I have no idea why it fails on your side. Did you try the example included in the link I mentioned? Anyways, it looks like you already accepted another answer so I guess your issue is resolved.
    – Sig Weber
    Apr 8 '13 at 11:49
  • sorry to revive an old thread, but @FrankMartin is right. In SharePoint designer, by default code blocks are not allowed, so the answer proposed by Sig Weber is wrong
    – MdMazzotti
    Jan 26 '14 at 11:53
  • This approach only works in the .master file only.
    – Zac Blazic
    Oct 14 '15 at 8:37

This works as well, a combination of the SiteLogoImage control and the SPUrl token:

<SharePoint:SiteLogoImage LogoImageUrl="<% $SPUrl:~sitecollection/SiteCollectionImages/logo.png %>" runat="server" />
  • This would be the most readable, of all the solutions provided.
    – GoldBishop
    Apr 11 '14 at 13:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.