How Facebook link preview happens?

When you type a URL into facebook, it automatically comes up with the "post a link" feature. With most websites, it automatically loads a selection of images it pulls from somewhere in the page to go alongside the link and description. does anyone have an idea of how to implement that same feature for our own site without any FB API etc.. just javascript or JQuery ?


Due to security restrictions, JavaScript cannot load any page from any server. Facebook actually asks the Facebook servers for information about that page, and the servers in turn query the page to extract the information. You, too, will need a server-side implementation of this.

Aside from that, it's fairly simple: use an HTTP client library for your language of choice to connect to the provided URL, then use an HTML parsing library to extract the title tag, identify a significant piece of text in the body tag, and extract the img tag sources that seem the most appropriate.

Once your server is able to extract information about a page, it's a fairly simple exercise to call it through AJAX.


I developed myself a Facebook Link Preview with PHP and jQuery that is on my website. Take a look... The source code is free... I didn't post the whole code here because they are many files... But if you prefer the code to be posted here, tell me and I'll post.

It's available on Github

Facebook Link Preview - PHP + jQuery

I think following steps are involved

  • Using Javascript find the links in the written text
  • From the found links get the last link in the text (FB shows only for last link)
  • Using AJAX send this link detail to a server side page (PHP/ASP/JSP etc.)
  • The server side page gets the required data (from Meta tags) including
    • Title (Preferably Open graph og:title if missing from <title>
    • Description (Preferably Open graph og:description if missing from <meta name="description" ....
    • Images (Preferably Open graph og:image if missing from <img src=....
  • In PHP you can get these datas either using curl or file_get_contents and parse for required data detailed above. Not sure about other Language.
  • Show the result thus found in the AJAX request.

Additionally I think FB stores the data, once found, in database and 1st queries there. This helps them to get faster result and hence same article shared and liked generate the image and details from the stored data.

You will need Javascript to show this preview in runtime (while you write in the textarea). However if you only need it after posting of data it can be done with pure server side language (you can avoid javascript) and following above steps just remove AJAX call.

Surprisingly there aren’t that many services out there doing this. As the previous commenter posted, your browser can’t do this without a server element.

So, the workflow is really this:

  1. Parse the inserted text to test it’s a valid URL
  2. Whiz that URL value via AJAX to a bespoke service or roll your own.
  3. The service (mine is written in .Net) loads up the page in memory and parses it with an DOM parser. I use the HTML Agility pack you could use AngleSharp etc.
  4. You need to extract the Open graph meta elements with (typically) fall back to standard Meta Title/ Description et all.
  5. Pack up all that OG goodness and return this model via AJAX
  6. Put the returned values on screen as a preview.
  7. If accepted write the logic to insert the values into your DB

If you are not up to creating the server object, there are third-party services that can do the retrieval bits:

best of luck.

Need Your Help

Send e-mail to Gmail with inline image using Python

python image email gmail mime

My objective is to use Python to send an e-mail to a Gmail user that has an inline image. It is not possible to host this image online and then link to it through a href, due to the sensitive natur...

When to use JavaScript template engines?

javascript html templates memory-leaks separation-of-concerns

Here is an example of JavaScript template from Ben Nadel's demo single page long-lived AJAX application taken from: [source]