Search Featured Websites:
Feature your business, services, products, events & news. Submit Website.


Breaking Top Featured Content:

Vue.js And SEO: How To Optimize Reactive Websites For Search Engines And Bots

Vue.js And SEO: How To Optimize Reactive Websites For Search Engines And Bots

Vue.js And SEO: How To Optimize Reactive Websites For Search Engines And Bots

Paolo Mioni

Reactive JavaScript Frameworks (such as React, Vue.js, and Angular) are all the rage lately, and it’s no wonder that they are being used in more and more websites and applications due to their flexibility, modularity, and ease of automated testing.

These frameworks allow one to achieve new, previously-unthinkable things on a website or app, but how do they perform in terms of SEO? Do the pages that have been created with these frameworks get indexed by Google? Since with these frameworks all — or most — of the page rendering gets done in JavaScript (and the HTML that gets downloaded by bots is mostly empty), it seems that they’re a no-go if you want your websites to be indexed in search engines or even parsed by bots in general.

In this article, I will talk mostly about Vue.js, since it is the framework I’ve used most, and with which I have direct experiences in terms of indexing by the search engines on major projects, but I can assume that most of what I will cover is valid for other frameworks, too.

Replacing jQuery With Vue.js

Did you know that you can incorporate Vue into your project the same way that you would incorporate jQuery — with no build step necessary? Tell me more →

Some Background On The Problem

How Indexing Works

For your website to be indexed by Google, it needs to be crawled by Googlebot (an automated indexing software that visits your website and saves the contents of pages to its index) following links within each page. Googlebot also looks for special Sitemap XML files in websites to find pages that might not be linked correctly from your public site and to receive extra information on how often the pages in the website change and when they have last changed.

A Little Bit Of History

Until a few years ago (before 2009), Google used to index the content of a website’s HTML — excluding all the content created by JavaScript. It was common SEO knowledge that important links and content should not be written by JavaScript since it would not get indexed by Google, and it might cause a penalty for the website because Google might consider it “fake content” as if the website’s owner was trying to show users something different from what was shown to the search engines and trying to fool the latter.

It was very common practice by scammers to put a lot of SEO-friendly content in the HTML and hide it in JavaScript, for example. Google has always warned against this practice:

“Serving Googlebot different content than a normal user would see is considered cloaking, and would be against our Webmaster Guidelines.”

You could get penalized for this. In some cases, you could be penalized for serving different content to different user agents on the server side, but also for switching content via JavaScript after the page has loaded. I think this shows us that Google has been indexing websites executing JavaScript for a long time — at least for the sake of comparing the final HTML of the website (after JavaScript execution) and the raw HTML it was parsing for its indexes. But Googlebot did not execute JavaScript all the time, and Google was not using the JavaScript-generated content for indexing purposes.

Then, given the increased usage of AJAX to deliver dynamic content on websites, Google proposed an “AJAX crawling scheme” to help users index AJAX-based websites. It was very complicated; it basically required the website to produce a rendering of pages with AJAX content included. When requested by Google, the server would provide a version of the page with all (or most) of the content that would have been generated dynamically by JavaScript included in the HTML page — pre-rendered as an HTML Snapshot of the content. This process of having a server-side solution deliver content that was (for all other purposes) meant to be generated client-side, implied that those wanting to have a site that heavily relied on JavaScript indexed in Google had to go through a lot of technical hassles.

For example, if the content read by AJAX came from an external web service, it was necessary to duplicate the same web service calls server-side, and to produce, server-side, the same HTML that would have been produced client-side by JavaScript — or at least a very similar one. This was very complicated because, before the advent of Node.js, it required to at least partially duplicate the same rendering logic in two different programming languages: JavaScript for the frontend, and PHP, Java, Python, Ruby, and so on, on the backend. This is called “server-side rendering”, and it could lead to maintenance hell: if you made important changes to how you were rendering content in the frontend you had to duplicate those changes on the backend.

The only alternative to avoid duplicating the logic was to parse your own site with a browser executing JavaScript and save the end results to your server and serve those to Googlebot. This is sort of similar to what is now called “pre-rendering”.

Google (with its AJAX crawling scheme) also guaranteed that you would avoid penalties due to the fact that in this case you were serving different content to Googlebot and to the user. However, since 2015, Google has deprecated that practice with an official blog post that told website managers the following:

“Today, as long as you’re not blocking Googlebot from crawling your JavaScript or CSS files, we are generally able to render and understand your web pages like modern browsers.”

What this told us was not that Googlebot had suddenly acquired the capability of executing JavaScript when indexing web pages, since we know that it had done so for a very long time (at least to check for fake content and scams). Instead, it told us that the result of JavaScript execution would be indexed and used in SERPs.

This seems to imply that we don’t have to worry about providing Google with server-side rendered HTML anymore. However, we see all sorts of tools for server-side rendering and pre-rendering made available for JavaScript frameworks, it seems this is not the case. Also, when dealing with SEO agencies on big projects, pre-rendering seems to be considered mandatory. How come?

How Does Google Actually Index Pages Created With Front-End Frameworks?

The Experiment

In order to see what Google actually indexes in websites that have been created with a front-end framework, I built a little experiment. It does not cover all use cases, but it is at least a means to find out more about Google’s behavior. I built a small website with Vue.js and had different parts of text rendered differently.

