AngularJS is a good framework for building websites and apps because it makes them much faster and richer for users.

    But there’s one problem every developer faces when pushing their AngularJS product: Search Engines Optimization, or SEO.

    Quality SEO means getting found amidst all the noise online. When a site or app is optimized for search it is more likely to be found by prospective users. If it is not optimized, then a developer might as well be screaming at the wind – no exposure and no users are almost guarantees.

    Right now the most common techniques for mitigating this problem is to either build separate versions of the app or website for search engines, or to pre-render pages on the server. The problem with these solutions, however, is that you have to maintain two separate systems: one for your users and another for Google and the other search engines.

    While Google has attempted to help developers by improving its capability to index JavaScript and CSS but even if Google’s efforts to index JavaScript since 2014 have advanced, it doesn’t mean that your app will be indexed properly.  Indeed, Google still recommends creating snapshots to make an AJAX application crawlable.

    But how exactly are these snapshots created? And how can a developer be sure that their AngularJS app or website is correctly and completely indexed by Google?

    In this post we present a free and self hosted solution to generate snapshots and to make sure that your AngularJS website or application crawlable by, indexed by, and optimized for Google.

    [freebiesub title=”these instructions and all the code in a PDF” download=”https://www.doz.com/wp-content/uploads/2016/03/DOZ-Angular-JS.pdf”]

    AngularJS and SEO: The Problem

    Search engines crawlers were originally designed to index the HTML content of web pages.

    Today, however, JavaScript and other frameworks like AngularJS and BackboneJS  are playing a leading role in web development and the creation of content and application online.

    Unfortunately, the crawlers and the other indexing mechanisms behind search engines remain decidedly unfriendly to JavaScript powered sites.

    angularjs-js-code

    AngularJS and SEO: The Solution

    Overcoming the indexing problem is not difficult when developers embrace what are called ‘snapshots’.

    Snapshots is a term used to refer to content generated for the search engine crawlers on the website’s backend. The idea behind snapshots is that the developer does the work for the crawler that it cannot or doesn’t want to do on it’s own. Optimizing and caching snapshots not only help you get indexed, but also improves significantly the speed of indexation.

    An important note: JavaScript indexation currently only applies to Google’s crawler. Other search crawlers (such as those from Microsoft’s Bing search engine) do not support crawling JavaScript applications yet. As well, despite web content being increasingly shared to social networks like Facebook and Twitter, most social network crawlers don’t handle JavaScript either.

    So how do you generate snapshots, and how do you work with them to make sure you are indexed?

    Read on for the step-by-step guide.

    Step One: Generate Snapshots

    The first step is to generate the snapshots themselves.

    To do this we need access to a snapshot server based on a headless browser such as PhantomJS or ZombieJS. In this example we will use the open source middleware Prerender that already packages PhantomJS and is ready to handle our special crawler requests and serve HTML snapshots.

    In order to reduce the time, it takes to generate snapshots a cache can be employed. Snapshots are cached on a Redis Server the first time they are requested, and then re-cached once a day (note: this can be manually configured to suit your needs) to make sure the content stays up-to-date.  As a result, a static snapshot is always and instantly available to be served to the crawler.

    angularjs-map

    Step 2: Server Installation

    In this example we will use an Apache server run on Ubuntu 14.04.2 LTS.

    There are five sub-steps to work through here.

    1 – Install NPM and NodeJS

    [snippet id=”727″]

    2 – Install Forever

    [snippet id=”728″]

    3 – Install  and Start Prerender.io

    [snippet id=”729″]

    Make sure the server starts on 4001 and that PhantomJS is on 4002.

    You can edit this file if you want to change the port:

    [snippet id=”730″]

    Return to the Prerender folder and start the server using forever – this will help to start the server continuously in the background.

    [snippet id=”731″]

    4 – Install Redis server

    Add the Dotdeb repositories to your APT sources. To do this, create a new list file in /etc/apt/sources.list.d/ and fill it with the following content:

    [snippet id=”732″]

    Then you need to authenticate these repositories using their public key:

    [snippet id=”733″]

    Next, install Redis using apt-get:

    [snippet id=”734″]

    Then enable the Redis service to start on boot:

    [snippet id=”735″]

    You should then check the Redis status:

    [snippet id=”736″]

    You will get “PONG” if everything is ok.

    5 – Make Prerender use the Redis server to cache snapshots

    Prerender has an open source module, Prerender-Redis-Cache, that makes it easy to perform this task.

    In your local prerender project ( prerender/server.js) run:

    [snippet id=”737″]

    Then add these two lines in prerender/server.js :

    [snippet id=”738″]

    Restart Prerender by:

    [snippet id=”739″]

    And if you want to clean all REDIS cache you can use:

    [snippet id=”740″]

    Step 3: Server Configuration

    Now we will redirect crawlers to the local Prerender server using a simple .htaccess file.

    This htaccess file have contain all the redirect configurations. Note that the .htaccess file needs to be in same directory with your main AngularJS index.html file.

    [snippet id=”741″]

    You have now finished all server side installation tasks, so it’s now time to configure the AngularJS App.

    Step 4: App Configuration

    First open you Angularjs index.html file and:

    1. make sure you have <base href=”/”> before </head>
    2. add <meta name=”fragment” content=”!”> between <head></head> (by adding this tag into the page www.example.com, the crawler will temporarily link this URL to www.example.com?_escaped_fragment_= and will request this from your server)

    Second, activate HTML5 mode.

    In your config.js file add:

    [snippet id=”742″]

    This will tell your application to use HTML5 URL format.

    URLs typically look like http://www.example.com/directory/page. By default AngularJS elements will have URLs like this: http://www.example.com/#!/directory/page

    [snippet id=”743″]

    Third, you need to manage the meta tags.

    To improve the SEO of your app or website you need to have a unique title and description for each page. An AngularJS module called AngularJS-View-Head already exists to fix this problem. This module will help us to change the HTML title and head elements on a per-view basis.

    How do you work this in practice?

    Start by installing this module using bower.

    Next,  declare the module as a dependency of your application:

    [snippet id=”744″]

    This makes available the directives described in your HTML template.

    Finally add the meta tags inside your template.

    [snippet id=”745″]

    Step 5: Test Prerender Server

    If you’ve followed all of the steps things should be working well. However, better safe than sorry, it’s time to test.

    Compare the source of one of your pages with and without _escaped_fragment_ in the URL.

    You can check specific routes in your browser and compare :

    http://www.example.com/directory/page
    http://www.example.com/directory/page?_escaped_fragment_=

    Step 6: Add a Sitemap

    The final step in your AngularJS SEO strategy is to develop a sitemap.

    To help search engines crawl your app or website and make sure pages are indexed quickly you must create a sitemap for all of your routes. This sounds difficult to do, however, with proper build processes this can be automated using a tool like Grunt.

    (Heads up: we’ll be publishing another post soon explaining just how to automate a sitemap using Grunt!)

    Conclusion

    Making sure search engines and – through searches – users can find your app or website is essential. The strategy presented in this post is quick to implement, scalable and easy to maintain and, where employed, should help you make the connections you need and win the users you want.

    Share.

    300 Comments

    1. Hi, probably a very confused question coming up right now, but when installed locally, how does it serve snapshots on the site/in production? Thanks for a great article, sorry about the ignorance.

    2. Faouzi EL YAGOUBI on

      Hi,
      Yes it will serve snapshots on the production server for search engines. Normal visitors will see normal app but search engines engines will see prerendred version. The pages will be the same in the content and design so it will respect search engine roles.

      Regards

    3. Faouzi EL YAGOUBI on

      You can optimize your app by following this steps :
      * Setup Grunt tasks to
      – Compile AngularJS templates from multiples files to one file
      – Minify and crompress JS, CSS, HTML
      – Combine all JS files to one file
      * Clean unused javascript and css code to reduce size of your files
      * Use prerender solution described in my article
      * Use redis Cache to make rendering faster
      * Use CDN and good hosting to make your app faster

    4. Your tutorial seems helpfull, although I struggled a hell of a lot to follow it. This guide would help someone who has experience and knowledge about how ubuntu works and where everything is located.

      For example. I had no clue what APT was or how to create a list in that folder, had to get external resources to find out.
      Also for many of the steps, you dont specify from what folder on the terminal they should be run….”sudo service redis_6379 start” did not work at all – from any folder.
      Where was I supposed to run the “install redis server” command? in the prerender directory? (That is where the previous step left off).

      These are just examples as on quite a few places I simply had to guess the step in between.

      I am not calling you out for being useless, im sure this is helpfull to many people, but for users who dont really have much experience developing on linux – this is extremely difficult to follow.
      If you want to make a step-by-step tutorial then you need to take into account just that, you cant simply ommit every second step and expect the end user to know that they need to now go back to the root directory or what APT is for that matter. Step-by-step tutorials are meant to dumb things down to the simplest level possible. This is more of a summarised guide or walkthrough, but not a step by step guide.

      I struggled for some hours now with this and have gotten nowhere.
      Either way, thanks for the effort, but it could have been a bit more in depth and aybe, just maybe I would have been able to get to the end.

      • Faouzi EL YAGOUBI on

        Sorry about that but this article require some knowledge about server management.
        – Advanced Packaging Tool (APT) perform such functions as installation of new software packages, upgrade of existing software packages, updating of the package list index, and even upgrading the entire Ubuntu system. APT command it is accessible by default in Ubuntu and you don’t need to install it.
        – ”sudo service redis_6379 start” can be run in any folder if you have install correctly redis. Please follow this tutorial to install redis https://www.linode.com/docs/databases/redis/redis-on-ubuntu-12-04-precise-pangolin

    5. Great post, Faouzi, I discovered this just in time. Thanks for sharing. I was wondering, have you published the post on using grunt to re/generate sitemap.xml yet? Otherwise, could you simply point me in the right direction to look? Thanks.

      • Faouzi EL YAGOUBI on

        Thanks Yemi, I don’t get time to finish the article about sitemap.xml but it will be published soon. I will let you know.

    6. I’m newbie to angularjs, and I’m using angularjs and yii2 framework and try to follow your guidance step by step, on step 3 htaccess configuration. we have only html files in template folder. Main file : /frontend/web/index.php, in which folder should I put this htaccess and is it need modify htccess configuration ? Thanks

      • Faouzi EL YAGOUBI on

        You need to create .htaccess file in the same folder of index.php (file : /frontend/web/ )

    7. I tried it but it is not working on different CARDS like Twitter Card, Facebook and Google plus.
      When we type a link on these websites, they crawl the page and show the preview but with Angularjs it is showing {{page.title}}, {{page.description}} etc.

    8. You need to add the Google and Twitter social bot in the list
      RewriteCond %{HTTP_USER_AGENT} Googlebot|bingbot|Googlebot-Mobile|Baiduspider|Yahoo|YahooSeeker|DoCoMo|Twitterbot|TweetmemeBot|Twikle|Netseer|Daumoa|SeznamBot|Ezooms|MSNBot|Exabot|MJ12bot|sogou\sspider|YandexBot|bitlybot|ia_archiver|proximic|spbot|ChangeDetection|NaverBot|MetaJobBot|magpie-crawler|Genieo\sWeb\sfilter|Qualidator.com\sBot|Woko|Vagabondo|360Spider|ExB\sLanguage\sCrawler|AddThis.com|aiHitBot|Spinn3r|BingPreview|GrapeshotCrawler|CareerBot|ZumBot|ShopWiki|bixocrawler|uMBot|sistrix|linkdexbot|AhrefsBot|archive.org_bot|SeoCheckBot|TurnitinBot|VoilaBot|SearchmetricsBot|Butterfly|Yahoo!|Plukkie|yacybot|trendictionbot|UASlinkChecker|Blekkobot|Wotbox|YioopBot|meanpathbot|TinEye|LuminateBot|FyberSpider|Infohelfer|linkdex.com|Curious\sGeorge|Fetch-Guess|ichiro|MojeekBot|SBSearch|WebThumbnail|socialbm_bot|SemrushBot|Vedma|alexa\ssite\saudit|SEOkicks-Robot|Browsershots|BLEXBot|woriobot|AMZNKAssocBot|Speedy|oBot|HostTracker|OpenWebSpider|WBSearchBot|FacebookExternalHit|quora\ link\ preview|showyoubot|outbrain|pinterest|slackbot|vkShare|W3C_Validator [NC,OR]

    9. Hey guys,

      Recently found it your article and indeed it’s very good and well documented. But still having some questions. First of all, redirecting all bots is not something that could be considered as sneaky redirects or cloaking technique?
      How you deal with this?

      Second, how much reliable is this solution in terms of cost per implementation / benefits in indexing webpages and ranking improvements.

      Thanks.

      • Faouzi EL YAGOUBI on

        Thanks for your comment but Google will not consider this solution as cloaking technique because the 2 pages are exactly the same. You prerendred page need to have exact same content!

        Generating pages on your server will not coast a lot if you use REDIS cache like i explain in this article.

        You will get exact same racking compared to normal website. Google will not see the difference.

        I test it for multiple projects and it works fine.

        • Hi Faouzi,

          Thank you for your answer. Yes, probably the right question would be if using screenshots technique is not an infringement of Google guidelines in general and cloaking in particular.
          I think this is more a pre-rendering page technique, but if the page is delivered identical for Googlebot as for humans it makes sense.

          Tell me pls, did you noticed a real benefit using this technique? Do you have any kinda of statistical data, in terms of no. of number of indexed pages before and after? Or ranking improvement for specified keywords with details about the visitors landing page on a page where you used this technique?

          Btw, it looks like after my comment you fixed the layout of this page. 🙂 Good job guys!

          Cheers.

          • Faouzi EL YAGOUBI on

            Ther is no real benefit using this technique is exactly same like if you have normal pages indexed. except if you generate fast and prerender the pages before google try to index them like that you improve the speed of indexation. Google like when the server is fast. Prerendering page will help to solve this problem.

            This technique is good for Angular 1.X but using Angular 2.X is no need of this technique. Angular 2 is isomorphic and will have prerendering natively.

            Sorry but I don’t have stats you ask.

            Yes we have some problem on the layout and @konrad fix it 😉 Thanks for your message

            • Thank you @Faouzi for your answer.

              Are the prerender technique working also with phantom.js or is just applicable to Angular.js
              I recently read some documentation from BromBone guys and they suggest that html5 “pushState” urls are the new standard in using js. frameworks.
              Still necessary using a prerender server if use a “pushState” and changing the urls without a page refresh?

              I have identified some sites that are using this “pushState” urls, but doing a quick research I see that Google are still not indexing that pages.

              Do you have any good example of site, with good rankings, that use a prerender server and snapshots?

              Thanks

            • Faouzi EL YAGOUBI on

              Prerender use phantomJs.

              Angular rooting is using pushState when you are in html5 mode. If you are using angular 1.x you need to render the pages to google. Google can sometime prerender pages but others search engines can’t.
              My website http://www.ournia.co is using prerender 😉

    10. When i adding this .htaccess file to my blog(resultweek.in), site is not loading & it’s showing Internal server error and google is not crawlers my blog.
      Here I have use the json file but google is not rendering please resolve this issue

      • Faouzi EL YAGOUBI on

        If you have error on your .htaccess Google can’t find the good pages. Please fix your htaccess first

    11. Faouzi. I had a look over your site and I saw a loot of pages indexed. Looking over some individual pages I don’t localize the title tag within that url is indexed by Google.
      Let’s look over this one: http://www.ournia.co/artist/amar-aldek
      The title tag over the code is only your brand name (different than indexed title: Amar Aldek – Ournia). Second you don’t have a meta description into your code and the sentence that Google uses I can’t find at anywhere into code or front-end.

      The question is how to create a proper on-page optimization (title, meta description) plus content on page using phantom.JS prerender.
      Is there using phantom.JS any limitation for web analytics tools (e.g. Google Analytics, GTM)

      Cheers

    12. One more thing Faouzi. I tried to crawl your site now using Screaming frog and only one page has been crawled (root).
      I crawled other site that uses “pushState” and Screaming frog crawled smoothly all pages. Moreover has been indicated both urls: address & “ugly url” using the ?_escaped_fragment_=

      Cheers.

    13. am a freelancer most of the time my template got rejected just because of this, and each time they say am missing the tags i did not know about all those tags and importance of those tags thanks admin for the post ….

    14. Prateek Gupta on

      I have an angualrjs website with prerendering. I am not able to get my site crawled by alexa. Anyone else has same issue.. please advise

    15. Hello just wanted to give you a quick heads up. The text in your content seem to be running off the screen in Firefox. I’m not sure if this is a format issue or something to do with web browser compatibility but I thought I’d post to let you know. The style and design look great though! Hope you get the problem resolved soon. Cheers

    16. Hi everybody, here every person is sharing these know-how, thus it’s good to read this web site,
      and I used to visit this weblog daily.

    17. We absolutely love your blog and find nearly all of
      your post’s to be just what I’m looking for. Would you offer guest writers to write content for
      you? I wouldn’t mind composing a post or elaborating on a
      lot of the subjects you write related to here. Again, awesome blog!

    18. Hello there! Do you know if they make any plugins to protect against
      hackers? I’m kinda paranoid about losing everything
      I’ve worked hard on. Any suggestions?

    19. Hmm it appears like your site ate my first comment (it was extremely long) so I guess I’ll
      just sum it up what I submitted and say, I’m thoroughly enjoying your blog.
      I too am an aspiring blog writer but I’m still new to everything.
      Do you have any suggestions for beginner blog writers? I’d really appreciate it.

    20. My brother suggested I might like this blog. He
      was totally right. This post actually made my day.

      You cann’t imagine just how much time I had spent
      for this information! Thanks!

    21. I’m curious to find out what blog system you have been working with?
      I’m experiencing some minor security issues with my latest site and I’d like to find something
      more secure. Do you have any suggestions?

    22. Great site you have here but I was curious if you knew of any discussion boards that cover the same topics talked
      about in this article? I’d really love to be a
      part of group where I can get feed-back from other knowledgeable individuals that share the same interest.
      If you have any suggestions, please let me know.
      Many thanks!

    23. I really like what you guys tend to be up too. This type of clever work and exposure!
      Keep up the fantastic works guys I’ve you guys to
      our blogroll.

    24. hey there and thank you for your info – I’ve definitely
      picked up something new from right here. I did however expertise a
      few technical issues using this website, as I experienced to reload the site lots of
      times previous to I could get it to load properly.

      I had been wondering if your web hosting is OK? Not that I am complaining, but slow loading instances times will sometimes affect
      your placement in google and can damage your high-quality score if
      advertising and marketing with Adwords. Well I am
      adding this RSS to my email and could look out for much more of
      your respective fascinating content. Ensure
      that you update this again soon.

    25. I am not sure where you are getting your info, but great topic.
      I needs to spend some time learning more or understanding more.
      Thanks for fantastic information I was looking for this information for my mission.

    26. Right here is the right site for anyone who would like to understand this topic. You realize so much its almost hard to argue with you (not that I personally will need to…HaHa). You definitely put a fresh spin on a topic that has been written about for a long time. Great stuff, just excellent!

    27. fantastic points altogether, you just received a emblem new reader.
      What would you recommend about your post that you made some days in the
      past? Any sure?

    28. I am really inspired with your writing talents as well
      as with the format in your blog. Is that this a paid subject or did you modify it your self?
      Anyway keep up the nice quality writing, it is rare to see
      a great weblog like this one these days..

    29. An interesting discussion is definitely worth comment.
      I believe that you ought to write more on this topic, it may not be a taboo subject but usually people don’t speak about such issues.
      To the next! Many thanks!!

    30. I don’t know if it’s just me or if everyone else experiencing problems with your website.
      It seems like some of the text on your content are running off the screen. Can someone
      else please provide feedback and let me know if this is happening to
      them as well? This might be a issue with my web browser because I’ve had
      this happen previously. Thanks

    31. Do you have a spam issue on this website; I also am a blogger,
      and I was wanting to know your situation; we have developed some nice procedures and we are looking to exchange
      solutions with others, please shoot me an email if interested.

    32. Thank you a lot for sharing this with all people you actually
      know what you are talking about! Bookmarked.
      Please also consult with my site =). We may have a hyperlink alternate agreement among us

    33. My developer is trying to persuade me to move to .net from PHP.
      I have always disliked the idea because of the expenses.
      But he’s tryiong none the less. I’ve been using WordPress on several
      websites for about a year and am nervous about switching to another platform.
      I have heard good things about blogengine.net.
      Is there a way I can import all my wordpress
      content into it? Any kind of help would be really appreciated!

    34. Hey there! This is kind of off topic but I need some advice from
      an established blog. Is it difficult to set
      up your own blog? I’m not very techincal but I can figure things out pretty quick.
      I’m thinking about setting up my own but I’m not sure where to start.
      Do you have any ideas or suggestions? Appreciate it

    35. It’s going to be finish of mine day, except before finish I am reading this impressive
      paragraph to improve my knowledge.

    36. I do consider all the ideas you have introduced to your post.
      They’re very convincing and can certainly work. Nonetheless, the posts
      are very short for novices. May just you please extend them a bit from
      next time? Thanks for the post.

    37. Hi there superb website! Does running a blog like this take
      a massive amount work? I’ve absolutely no expertise in coding however I
      had been hoping to start my own blog soon. Anyway,
      if you have any recommendations or tips for
      new blog owners please share. I understand this is off topic but I just had to ask.
      Thanks a lot!

    38. May I simply say what a relief to find somebody that truly understands what they’re discussing on the internet.
      You actually understand how to bring a problem to light and
      make it important. More and more people have to look at this and understand this side of your story.
      It’s surprising you’re not more popular since you most certainly have the gift.

    39. Hi mates, how is the whole thing, and what you would like
      to say about this piece of writing, in my view its truly awesome for me.

    40. Greate pieces. Keep writing such kind of info on your site.
      Im really impressed by your site.
      Hello there, You have done a great job. I’ll definitely
      digg it and in my view recommend to my friends.
      I’m confident they’ll be benefited from this website.

    41. My brother suggested I would possibly like this website.
      He was once entirely right. This publish actually
      made my day. You cann’t believe just how so much time I had spent
      for this info! Thanks!

    42. It’s difficult to find experienced people on this subject, however, you seem like you know
      what you’re talking about! Thanks

    43. After I initially commented I appear to have clicked
      on the -Notify me when new comments are added- checkbox
      and from now on each time a comment is added I recieve four emails with
      the same comment. Is there a means you are able to remove me from that service?
      Many thanks!

    44. It’s a shame you don’t have a donate button! I’d most certainly
      donate to this excellent blog! I suppose for now
      i’ll settle for bookmarking and adding your RSS feed
      to my Google account. I look forward to new updates and will talk about this website with my Facebook group.
      Talk soon!

    45. Hello there! This post could not be written any better!
      Reading through this post reminds me of my previous room
      mate! He always kept chatting about this. I will forward this article to him.
      Fairly certain he will have a good read. Thanks
      for sharing!

    46. Good day! Would you mind if I share your blog with my facebook group?

      There’s a lot of people that I think would really enjoy your content.
      Please let me know. Cheers

    47. Hello! I’m at work surfing around your blog from my new apple iphone!
      Just wanted to say I love reading your blog and look forward to all
      your posts! Carry on the outstanding work!

    48. Aw, this was a very good post. Taking the time and actual effort to make a really good article… but what
      can I say… I put things off a whole lot and never manage to get nearly anything done.

    49. Fine way of explaining, and nice piece of writing to obtain facts concerning
      my presentation focus, which i am going to present in institution of higher education.

    50. Hi! This is kind of off topic but I need some advice from an established blog.
      Is it very difficult to set up your own blog? I’m not very techincal but I can figure things out pretty
      quick. I’m thinking about making my own but I’m not sure where to
      start. Do you have any points or suggestions? Cheers

    51. If some one wishes to be updated with latest technologies
      therefore he must be visit this web page and be up to date all the time.

    52. I delight in, result in I found just what I used to be having
      a look for. You have ended my 4 day lengthy hunt! God Bless you man. Have a great day.
      Bye

    53. It’s hard to come by well-informed people in this particular topic, however, you seem like you know what you’re talking about! Thanks

    54. What’s up, all is going fine here and ofcourse every one is sharing
      information, that’s actually excellent, keep up writing.

    55. If you want to improve your familiarity simply keep visiting this site and be updated with the hottest information posted here.

    56. I pay a visit every day some sites and information sites
      to read articles or reviews, but this webpage provides
      quality based writing.

    57. Howdy! I could have sworn I’ve been to this site before but after
      reading through some of the post I realized it’s new to me.
      Anyways, I’m definitely glad I found it and I’ll be bookmarking and checking back often!

    58. My brother suggested I might like this web site.
      He was totally right. This post truly made my day. You can not imagine
      simply how much time I had spent for this information! Thanks!

    59. I absolutely love your blog and find almost all of your post’s to be precisely what I’m looking for.
      can you offer guest writers to write content for yourself?
      I wouldn’t mind publishing a post or elaborating on many of the subjects you write with regards to here.
      Again, awesome weblog!

    60. Hi there are using WordPress for your blog platform?
      I’m new to the blog world but I’m trying to get started and create my
      own. Do you require any html coding knowledge
      to make your own blog? Any help would be really
      appreciated!

    61. It’s nearly impossible to find knowledgeable people for this subject, but you sound like you know what you’re talking about!
      Thanks

    62. Nice post. I learn something totally new and challenging on blogs I stumbleupon every day.
      It will always be exciting to read content from other authors and use a little something from other
      web sites.

    63. Hey just wanted to give you a brief heads up and let you
      know a few of the images aren’t loading correctly.
      I’m not sure why but I think its a linking issue.
      I’ve tried it in two different web browsers and both show the same results.

    64. I am extremely impressed with your writing skills
      as well as with the layout on your blog. Is this a paid theme
      or did you modify it yourself? Either way keep up
      the excellent quality writing, it is rare to see a great blog like this one today.

    65. I appreciate, lead to I found just what I used to be taking a look for.

      You have ended my four day long hunt! God Bless you man.
      Have a nice day. Bye

    66. It’s actually a great and useful piece of information. I am happy that you simply shared this helpful info with us.
      Please stay us up to date like this. Thanks for sharing.

    67. Someone essentially assist to make significantly posts I would state.
      That is the first time I frequented your website page and to
      this point? I surprised with the analysis you
      made to make this particular put up incredible.
      Wonderful process!

    68. It is the best time to make a few plans for the long run and it is time to
      be happy. I’ve learn this publish and if I may just I wish to suggest you some
      fascinating issues or advice. Perhaps you can write next articles regarding this article.
      I wish to learn even more things about it!

    69. Thanks for the good writeup. It in reality was once a entertainment
      account it. Look complex to more added agreeable from you!
      By the way, how can we communicate?

    70. Hi! Someone in my Facebook group shared this site with us so I came to check it
      out. I’m definitely loving the information. I’m book-marking and will
      be tweeting this to my followers! Superb blog and superb style and
      design.

    71. Greetings! Very helpful advice within this article!

      It is the little changes that make the most significant changes.

      Thanks for sharing!

    72. That is a great tip especially to those fresh to the blogosphere. Short but very precise info… Many thanks for sharing this one. A must read article!

    73. We tried to build the Taj Mahal together with my friend Jack but ended up with
      a LEGO Hoverboard. Epic fail made epic fun get your own trusted lego builds These Lego sets open up a whole new world.
      These sets allow us to travel back in time, or explore fantasy
      worlds by connecting the bricks. They mistook my flower LEGO set as an architectural
      model. Anyone for a brick bouquet?

    74. Attractive section of content. I just stumbled upon your weblog and in accession capital
      to assert that I acquire actually enjoyed account your blog posts.

      Anyway I’ll be subscribing to your augment and even I achievement you access consistently quickly.

    75. It’s genuinely very complicated in this active life to listen news on TV, therefore I only use
      web for that reason, and get the newest information.

    76. You actually make it seem so easy with your presentation but I find this topic to be actually
      something which I think I would never understand. It seems too complex and
      very broad for me. I am looking forward for your next post, I’ll try to get the hang of
      it!

    77. Hmm is anyone else experiencing problems with the pictures on this blog loading?
      I’m trying to find out if its a problem on my end or if it’s
      the blog. Any suggestions would be greatly appreciated.

    78. We are a group of volunteers and starting a new
      scheme in our community. Your website offered us with valuable information to work on. You’ve done a formidable job
      and our whole community will be grateful to you.

    79. Wow! At last I got a webpage from where I be able to genuinely take useful data regarding my study
      and knowledge.

    80. Aw, this was an extremely nice post. Taking a few minutes and actual effort to make a very good article… but what can I
      say… I hesitate a lot and don’t seem to get nearly anything
      done.

    81. Hi there to every one, for the reason that I am
      in fact keen of reading this weblog’s post to be updated regularly.
      It includes nice information.

    82. Hello! Would you mind if I share your blog with my twitter
      group? There’s a lot of people that I think would really
      enjoy your content. Please let me know. Thanks

    83. Fantastic items from you, man. I have take into account your stuff prior to and you are simply
      extremely wonderful. I really like what you have obtained here, certainly like what you’re stating and the way in which during which you say
      it. You are making it enjoyable and you continue to care for
      to stay it smart. I can not wait to read much more from you.
      That is actually a wonderful website.

    84. Pretty nice post. I just stumbled upon your blog and
      wanted to say that I’ve really loved browsing your weblog posts.

      In any case I’ll be subscribing for your rss feed and
      I hope you write again very soon!

    85. Do you mind if I quote a few of your posts as long as I provide credit and sources back to your webpage?
      My blog site is in the very same niche as yours and my visitors would genuinely benefit from some
      of the information you provide here. Please let me know if this alright with you.
      Regards!

    86. Hi to every body, it’s my first go to see of this webpage;
      this website consists of amazing and in fact fine data in favor of readers.

    87. Hey! I could have sworn I’ve been to this website before but after checking through some
      of the post I realized it’s new to me. Nonetheless, I’m definitely happy I found it and I’ll be book-marking and checking back often!

    88. Sweet blog! I found it while browsing on Yahoo News.

      Do you have any tips on how to get listed in Yahoo News?
      I’ve been trying for a while but I never seem to get there!
      Thanks

    89. I’m not that much of a internet reader to be honest but your blogs really nice, keep it up!
      I’ll go ahead and bookmark your website to come back in the future.
      Many thanks

    90. We are a group of volunteers and starting a new scheme in our community.
      Your website provided us with valuable info to work on. You have done an impressive job and our entire community will be grateful to you.

    91. Thank you for the good writeup. It in fact was once a entertainment
      account it. Glance complicated to more brought agreeable from you!

      However, how could we keep in touch?

    92. Hello would you mind sharing which blog platform you’re working with?
      I’m planning to start my own blog soon but I’m having
      a difficult time making a decision between BlogEngine/Wordpress/B2evolution and Drupal.
      The reason I ask is because your layout seems different
      then most blogs and I’m looking for something unique.
      P.S Sorry for being off-topic but I had to ask!

    93. Good blog you have got here.. It’s difficult to find quality writing like
      yours these days. I really appreciate individuals like you!

      Take care!!

    94. I’ve been exploring for a bit for any high-quality articles or weblog
      posts in this kind of space . Exploring in Yahoo I
      eventually stumbled upon this website. Reading this information So i’m satisfied to express
      that I have a very just right uncanny feeling I discovered exactly
      what I needed. I so much undoubtedly will make certain to do not forget
      this site and provides it a glance regularly.

    95. Simply desire to say your article is as surprising.
      The clarity in your post is simply cool and i could assume you
      are an expert on this subject. Fine with your permission allow me
      to grab your RSS feed to keep updated with forthcoming post.
      Thanks a million and please carry on the enjoyable work.

    96. Pretty element of content. I simply stumbled upon your site and in accession capital
      to claim that I get in fact loved account your weblog posts.
      Anyway I’ll be subscribing in your augment or even I fulfillment you get admission to consistently quickly.

    97. Hey there would you mind sharing which blog platform you’re using?
      I’m looking to start my own blog soon but I’m having a difficult
      time making a decision between BlogEngine/Wordpress/B2evolution and Drupal.
      The reason I ask is because your design seems different then most blogs
      and I’m looking for something completely unique.
      P.S My apologies for getting off-topic but I had to ask!

    98. I was excited to uncover this page. I want to to
      thank you for ones time due to this wonderful
      read!! I definitely really liked every part of it and I have you saved as a favorite to check out new things
      on your site.

    99. When some one searches for his essential thing, thus he/she wants to be available that in detail, so that
      thing is maintained over here.

    100. I simply could not leave your site prior to suggesting that I really
      enjoyed the standard info a person provide for your guests?
      Is going to be again often to check up on new posts

    101. Woah! I’m really loving the template/theme of this blog.
      It’s simple, yet effective. A lot of times it’s very difficult to get that
      “perfect balance” between superb usability and visual appearance.
      I must say you have done a fantastic job with this.
      In addition, the blog loads super quick for me on Safari.
      Excellent Blog!

    102. I know this site gives quality dependent content and extra information, is
      there any other website which offers such stuff in quality?

    103. No matter if some one searches for his essential thing, therefore he/she needs
      to be available that in detail, so that thing is maintained over here.

    104. I’m not that much of a internet reader to be honest but your sites really nice, keep it up!
      I’ll go ahead and bookmark your website to come back later.
      Cheers

    105. When someone writes an piece of writing he/she retains the idea of
      a user in his/her mind that how a user can understand it. Therefore that’s why this piece of writing is outstdanding.
      Thanks!

    106. I think the admin of this web site is truly working hard in favor of his website, for the reason that here every information is
      quality based data.

    107. Hi there, I do think your blog may be having browser compatibility issues. When I look at your web site in Safari, it looks fine however, if opening in Internet Explorer, it’s got some overlapping issues. I merely wanted to provide you with a quick heads up! Apart from that, great site!

    108. So, if you have a 50% match reload bonus and you deposit $10, you will get
      an further $five from the on the web casino.

    109. Howdy! I know this is kind of off topic but I was wondering if you knew
      where I could find a captcha plugin for my comment form?

      I’m using the same blog platform as yours and I’m having difficulty finding one?
      Thanks a lot!

    110. Hello would you mind letting me know which hosting company you’re utilizing?

      I’ve loaded your blog in 3 completely different
      web browsers and I must say this blog loads
      a lot faster then most. Can you recommend a good
      internet hosting provider at a fair price? Thank you, I appreciate
      it!

    111. Do you have a spam issue on this blog; I also am
      a blogger, and I was wanting to know your situation; many
      of us have developed some nice procedures and we are looking to exchange
      solutions with other folks, please shoot me an e-mail if interested.

    112. What i do not understood is in fact how you’re no longer actually a
      lot more neatly-favored than you may be now. You’re so intelligent.
      You know therefore significantly with regards to this subject, produced me for my part imagine it from so many numerous
      angles. Its like women and men are not interested unless it is something
      to do with Girl gaga! Your individual stuffs nice. Always take care
      of it up!

    113. Good blog you have got here.. It’s hard to find high quality writing like
      yours these days. I truly appreciate individuals
      like you! Take care!!

    114. Aw, this was an incredibly nice post. Taking the time and actual effort to generate a top notch article… but what can I say… I procrastinate a lot and don’t seem to get nearly anything done.

    115. You can certainly see your skills within the article you write.

      The world hopes for more passionate writers such as you who aren’t afraid to mention how they believe.

      At all times go after your heart.

    116. Hey there would you mind letting me know which webhost
      you’re utilizing? I’ve loaded your blog in 3 completely different web
      browsers and I must say this blog loads a lot quicker then most.
      Can you recommend a good web hosting provider at a honest price?
      Thanks a lot, I appreciate it!

    117. Everything is very open with a very clear explanation of the issues.
      It was really informative. Your site is very useful.
      Thanks for sharing!

    118. Everyone loves what you guys tend to be up too. This kind
      of clever work and exposure! Keep up the great works guys I’ve added you guys to our blogroll.

    119. Today, I went to the beach with my kids. I found a sea shell and gave it to
      my 4 year old daughter and said “You can hear the ocean if you put this to your ear.”
      She placed the shell to her ear and screamed. There was a hermit crab inside and it
      pinched her ear. She never wants to go back! LoL I know
      this is entirely off topic but I had to tell someone!

    120. hi!,I really like your writing very so much!
      proportion we be in contact more approximately your post on AOL?
      I need a specialist on this house to unravel my problem.
      May be that’s you! Looking ahead to look you.

    121. Hi! Would you mind if I share your blog with my myspace group?
      There’s a lot of folks that I think would really appreciate your content.

      Please let me know. Thanks

    122. Unquestionably believe that which you said. Your favorite justification seemed to be on the net the simplest thing to be aware of.
      I say to you, I certainly get annoyed while people think about worries that
      they plainly don’t know about. You managed to hit the nail upon the top and also defined out the
      whole thing without having side effect , people can take a signal.

      Will probably be back to get more. Thanks

    123. Hello, i think that i saw you visited my blog so i came to “return the favor”.I’m trying to find things to improve my
      web site!I suppose its ok to use some of your
      ideas!!

    124. Hmm it seems like your blog ate my first comment (it was extremely long) so I guess I’ll just sum it up what I submitted and say,
      I’m thoroughly enjoying your blog. I as well am an aspiring blog blogger but I’m still new to everything.

      Do you have any recommendations for novice blog writers?
      I’d certainly appreciate it.

    125. I have been exploring for a bit for any high-quality
      articles or blog posts on this kind of area . Exploring in Yahoo I at last stumbled upon this site.
      Studying this info So i’m glad to express that I’ve an incredibly just right uncanny feeling I came upon exactly what I needed.
      I such a lot surely will make sure to don?t overlook this web site and provides it a glance
      regularly.

    126. Greetings, There’s no doubt that your website might be having internet browser compatibility problems.
      Whenever I look at your web site in Safari, it looks fine however, if opening in IE, it’s got some overlapping issues.
      I simply wanted to provide you with a quick heads up! Aside from that, wonderful website!

    127. That is a great tip particularly to those new to the
      blogosphere. Simple but very accurate info… Thank you for sharing this one.

      A must read article!

    128. I love your blog.. very nice colors & theme. Did you make
      this website yourself or did you hire someone to do it for
      you? Plz reply as I’m looking to design my own blog and would like to find out where u got this from.
      appreciate it

    129. you’re truly a just right webmaster. The website loading
      speed is incredible. It kind of feels that you are doing any distinctive trick.

      In addition, The contents are masterpiece. you have performed a great process on this subject!

    130. Hi! I simply want to offer you a huge thumbs up for your great info you’ve got here on this post.
      I’ll be coming back to your site for more soon.

    131. I believe that is one of the such a lot important information for me.
      And i’m happy studying your article. But wanna commentary on few general
      things, The site style is great, the articles is
      in reality nice : D. Good task, cheers

    132. I’m gone to say to my little brother, that he should also pay a visit this webpage on regular basis to obtain updated from hottest news
      update.

    133. For the reason that the admin of this web page is working, no doubt
      very shortly it will be renowned, due to its feature contents.

    134. Heya i’m for the primary time here. I found this board and I find It really helpful & it helped me out much.

      I am hoping to offer one thing back and help others such as you helped me.

    135. Hello there! This is my 1st comment here so I just wanted to give a quick shout out and say
      I truly enjoy reading your blog posts. Can you recommend any other
      blogs/websites/forums that cover the same topics? Thanks
      a ton!

    136. Fascinating blog! Is your theme custom made or did you download it
      from somewhere? A theme like yours with a few simple tweeks would really make my blog jump out.
      Please let me know where you got your design.
      Bless you

    137. Aw, this was an exceptionally nice post. Taking
      a few minutes and actual effort to create a superb article… but what can I say… I put things off a whole lot and don’t
      seem to get anything done.

    138. magnificent points altogether, you simply received
      a new reader. What may you suggest about your submit that you
      just made some days in the past? Any sure?

    139. Hi to every body, it’s my first pay a visit of this webpage;
      this blog consists of remarkable and really fine material in support of visitors.

    140. Heya! I understand this is kind of off-topic however I needed to ask.

      Does managing a well-established blog like yours require a large amount of work?

      I am completely new to running a blog but I do write in my diary on a daily basis.
      I’d like to start a blog so I can share my personal experience
      and thoughts online. Please let me know if you have any kind
      of suggestions or tips for new aspiring bloggers. Appreciate it!

    141. Hi there colleagues, how is all, and what you wish
      for to say regarding this paragraph, in my view its in fact
      remarkable in favor of me.

    142. Fantastic post but I was wanting to know if you could write a litte more on this topic?
      I’d be very grateful if you could elaborate
      a little bit more. Bless you!

    143. I know this if off topic but I’m looking into starting my own blog and was wondering
      what all is needed to get setup? I’m assuming having a
      blog like yours would cost a pretty penny? I’m not very internet smart so I’m not 100% sure.
      Any recommendations or advice would be greatly
      appreciated. Kudos

    144. Awesome blog! Is your theme custom made or did you download it from somewhere?
      A theme like yours with a few simple adjustements would really make my blog jump
      out. Please let me know where you got your design. Appreciate it

    145. Hey! I know this is kind of off-topic however I needed to ask.
      Does managing a well-established website like yours require
      a large amount of work? I am completely new to writing
      a blog however I do write in my diary every day. I’d like to start a blog so I can share my personal
      experience and feelings online. Please let me know if you have any recommendations or tips for
      brand new aspiring blog owners. Thankyou!

    146. Hi there, everything is going sound here and ofcourse every one is sharing facts, that’s truly excellent,
      keep up writing.

    147. Howdy! Would you mind if I share your blog with my myspace group?
      There’s a lot of folks that I think would really enjoy your content.

      Please let me know. Thanks

    148. Hello fantastic website! Does running a blog similar to this take a
      large amount of work? I have absolutely no expertise in computer programming but I had been hoping to
      start my own blog soon. Anyway, should you have
      any recommendations or tips for new blog owners please share.
      I understand this is off subject nevertheless I simply had to ask.
      Thanks a lot!

    149. Hey! Do you know if they make any plugins to help with Search Engine Optimization? I’m trying
      to get my blog to rank for some targeted keywords
      but I’m not seeing very good results. If you know of any please share.
      Thank you!

    150. Excellent pieces. Keep posting such kind of information on your site.
      Im really impressed by your site.
      Hello there, You have performed an incredible job. I will certainly digg it
      and personally recommend to my friends. I am sure they will be benefited from this web
      site.

    151. Hello there, just became aware of your blog through Google, and found that it’s really informative.
      I’m gonna watch out for brussels. I’ll be grateful if you continue this in future.
      Numerous people will be benefited from your writing. Cheers!

    152. Howdy, I think your blog may be having browser compatibility issues. Whenever I look at your site in Safari, it looks fine but when opening in Internet Explorer, it’s got some overlapping issues. I merely wanted to give you a quick heads up! Aside from that, fantastic site!

    153. Hi, I do think this is an excellent blog. I stumbledupon it 😉 I’m going to return once again since i have book-marked it. Money and freedom is the greatest way to change, may you be rich and continue to guide other people.

    154. I seriously love your blog.. Very nice colors & theme. Did you build this web site yourself? Please reply back as I’m attempting to create my own personal site and would love to know where you got this from or exactly what the theme is named. Thank you!

    155. Oh my goodness! Awesome article dude! Thank you, However I am having issues with your RSS. I don’t understand the reason why I am unable to join it. Is there anyone else having identical RSS issues? Anyone who knows the solution can you kindly respond? Thanx!!

    156. I was very happy to uncover this website. I want to to thank you for your time for this fantastic read!! I definitely liked every part of it and i also have you bookmarked to look at new things in your website.

    157. After I initially left a comment I appear to have clicked the -Notify me when new comments are added- checkbox and now each time a comment is added I get 4 emails with the same comment. Is there a means you are able to remove me from that service? Cheers!

    158. Hi! I just wish to offer you a huge thumbs up for your excellent info you’ve got right here on this post. I’ll be coming back to your site for more soon.

    159. Greetings, I believe your website may be having web browser compatibility problems. When I look at your website in Safari, it looks fine however, if opening in IE, it’s got some overlapping issues. I simply wanted to provide you with a quick heads up! Other than that, fantastic website!

    160. This is the perfect website for anyone who wants to understand this topic. You understand so much its almost hard to argue with you (not that I personally will need to…HaHa). You certainly put a fresh spin on a subject which has been discussed for many years. Great stuff, just great!

    161. I blog quite often and I truly appreciate your content. This great article has really peaked my interest. I’m going to take a note of your website and keep checking for new information about once a week. I opted in for your Feed too.

    162. Oh my goodness! Impressive article dude! Thank you, However I am going through troubles with your RSS. I don’t know the reason why I can’t subscribe to it. Is there anyone else getting the same RSS issues? Anyone who knows the solution can you kindly respond? Thanks!!

    163. I have to thank you for the efforts you’ve put in penning this site. I am hoping to view the same high-grade content by you in the future as well. In fact, your creative writing abilities has inspired me to get my own website now 😉

    164. You’ve made some decent points there. I looked on the net to learn more about the issue and found most individuals will go along with your views on this web site.

    165. I want to to thank you for this excellent read!! I definitely loved every little bit of it. I’ve got you book-marked to look at new stuff you post…

    166. Excellent site you have got here.. It’s hard to find high quality writing like yours nowadays. I seriously appreciate people like you! Take care!!

    167. Having read this I believed it was very enlightening. I appreciate you finding the time and energy to put this short article together. I once again find myself personally spending a lot of time both reading and commenting. But so what, it was still worthwhile!

    168. After going over a handful of the blog posts on your blog, I truly appreciate your way of writing a blog. I book-marked it to my bookmark site list and will be checking back in the near future. Please check out my web site as well and tell me your opinion.

    169. Aw, this was a very nice post. Taking a few minutes and actual effort to generate a superb article… but what can I say… I put things off a lot and never manage to get nearly anything done.

    170. I must thank you for the efforts you’ve put in penning this blog. I am hoping to check out the same high-grade content by you in the future as well. In truth, your creative writing abilities has inspired me to get my own blog now 😉

    171. You have made some decent points there. I looked on the web to find out more about the issue and found most individuals will go along with your views on this website.

    172. Hello there! This blog post couldn’t be written any better! Looking at this post reminds me of my previous roommate! He always kept talking about this. I will forward this article to him. Pretty sure he’ll have a very good read. Many thanks for sharing!

    173. Hi, I do think this is an excellent website. I stumbledupon it 😉 I’m going to return once again since i have book-marked it. Money and freedom is the best way to change, may you be rich and continue to guide other people.

    174. I blog frequently and I really appreciate your information. The article has truly peaked my interest. I am going to bookmark your website and keep checking for new details about once a week. I subscribed to your Feed too.

    175. mongkeydyoyo on

      Good health is an important basis for having a good quality of life in today’s society. Good health is not only a matter of treating disease and exercising to strengthen the body. But it is also a way to maintain mental health. Creating happiness in life and strengthening good relationships with others. สุขภาพที่ดี in today’s society does not only mean treating disease and preventing infection. But it also has to do with awareness of mental health and mental balance. Maintaining good health, both physically and mentally, is therefore important in developing a quality and happy life in today’s society.
      Creating a healthy society requires support from all sectors of society. Whether it is creating space for exercising Promoting the consumption of nutritious food or supporting the development of mental health skills and adjustment in daily

    Leave A Reply

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