Unable to set favicon using Jekyll and github pages
HtmlJekyllFaviconGithub PagesHtml Problem Overview
I am trying to set a favicon.ico
for my github page, but it doesn't work. When I serve it locally I see the standard "empty" favicon and when I push it I see the facebook icon. Why is it so? I have the right favicon.ico
in the root directory of my project and I added the line
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
to the relevant default.html
. You can see the sources here: https://github.com/drorata/drorata.github.io
Html Solutions
Solution 1 - Html
I cloned your project from GitHub to take a look at it. After serving it using Jekyll, the favicon did not display, as you noted.
I did some quick testing by converting the favicon file to be a .png
rather than a .ico
file and changing the favicon declaration to the following, and that was able to get it to display the favicon.
<link rel="shortcut icon" type="image/png" href="/favicon.png">
I tried getting the favicon to work while keeping the .ico
file format, and was unable to do so at first. However, I did some quick searching and came across this question, https://stackoverflow.com/questions/8616016/favicon-not-displayed-by-firefox-i-know-its-been-asked-10000-times.
In that question the asker had a similar issue with the favicon not showing, and was eventually able to come up with a quick fix by adding a ?
to the end of the link to the favicon file in the favicon declaration. I attempted this and it worked. Here is what the favicon declaration would be:
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico?">
Either of those two methods seem to be able to fix your issue. Personally I'd recommend using the first method, whereby you convert the image to a .png
file, as it seems a bit simpler and less hacky.
However, if you want to keep the file as a .ico
file then you should read over the question that I linked to before you attempt the second method, as the accepted answer for the question differed from that solution. Also I'm not sure as to why the second method works, and it does seem a little bit hacky.
Solution 2 - Html
I believe, currently, the correct way to do this is:
<link rel="shortcut icon" type="image/png" href="{{ "/favicon.png" | prepend: site.baseurl }}" >
Assuming you are using a png. The following also worked for me with a .ico instead of .png:
<link rel="shortcut icon" type="image/x-icon" href="{{ "/favicon.ico" | prepend: site.baseurl }}" >
I was working with Chrome on Linux. Neither Excalibur Zero's answer or Ribtoks answer worked for me.
Solution 3 - Html
Quick solution
Leave the slash out to make the href address relative.
For example:
Change
<link rel="shortcut icon" type="image/png" href="/favicon.png">
to:
<link rel="shortcut icon" type="image/png" href="favicon.png">
In my github pages site this works perfectly.
Explanation
Use my site https://hustlion.github.io/spanish-cards/
as an example:
When you use <link rel="shortcut icon" type="image/png" href="/favicon.png">
, the icon address will be https://hustlion.github.io/favicon.png
, because the root of the site (as specified by the slash in /favicon.png
) is https://hustlion.github.io/
.
However, when you use <link rel="shortcut icon" type="image/png" href="favicon.png">
, this is relative to the path https://hustlion.github.io/spanish-cards/
, so the icon address will be resolved properly as https://hustlion.github.io/spanish-cards/favicon.png
.
Notes
This path issue happens especially when you are using github pages for your specific repository.
Solution 4 - Html
I use
<link rel="shortcut icon" type="image/x-icon" href="{{ site.baseurl }}/images/favicon.ico" >
And I have favicon in folder images
.
Solution 5 - Html
Nothing above worked for me, but the steps in this vid (assuming the minima theme) did.
- Add
_includes
directory to your project root
- Terminal: find
_includes/head.html
by typingbundle show minima
- Copy
_includes/head.html
from finder into your project root
- Modify
_includes/head.html
to include favicon link
- The following works for me:
<link rel="shortcut icon" type="image/png" href="/favicon.png">
- Important: the
/
in front of/favicon.png
matters. Without the/
, your website root will have your favicon but no other endpoints will.
-
Add the
jekyll-seo-tag
plugin to your_config.yml
. It should look something like this:Build settings
markdown: kramdown theme: minima plugins:
- jekyll-feed
- jekyll-seo-tag
Solution 6 - Html
according to documentation:
-
put
favicon.ico
file intoassets/images
folder of jekyll project asassets/images/favicon.ico
-
create a
_includes/head_custom.html
file if not yet exists -
add needed overriding content:
<link rel="shortcut icon" type="image/x-icon" href="{{ site.baseurl }}/assets/images/favicon.ico">
Done.
Solution 7 - Html
I got it to working using:
<!-- Add favicon -->
<link rel="shortcut icon"
type="image/png"
href="{{ '/favicon.png' | relative_url }}" >
Notes on the snippet:
- PNG format for the favicon,
- a relative URL in the HTML head tag (in minimia this is
head.html
). - Adding
relative_url
tells Liquid to prepend theurl
andbaseurl
to the given path.
Solution 8 - Html
Just in case someone will be looking for this. Both approaches didn't work for me. But when I appended the site.url
, it worked
<link rel="shortcut icon" type="image/png" href="{{site.url}}/favicon.png">
Solution 9 - Html
In my case, I had to add the favicon.ico
file to the assets folder and reference it as follows:
<link rel="shortcut icon" type="image/x-icon" href="assets/favicon.ico">
Solution 10 - Html
I couldn't get the images to display and I use markdown for my posts, appending what worked for me so that others may benefit.
![Description of the image]({{ site.baseurl }}/assets/images/image.png)
This works both locally and on github pages as well