The website’s contents are taken from the description of the book Infinite Jest by David Foster Wallace in the Infinite Jest Wiki (thanks guys!). There are a couple of introductory texts for the whole book, and a list of characters with their individual biography:

  • Some text in the static HTML, outside of the Vue.js main container;
  • Some text is rendered immediately by Vue.js because it is contained in variables which are already present in the application’s code: they are defined in the component’s data object;
  • #Some text is rendered by Vue.js from the data object, but with a delay of 300ms;
  • The character bios come from a set of rest APIs, which I’ve built on purpose using Sandbox. Since I was assuming that Google would execute the website’s code and stop after some time to take a snapshot of the current state of the page, I set each web service to respond with an incremental delay, the first with 0ms, the second with 300ms, the third with 600ms and so on up to 2700ms.

Each character bio is shortened and contains a link to a sub-page, which is available only through Vue.js (URLs are generated by Vue.js using the history API), but not server-side (if you call the URL of the page directly, you get no response from the server), to check if those got indexed too. I assumed that these would not get indexed, since they are not proper links which render server-side, and there’s no way that Google can direct users to those links directly. But I just wanted to check.

I published this little test site to my Github Pages and requested indexing — take a look.

The Results

The results of the experiment (concerning the homepage) are the following:

  • The contents which are already in the static HTML content get indexed by Google (which is rather obvious);
  • The contents which are generated by Vue in real-time always get indexed by Google;
  • The contents which are generated by Vue, but rendered after 300ms get indexed as well;
  • The contents which come from the web service, with some delay, might get indexed, but not always. I’ve checked Google’s indexing of the page in different moments, and the content which was inserted last (after a couple of seconds) sometimes got indexed, sometimes it didn’t. The content that gets rendered pretty quickly does get indexed most of the time, even if it comes from an asynchronous call to an external web service. This depends on Google having a render budget for each page and site, which depends on its internal algorithms, and it might vary wildly depending on the ranking of your site and the current state of Googlebot’s rendering queue. So you cannot rely on content coming from external web services to get indexed;
  • The subpages (as they are not accessible as a direct link) do not get indexed as expected.

What does this experiment tell us? Basically, that Google does index dynamically generated content, even if comes from an external web service, but it is not guaranteed that content will be indexed if it “arrives too late”. I have had similar experiences with other real, production websites besides this experiment.

Competitive SEO

Okay, so the content gets indexed, but what this experiment doesn’t tell us is: will the content be ranked competitively? Will Google prefer a website with static content to a dynamically-generated website? This is not an easy question to answer.

From my experience, I can tell that dynamically-generated content can rank in the top positions of the SERPS. I’ve worked on the website for a new model of a major car company, launching a new website with a new third-level domain. The site was fully generated with Vue.js — with very little content in the static HTML besides </code> tags and <code>meta</code> descriptions.</p> <p>The site started ranking for minor searches in the first few days after publication, and the text snippets in the SERPs reported words coming directly from the dynamic content.</p> <p>Within three months it was ranking first for most searches related to that car model — which was relatively easy since it was hosted on an official domain belonging to the car’s manufacturer, and the domain was heavily linked from reputable websites.</p> <p class="c-pre-sidenote--left">But given the fact that we had had to face strong opposition from the SEO company that was in charge of the project, I think that the result was still remarkable.</p> <p class="c-sidenote c-sidenote--right">Due to the tight deadlines and lack of time given for the project, we were going to publish the site without pre-rendering.</p> <h4 id="animated-text">Animated Text</h4> <p>What Google does <em>not</em> index is heavily-animated text. The site of one of the companies I work with, <a href="https://www.rabbithole-consulting.com/">Rabbit Hole Consulting</a>, contains lots of text animations, which are performed while the user scrolls, and require the text to be split into several chunks across different tags.</p> <p>The main texts in the website’s home page are not meant for search engine indexing since they are not optimized for SEO. They are not made of tech-speak and do not use keywords: they are only meant to <strong>accompany the user on a conceptual journey</strong> about the company. The text gets inserted dynamically when the user enters the various sections of the home page.</p> <figure class=" break-out article__image "><a href="https://www.rabbithole-consulting.com/"></p> <p> <img decoding="async" srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/526c290c-efd1-42ef-bb48-fb0af80c4c5c/rabbit-hole-screenshot.png 400w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_800/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/526c290c-efd1-42ef-bb48-fb0af80c4c5c/rabbit-hole-screenshot.png 800w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1200/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/526c290c-efd1-42ef-bb48-fb0af80c4c5c/rabbit-hole-screenshot.png 1200w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_1600/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/526c290c-efd1-42ef-bb48-fb0af80c4c5c/rabbit-hole-screenshot.png 1600w, https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/526c290c-efd1-42ef-bb48-fb0af80c4c5c/rabbit-hole-screenshot.png 2000w" src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_400/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/526c290c-efd1-42ef-bb48-fb0af80c4c5c/rabbit-hole-screenshot.png" sizes="100vw" alt="Rabbit Hole Consulting"></a><figcaption class="op-vertical-bottom"> (Image source: <a href="https://www.rabbithole-consulting.com/">Rabbit Hole Consulting</a>) (<a href="https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/526c290c-efd1-42ef-bb48-fb0af80c4c5c/rabbit-hole-screenshot.png">Large preview</a>)<br /> </figcaption></figure> <p>None of the texts in these sections of the website gets indexed by Google. In order to get Google to show something meaningful in the SERPs, we added some static text in the footer below the contact form, and this content does show as part of the page’s content in SERPs.</p> <p>The text in the footer gets indexed and shown in SERPs, even though it is not immediately visible to the users unless they scroll to the bottom of the page <em>and</em> click on the “Questions” button to open the contact form. This confirms my opinion that content does get indexed even if it is not shown immediately to the user, as long as it is rendered soon to the HTML — as opposed to being rendered on-demand or after a long delay.</p> <div class="sponsors__lead-place"></div> <h4 id="what-about-pre-rendering">What About Pre-Rendering?</h4> <p>So, why all the fuss about pre-rendering — be it done server-side or at project compilation time? Is it really necessary? Although some frameworks, like <a href="https://nuxtjs.org/">Nuxt,</a> make it much easier to perform, it is still no picnic, so the choice whether to set it up or not is not a light one.</p> <p>I think it is <em>not compulsory</em>. It is certainly a requirement if a lot of the content you want to get indexed by Google comes from external web service and is not immediately available at rendering time, and might — in some unfortunate cases — not be available at all due to, for example, web service downtime. If during Googlebot’s visits some of your content arrives too slowly, then <strong>it might not be indexed</strong>. If Googlebot indexes your page exactly at a moment in which you are performing maintenance on your web services, it might not index any dynamic content at all.</p> <p>Furthermore, I have no proof of <em>ranking</em> differences between static content and dynamically-generated content. That might require another experiment. I think that it is very likely that, if content comes from external web service and does not load immediately, it might impact on Google’s perception of your site’s performance, which is a very important factor for ranking.</p> <p><strong>Recommended reading</strong>: <em><a href="https://www.smashingmagazine.com/2018/06/local-search-mobile-web-design/">How Mobile Web Design Affects Local Search (And What To Do About It)</a></em></p> <h3 id="other-considerations">Other Considerations</h3> <h4 id="compatibility">Compatibility</h4> <p>Up until recently, Googlebot used a fairly old version of Chromium (the open-source project on which Google Chrome is based), namely version 41. This meant that some recent JavaScript or CSS features could not be rendered by Google correctly (e.g. IntersectionObserver, ES6 syntax, and so on).</p> <p class="c-pre-sidenote--left">Google <a href="https://webmasters.googleblog.com/2019/05/the-new-evergreen-googlebot.html">has recently announced</a> that it is now running the latest version of Chromium (74, at the time of writing) in Googlebot, and that the version will be updated regularly. The fact that Google was running Chromium 41 might have had big implications for sites which decided to disregard compatibility with IE11 and other old browsers.</p> <p class="c-sidenote c-sidenote--right">You can see a comparison of Chromium 41 and Chromium 74’s support for features <a href="https://caniuse.com/#compare=chrome+41,chrome+74">here</a>, however, if your site was already <a href="https://en.wikipedia.org/wiki/Polyfill_(programming)">polyfilling</a> missing features to stay compatible with older browsers, there should have been no problem.</p> <p><strong>Always use polyfills</strong> since you never know which browser misses support for features that you think are commonplace. For example, Safari did not support a major and very useful new feature like IntersectionObserver until version 12.1, which came out in <a href="https://caniuse.com/#feat=intersectionobserver">March 2019</a>.</p> <h4 id="javascript-errors">JavaScript Errors</h4> <p>If you rely on Googlebot executing your JavaScript to render vital content, then major JavaScript errors which could prevent the content from rendering must be avoided at all costs. While bots might parse and index HTML which is not perfectly valid (although it is always preferable to have valid HTML on any site!), if there is a JavaScript error that <strong>prevents the loading of some content</strong>, then there is no way Google will index that content.</p> <p class="c-pre-sidenote--left">In any case, if you rely on JavaScript to render vital content to your end users, then it is likely that you already have extensive unit tests to check for blocking errors of any kind. Keep in mind, however, that Javascript errors can arise from unpredictable scenarios, for example, in case of improper handling of errors on API responses.</p> <p class="c-sidenote c-sidenote--right">It is better to have some real-time error-checking software in place (such as Sentry or LogRocket) which will alert you of any edge-case errors you might not pick during unit or manual testing. This adds to the complexity of relying on JavaScript for SEO content.</p> <h4 id="other-search-engines">Other Search Engines</h4> <p>The other search engines do <em>not</em> work as well as Google with dynamic content. Bing does not seem to index dynamic content at all, nor do DuckDuckGo or Baidu. Probably those search engines lack the resources and computing power that Google has in spades.</p> <p>Parsing a page with a headless browser and executing JavaScript for a couple of seconds to parse the rendered content is certainly more resource-heavy than just reading plain HTML. Or maybe these search engines have made the choice not to scan dynamic content for some other reasons. Whatever the cause of this, if your project needs to support any of those search engines, you need to set up pre-rendering.</p> <p><strong>Note</strong>: <em>To get more information on other search engines’ rendering capabilities, you can check <a href="https://moz.com/blog/search-engines-ready-for-javascript-crawling">this article</a> by Bartosz Góralewicz. It is a bit old, but according to my experience, it is still valid.</em></p> <h4 id="other-bots">Other Bots</h4> <p>Remember that your site will be visited by other bots as well. The most important examples are Twitter, Facebook, and other social media bots that need to <strong>fetch meta information about your pages</strong> in order to show a preview of your page when it is linked by their users. These bots will not index dynamic content, and will only show the meta information that they find in the static HTML. This leads us to the next consideration.</p> <h4 id="subpages">Subpages</h4> <p>If your site is a so-called “One Page website”, and all the relevant content is located in one main HTML, you will have no problem having that content indexed by Google. However, if you need Google to index and show any secondary page on the website, you will still need to <strong>create static HTML for each</strong> of those — even if you rely on your JavaScript Framework to check the current URL and provide the relevant content to put in that page. My advice, in this case, is to create server-side (or static) pages that at least provide the correct <code>title</code> tag and meta description/information.</p> <h3 id="conclusions">Conclusions</h3> <p>The conclusions I’ve come to while researching this article are the following:</p> <ol> <li>If you only target Google, <strong>it is not mandatory to use pre-rendering</strong> to have your site fully indexed, however:</li> <li>You should <em>not</em> rely on <strong>third-party web services</strong> for content that needs to be indexed, especially if they don’t reply quickly.</li> <li>The content you <strong>insert into your HTML immediately</strong> via Vue.js rendering does get indexed, but you shouldn’t use animated text or text that gets inserted in the DOM after user actions like scrolling, etc.</li> <li>Make sure you <strong>test for JavaScript errors</strong> as they could result on entire pages/sections not being indexed, or your site not being indexed at all.</li> <li>If your site has <strong>multiple pages</strong>, you still need to have some logic to create pages that, while relying on the same front-end rendering system as the home page, can be indexed by Google as individual URLs.</li> <li>If you need to have <strong>different description</strong> and <strong>preview images</strong> for social media between different pages, you will need to address this too, either server-side or by compiling static pages for each URL.</li> <li>If you need your site to perform on <strong>search engines other than Google</strong>, you will definitely need pre-rendering of some sort.</li> </ol> <div class="signature"> <img decoding="async" src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial"><span>(dm, yk, il)</span> </div> <p><strong>Acknowledgements:</strong> <em>Many thanks to Sigrid Holzner of <a href="https://www.seo-bavaria.de/">SEO Bavaria</a> / <a href="https://www.rabbithole-consulting.com/">Rabbit Hole Consulting</a> for her review of this article.</em></p> <p></p> </article> </div> <a href="https://topfeatured.com/send-press-releases/">Press Release Distribution Service</a> <div class="navigation"></div> </div> <div class="meta-data"> <p class="cat-link">Category: <a href="https://topfeatured.com/category/news/" rel="category tag">News</a><i id="sep"> | </i> <br><span class="authorlinks"><a href="http://topfeatured.com"><a href="http://TopFeatured.com" title="Visit Top Featured Content’s website" rel="author external">Top Featured Content</a>">Top Featured Content</a> <span class="date">May 22, 2019</span> @ 1:02 am </span> <span class="edit-link"></p> </div> </article><!-- ends article-entry --> </div><!-- ends post id --> <div class="responses"> </div> <div class='code-block code-block-4' style='margin: 8px 0; clear: both;'> <span style="color: #000000;">Feature your business, services, products, events & news. <a href="https://topfeatured.com/near-me/top-featured-business-listings/"><span style="color: #ff0000;">Submit Website</span></a>.</span><br /></span></strong></p> <center><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-8365375371343403" data-ad-slot="6921328502"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></center> </div> <div class="navigation"> <p><span class="alignleft"> « <a href="https://topfeatured.com/2019/05/21/publisher-correction-innervation-of-thermogenic-adipose-tissue-via-a-calsyntenin-3%ce%b2-s100b-axis/" rel="prev">Publisher Correction: Innervation of thermogenic adipose tissue via a calsyntenin 3β–S100b axis</a></span><span class="alignright"><a href="https://topfeatured.com/2019/05/22/well-tell-you-a-deep-truth-about-yourself-based-on-what-you-eat-for-dinner/" rel="next">We’ll Tell You A Deep Truth About Yourself Based On What You Eat For Dinner</a> »</span></p> </div> </article> <div class="c4 end"> <div id="primary-sidebar" class="primary-sidebar widget-area" role="complementary"> <div id="custom_html-5" class="widget_text widget widget_custom_html"><h3 class="widgettitle">Search TopFeatured.com</h3><div class="textwidget custom-html-widget"><script async src="https://cse.google.com/cse.js?cx=40812e90dc98d7e97"></script> <div class="gcse-search"></div></div></div><div id="custom_html-2" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- TopFeatured*5 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8365375371343403" data-ad-slot="1740256617" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div></div><div id="simpletags-2" class="widget widget-simpletags"><h3 class="widgettitle">Top Featured Tag Cloud</h3> <!-- Generated by TaxoPress 3.13.0 - https://wordpress.org/plugins/simple-tags/ --> <div class="taxopress-output-wrapper"> <div class="st-tag-cloud"> <a href="https://topfeatured.com/tag/alabama-news/" id="tag-link-156" class="st-tags t4" title="5005 topics" style="font-size:15.2pt; color:#00008e;">- Alabama News</a> <a href="https://topfeatured.com/tag/alaska-news/" id="tag-link-160" class="st-tags t2" title="3092 topics" style="font-size:13.6pt; color:#0000be;">- Alaska News</a> <a href="https://topfeatured.com/tag/arizona-news/" id="tag-link-189" class="st-tags t0" title="622 topics" style="font-size:12pt; color:#0000ee;">- Arizona News</a> <a href="https://topfeatured.com/tag/arkansas-news/" id="tag-link-157" class="st-tags t4" title="4957 topics" style="font-size:15.2pt; color:#00008e;">- Arkansas News</a> <a href="https://topfeatured.com/tag/business/" id="tag-link-63" class="st-tags t10" title="12132 topics" style="font-size:20pt; color:#000000;">- Business</a> <a href="https://topfeatured.com/tag/california-news/" id="tag-link-191" class="st-tags t9" title="11904 topics" style="font-size:19.2pt; color:#000017;">- California News</a> <a href="https://topfeatured.com/tag/colorado-news/" id="tag-link-167" class="st-tags t1" title="1825 topics" style="font-size:12.8pt; color:#0000d6;">- Colorado News</a> <a href="https://topfeatured.com/tag/connecticut-news/" id="tag-link-153" class="st-tags t8" title="9770 topics" style="font-size:18.4pt; color:#00002f;">- Connecticut News</a> <a href="https://topfeatured.com/tag/coronavirus/" id="tag-link-194" class="st-tags t0" title="8 topics" style="font-size:12pt; color:#0000ee;">- Coronavirus</a> <a href="https://topfeatured.com/tag/delaware-news/" id="tag-link-184" class="st-tags t2" title="3496 topics" style="font-size:13.6pt; color:#0000be;">- Delaware News</a> <a href="https://topfeatured.com/tag/diy/" id="tag-link-203" class="st-tags t0" title="278 topics" style="font-size:12pt; color:#0000ee;">- DIY</a> <a href="https://topfeatured.com/tag/flights/" id="tag-link-200" class="st-tags t0" title="1 topics" style="font-size:12pt; color:#0000ee;">- Flights</a> <a href="https://topfeatured.com/tag/florida-news/" id="tag-link-181" class="st-tags t0" title="31 topics" style="font-size:12pt; color:#0000ee;">- Florida News</a> <a href="https://topfeatured.com/tag/food/" id="tag-link-204" class="st-tags t0" title="796 topics" style="font-size:12pt; color:#0000ee;">- Food</a> <a href="https://topfeatured.com/tag/georgia-news/" id="tag-link-155" class="st-tags t0" title="450 topics" style="font-size:12pt; color:#0000ee;">- Georgia News</a> <a href="https://topfeatured.com/tag/hawaii-news/" id="tag-link-175" class="st-tags t3" title="4797 topics" style="font-size:14.4pt; color:#0000a6;">- Hawaii News</a> <a href="https://topfeatured.com/tag/history/" id="tag-link-195" class="st-tags t0" title="1 topics" style="font-size:12pt; color:#0000ee;">- History</a> <a href="https://topfeatured.com/tag/idaho-news/" id="tag-link-192" class="st-tags t1" title="2092 topics" style="font-size:12.8pt; color:#0000d6;">- Idaho News</a> <a href="https://topfeatured.com/tag/illinois-news/" id="tag-link-178" class="st-tags t4" title="4861 topics" style="font-size:15.2pt; color:#00008e;">- Illinois News</a> <a href="https://topfeatured.com/tag/indiana-news/" id="tag-link-168" class="st-tags t2" title="2481 topics" style="font-size:13.6pt; color:#0000be;">- Indiana News</a> <a href="https://topfeatured.com/tag/iowa-news/" id="tag-link-158" class="st-tags t3" title="4417 topics" style="font-size:14.4pt; color:#0000a6;">- Iowa News</a> <a href="https://topfeatured.com/tag/kansas-news/" id="tag-link-179" class="st-tags t2" title="2958 topics" style="font-size:13.6pt; color:#0000be;">- Kansas News</a> <a href="https://topfeatured.com/tag/kentucky-news/" id="tag-link-180" class="st-tags t2" title="3531 topics" style="font-size:13.6pt; color:#0000be;">- Kentucky News</a> <a href="https://topfeatured.com/tag/louisiana-news/" id="tag-link-161" class="st-tags t4" title="4961 topics" style="font-size:15.2pt; color:#00008e;">- Louisiana News</a> <a href="https://topfeatured.com/tag/maryland-news/" id="tag-link-172" class="st-tags t4" title="4882 topics" style="font-size:15.2pt; color:#00008e;">- Maryland News</a> <a href="https://topfeatured.com/tag/massachusetts-news/" id="tag-link-154" class="st-tags t4" title="5028 topics" style="font-size:15.2pt; color:#00008e;">- Massachusetts News</a> <a href="https://topfeatured.com/tag/michigan-news/" id="tag-link-171" class="st-tags t6" title="8045 topics" style="font-size:16.8pt; color:#00005f;">- Michigan News</a> <a href="https://topfeatured.com/tag/minnesota-news/" id="tag-link-183" class="st-tags t0" title="306 topics" style="font-size:12pt; color:#0000ee;">- Minnesota News</a> <a href="https://topfeatured.com/tag/mississippi-news/" id="tag-link-152" class="st-tags t7" title="8634 topics" style="font-size:17.6pt; color:#000047;">- Mississippi News</a> <a href="https://topfeatured.com/tag/missouri-news/" id="tag-link-164" class="st-tags t4" title="4892 topics" style="font-size:15.2pt; color:#00008e;">- Missouri News</a> <a href="https://topfeatured.com/tag/montana-news/" id="tag-link-150" class="st-tags t3" title="4400 topics" style="font-size:14.4pt; color:#0000a6;">- Montana News</a> <a href="https://topfeatured.com/tag/nebraska-news/" id="tag-link-162" class="st-tags t2" title="3364 topics" style="font-size:13.6pt; color:#0000be;">- Nebraska News</a> <a href="https://topfeatured.com/tag/nevada-news/" id="tag-link-190" class="st-tags t4" title="5551 topics" style="font-size:15.2pt; color:#00008e;">- Nevada News</a> <a href="https://topfeatured.com/tag/new-hampshire-news/" id="tag-link-149" class="st-tags t0" title="309 topics" style="font-size:12pt; color:#0000ee;">- New Hampshire News</a> <a href="https://topfeatured.com/tag/new-jersey-news/" id="tag-link-159" class="st-tags t1" title="1726 topics" style="font-size:12.8pt; color:#0000d6;">- New Jersey News</a> <a href="https://topfeatured.com/tag/new-mexico-news/" id="tag-link-174" class="st-tags t4" title="4872 topics" style="font-size:15.2pt; color:#00008e;">- New Mexico News</a> <a href="https://topfeatured.com/tag/new-york-news/" id="tag-link-205" class="st-tags t0" title="3 topics" style="font-size:12pt; color:#0000ee;">- New York News</a> <a href="https://topfeatured.com/tag/north-carolina-news/" id="tag-link-169" class="st-tags t4" title="4880 topics" style="font-size:15.2pt; color:#00008e;">- North Carolina News</a> <a href="https://topfeatured.com/tag/north-dakota-news/" id="tag-link-147" class="st-tags t0" title="422 topics" style="font-size:12pt; color:#0000ee;">- North Dakota News</a> <a href="https://topfeatured.com/tag/ohio-news/" id="tag-link-170" class="st-tags t0" title="213 topics" style="font-size:12pt; color:#0000ee;">- Ohio News</a> <a href="https://topfeatured.com/tag/oregon-news/" id="tag-link-185" class="st-tags t3" title="4635 topics" style="font-size:14.4pt; color:#0000a6;">- Oregon News</a> <a href="https://topfeatured.com/tag/philadelphia-news/" id="tag-link-177" class="st-tags t3" title="4622 topics" style="font-size:14.4pt; color:#0000a6;">- Philadelphia News</a> <a href="https://topfeatured.com/tag/politics/" id="tag-link-143" class="st-tags t4" title="5165 topics" style="font-size:15.2pt; color:#00008e;">- Politics</a> <a href="https://topfeatured.com/tag/protests/" id="tag-link-196" class="st-tags t0" title="19 topics" style="font-size:12pt; color:#0000ee;">- Protests</a> <a href="https://topfeatured.com/tag/rhode-island-news/" id="tag-link-148" class="st-tags t0" title="306 topics" style="font-size:12pt; color:#0000ee;">- Rhode Island News</a> <a href="https://topfeatured.com/tag/rioting/" id="tag-link-197" class="st-tags t0" title="14 topics" style="font-size:12pt; color:#0000ee;">- Rioting</a> <a href="https://topfeatured.com/tag/south-dakota-news/" id="tag-link-151" class="st-tags t0" title="468 topics" style="font-size:12pt; color:#0000ee;">- South Dakota News</a> <a href="https://topfeatured.com/tag/tennessee-news/" id="tag-link-165" class="st-tags t2" title="3572 topics" style="font-size:13.6pt; color:#0000be;">- Tennessee News</a> <a href="https://topfeatured.com/tag/texas-news/" id="tag-link-176" class="st-tags t7" title="8997 topics" style="font-size:17.6pt; color:#000047;">- Texas News</a> <a href="https://topfeatured.com/tag/travel/" id="tag-link-199" class="st-tags t0" title="1 topics" style="font-size:12pt; color:#0000ee;">- Travel</a> <a href="https://topfeatured.com/tag/utah-news/" id="tag-link-187" class="st-tags t0" title="343 topics" style="font-size:12pt; color:#0000ee;">- Utah News</a> <a href="https://topfeatured.com/tag/vermont-news/" id="tag-link-146" class="st-tags t7" title="8558 topics" style="font-size:17.6pt; color:#000047;">- Vermont News</a> <a href="https://topfeatured.com/tag/virginia-news/" id="tag-link-163" class="st-tags t4" title="4914 topics" style="font-size:15.2pt; color:#00008e;">- Virginia News</a> <a href="https://topfeatured.com/tag/washington-dc-news/" id="tag-link-166" class="st-tags t4" title="4891 topics" style="font-size:15.2pt; color:#00008e;">- Washington DC News</a> <a href="https://topfeatured.com/tag/washington-news/" id="tag-link-182" class="st-tags t7" title="9079 topics" style="font-size:17.6pt; color:#000047;">- Washington News</a> <a href="https://topfeatured.com/tag/west-virginia/" id="tag-link-145" class="st-tags t0" title="212 topics" style="font-size:12pt; color:#0000ee;">- West Virginia News</a> <a href="https://topfeatured.com/tag/wisconsin-news/" id="tag-link-173" class="st-tags t2" title="3526 topics" style="font-size:13.6pt; color:#0000be;">- Wisconsin News</a> <a href="https://topfeatured.com/tag/world-news/" id="tag-link-142" class="st-tags t8" title="10206 topics" style="font-size:18.4pt; color:#00002f;">- World News</a> <a href="https://topfeatured.com/tag/wyoming-news/" id="tag-link-144" class="st-tags t3" title="4059 topics" style="font-size:14.4pt; color:#0000a6;">- Wyoming News</a> <a href="https://topfeatured.com/tag/crypto-currency/" id="tag-link-207" class="st-tags t0" title="471 topics" style="font-size:12pt; color:#0000ee;">Crypto Currency</a> </div> </div> </div><div id="gs-posts-widget-5" class="widget widget_gspw_posts"><h3 class="widgettitle">Top Featured Business News</h3> <div class="gspw-posts grid-01"> <article class="post-1361838 post type-post status-publish format-standard has-post-thumbnail hentry category-business category-news tag-business"> <header> <div class="entry-image"> <a href="https://topfeatured.com/2024/11/15/best-marketing-franchises-to-start/" rel="bookmark"> <img width="420" height="420" src="https://topfeatured.com/wp-content/uploads/2024/11/marketing-team-420x420.png" class="attachment-gs-square-thumb size-gs-square-thumb wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://topfeatured.com/wp-content/uploads/2024/11/marketing-team-420x420.png 420w, https://topfeatured.com/wp-content/uploads/2024/11/marketing-team-150x150.png 150w" sizes="(max-width: 420px) 100vw, 420px" /> </a> </div> <h4 class="entry-title"> <a href="https://topfeatured.com/2024/11/15/best-marketing-franchises-to-start/" rel="bookmark">Best Marketing Franchises to Start</a> </h4> </header> <section> </section> <footer> </footer> </article> <article class="post-1361836 post type-post status-publish format-standard has-post-thumbnail hentry category-business category-news tag-business"> <header> <div class="entry-image"> <a href="https://topfeatured.com/2024/11/15/commercial-floor-scrubber-prime-choices-for-your-business/" rel="bookmark"> <img width="420" height="420" src="https://topfeatured.com/wp-content/uploads/2024/11/Oreck-Commercial-Orbiter-Hard-Floor-Cleaner-Machine-420x420.png" class="attachment-gs-square-thumb size-gs-square-thumb wp-post-image" alt="" decoding="async" loading="lazy" srcset="https://topfeatured.com/wp-content/uploads/2024/11/Oreck-Commercial-Orbiter-Hard-Floor-Cleaner-Machine-420x420.png 420w, https://topfeatured.com/wp-content/uploads/2024/11/Oreck-Commercial-Orbiter-Hard-Floor-Cleaner-Machine-150x150.png 150w" sizes="(max-width: 420px) 100vw, 420px" /> </a> </div> <h4 class="entry-title"> <a href="https://topfeatured.com/2024/11/15/commercial-floor-scrubber-prime-choices-for-your-business/" rel="bookmark">Commercial Floor Scrubber: Prime Choices for Your Business</a> </h4> </header> <section> </section> <footer> </footer> </article> <article class="post-1361835 post type-post status-publish format-standard hentry category-business category-news tag-business"> <header> <h4 class="entry-title"> <a href="https://topfeatured.com/2024/11/15/adobe-teams-up-with-benny-blanco-to-help-small-businesses-build-their-brands-using-adobe-express/" rel="bookmark">Adobe Teams Up with Benny Blanco to Help Small Businesses Build Their Brands Using Adobe Express</a> </h4> </header> <section> </section> <footer> </footer> </article> </div> </div><div id="custom_html-6" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- TopFeatured*5 --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-8365375371343403" data-ad-slot="1740256617" data-ad-format="auto" data-full-width-responsive="true"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script></div></div><div id="gs-posts-widget-2" class="widget widget_gspw_posts"><h3 class="widgettitle">Featured Entertainment News</h3> <div class="gspw-posts grid-01"> <article class="post-1328047 post type-post status-publish format-standard hentry category-entertainment category-news"> <header> <h4 class="entry-title"> <a href="https://topfeatured.com/2024/03/26/contemporary-music-landscape-2024/" rel="bookmark">Contemporary Music Landscape (2024) – The year 2024 brings forth a fresh wave of musical creativity, with artists weaving sonic tapestries…</a> </h4> </header> <section> </section> <footer> </footer> </article> <article class="post-1327880 post type-post status-publish format-standard hentry category-entertainment category-movies"> <header> <h4 class="entry-title"> <a href="https://topfeatured.com/2024/03/25/movie-releases/" rel="bookmark">Recent New Movies – Film Releases</a> </h4> </header> <section> </section> <footer> </footer> </article> <article class="post-1323848 post type-post status-publish format-standard hentry category-all category-entertainment"> <header> <h4 class="entry-title"> <a href="https://topfeatured.com/2024/02/26/india-seeks-26-bln-of-private-nuclear-power-investments-sources-say/" rel="bookmark">India seeks $26 bln of private nuclear power investments, sources say </a> </h4> </header> <section> </section> <footer> </footer> </article> </div> </div><div id="categories-4" class="widget widget_categories"><h3 class="widgettitle">Categories</h3> <ul> <li class="cat-item cat-item-17"><a href="https://topfeatured.com/category/all/">all</a> </li> <li class="cat-item cat-item-75"><a href="https://topfeatured.com/category/art/">Art</a> </li> <li class="cat-item cat-item-70"><a href="https://topfeatured.com/category/business/">Business</a> </li> <li class="cat-item cat-item-208"><a href="https://topfeatured.com/category/crypto-currency/">Crypto Currency</a> </li> <li class="cat-item cat-item-82"><a href="https://topfeatured.com/category/diy/">DIY</a> </li> <li class="cat-item cat-item-78"><a href="https://topfeatured.com/category/education/">Education</a> </li> <li class="cat-item cat-item-71"><a href="https://topfeatured.com/category/entertainment/">Entertainment</a> </li> <li class="cat-item cat-item-80"><a href="https://topfeatured.com/category/food/">Food</a> </li> <li class="cat-item cat-item-76"><a href="https://topfeatured.com/category/health/">Health</a> </li> <li class="cat-item cat-item-74"><a href="https://topfeatured.com/category/lifestyle/">Lifestyle</a> </li> <li class="cat-item cat-item-69"><a href="https://topfeatured.com/category/money/">Money</a> </li> <li class="cat-item cat-item-140"><a href="https://topfeatured.com/category/movies/">Movies</a> </li> <li class="cat-item cat-item-61"><a href="https://topfeatured.com/category/news/">News</a> </li> <li class="cat-item cat-item-59"><a href="https://topfeatured.com/category/real-estate/">Real Estate</a> </li> <li class="cat-item cat-item-81"><a href="https://topfeatured.com/category/restaurants/">Restaurants</a> </li> <li class="cat-item cat-item-77"><a href="https://topfeatured.com/category/science/">Science</a> </li> <li class="cat-item cat-item-58"><a href="https://topfeatured.com/category/shopping/">Shop</a> </li> <li class="cat-item cat-item-73"><a href="https://topfeatured.com/category/sports/">Sports</a> </li> <li class="cat-item cat-item-72"><a href="https://topfeatured.com/category/technology/">Technology</a> </li> <li class="cat-item cat-item-79"><a href="https://topfeatured.com/category/travel/">Travel</a> </li> <li class="cat-item cat-item-56"><a href="https://topfeatured.com/category/videos-2/">Videos</a> </li> <li class="cat-item cat-item-68"><a href="https://topfeatured.com/category/world-news/">World News</a> </li> </ul> </div><div id="block-2" class="widget widget_block widget_search"><form role="search" method="get" action="https://topfeatured.com/" class="wp-block-search__button-outside wp-block-search__text-button wp-block-search"><label class="wp-block-search__label" for="wp-block-search__input-1" >Search</label><div class="wp-block-search__inside-wrapper " ><input class="wp-block-search__input" id="wp-block-search__input-1" placeholder="" value="" type="search" name="s" required /><button aria-label="Search" class="wp-block-search__button wp-element-button" type="submit" >Search</button></div></form></div> </div><!-- #primary-sidebar --> </div> </section> <footer id="footer" class="row"> <div class="inner-footer"> <section class="c4"> <p>Copyright© 2024 <a href="/"> TopFeatured.com</a></p> <span class="footer-new-text"> The Best Of Everything Since 2012 </span> </section> <section class="c4"> </section> <section class="c4"> </section> </div> </footer> </div> <script type="text/javascript"> jQuery("#post-1361838 .entry-meta .date").css("display","none"); jQuery("#post-1361838 .entry-date").css("display","none"); jQuery("#post-1361838 .posted-on").css("display","none"); jQuery("#post-1361836 .entry-meta .date").css("display","none"); jQuery("#post-1361836 .entry-date").css("display","none"); jQuery("#post-1361836 .posted-on").css("display","none"); jQuery("#post-1361835 .entry-meta .date").css("display","none"); jQuery("#post-1361835 .entry-date").css("display","none"); jQuery("#post-1361835 .posted-on").css("display","none"); jQuery("#post-1328047 .entry-meta .date").css("display","none"); jQuery("#post-1328047 .entry-date").css("display","none"); jQuery("#post-1328047 .posted-on").css("display","none"); jQuery("#post-1327880 .entry-meta .date").css("display","none"); jQuery("#post-1327880 .entry-date").css("display","none"); jQuery("#post-1327880 .posted-on").css("display","none"); jQuery("#post-1323848 .entry-meta .date").css("display","none"); jQuery("#post-1323848 .entry-date").css("display","none"); jQuery("#post-1323848 .posted-on").css("display","none"); </script> </body> </html>