text:
SEARCHENGINES
Entireweb Articles
What It Means For SEO
Skills to Look for in a Freelance Software Developer
What can ChatGPT do?
Google December Product Reviews Update Affects More Than English Language Sites? via @sejournal, @martinibuster
Survey says: Amazon, Google more trusted with your personal data than Apple is
Google's John Mueller on Brand Mentions via @sejournal, @martinibuster
Why You Shouldn't Rely On Google Discover Traffic via @sejournal, @martinibuster
47 Creative February Marketing Ideas (Beyond Valentine's Day!)
How to Create an Editorial Calendar (+Free Template!)
The Top 14 Digital Marketing Trends of 2023, According to Experts
SEOs Trust YMYL Content Less If It Is AI-Generated
Google Ads Now Supports Account-Level Negative Keywords
12 Great Link Building Tools That Are Essential To Your Success
Top YouTube Videos, Shorts, And Ads of 2022
Database Security Best Practices: The Essential Guide
Google Issues Warning For 2 Billion Chrome Users
Top 5 benefits to make cloud storage a business priority
Facebook is bringing end-to-end encryption to Messenger calls and Instagram DMs
Extra Crunch roundup: CEO Twitter etiquette, lifting click-through rates, edtech avalanche
Your Quick Guide in 2023
Thousands of WordPress sites hit by gift card plugin flaw
This unused Star Wars poster could have ruined everything
How to Manage Your Online Brand?
How SEO Works in Digital Marketing
3 Effective Ways to Quickly Identify Your SaaS Brand's Top SEO Competitors
Picking SEO Keywords: An Expert's Guide
Now the internet's fighting over old scrollbar designs
Google Adds If-Modified-Since Section To Crawl Budget Help Document
Experience Remote done Right
NORAD to track Santa's annual voyage
How to get started with Passive Airbnb
Entireweb News Bot
Google not only changes how it presents information to users and updates algorithms, but the way users search is also changing.
SEO best practices are changing every year, so it's best to keep up with what it means to properly optimize a website today.
Signals Of Authenticity And Usefulness
Google has released five Product Review Updates since April 2021.
The associated guidelines that Google published for writing product reviews recommend specific on-page factors that must exist in order for the page to be ranked for product review-related search queries.
This is an extraordinary change in how sites are ranked. Google has redefined what it means for a webpage to be relevant for a search query.
The definition of relevance simply meant that a webpage has to be about what the user was searching for, in this case, product reviews.
Product reviews were commonly thought of as expressing an opinion about a product, comparing the features of the product to the cost, and expressing a judgment if something is worth purchasing or not.
But now, it's not enough for a webpage to review a product. It must also be authentic and useful. That's a big change in how sites are ranked.
Here are two product review Google ranking factors introduced in December 2021:
"…we are introducing two new best practices for product reviews, to take effect in a future update.
Provide evidence such as visuals, audio, or other links of your own experience with the product, to support your expertise and reinforce the authenticity of your review.
Consider including links to multiple sellers to give the reader the option to purchase from their merchant of choice, if it makes sense for your site."
Google calls them "best practices" but also says they will "take effect," which implies that it's something in the algorithm that is looking for these two qualities.
The first signal is about the authenticity of the product review.
The second signal is specific to sites that don't sell the reviewed products, and it's about being useful to site visitors by giving them multiple stores to purchase a product.
Authenticity and usefulness as signals of relevance is a huge shift for SEO.
Search Is Increasingly About Context
Context is the setting in which something is said or done, which provides meaning to those actions or settings.
The context of a search can influence the search results.
What's happening is that Google is redefining what it means to be relevant by understanding the user context.
When a user searches for [pizza], Google does not show recipes for pizza; it shows local pizza restaurants.
Google defines the meaning of the keyword phrase "pizza" according to the context of the user, which includes the geographic location of that user.
Another context that influences search results is current events, which can change the meaning of a search phrase. This is a part of what is known as the Freshness algorithm.
The Freshness algorithm takes into account time-based factors that can change the meaning of a search phrase, and this influences what websites are shown.
So, those are the contexts of geography and time influencing what it means to be relevant for a search query.
Search Is Increasingly About Topics
As noted in the discussion of the 2013 Hummingbird update, Google is increasingly moving away from keywords and more toward understanding the multiple meanings inherent in search queries.
Google is also redefining relevance through the concept of topics.
When someone searches with the keyword [mustang], the likeliest meaning is the automobile, right?
Screenshot from search for [mustang], Google, October 2022
In the above screenshot, Google lists multiple topics related to the Ford Mustang automobile.
Overview.
Images.
Configurations.
Clicking on any of the above-listed topics results in a different search result.
Some of the top-ranked sites appear on different topics because they are relevant to multiple topics. Something to think about, right?
Back in 2018, Google's Danny Sullivan tweeted about a way to change the search results by topic, which are the topic buttons we just reviewed above.
Danny tweeted:
"A new dynamic way to quickly change results is coming, such as how you can toggle to quickly change about a dog breeds.
This is powered by the Topic Layer, a way of leveraging how the Knowledge Graph knows about people, places and things into topics."
Screenshot from Danny Sullivan's Twitter, October 2022
Google published a blog post about these changes and discussed them in the section titled, Dynamic Organization of Search Results.
In the article, Google explained that it is organizing some searches by topics and subtopics.
"Every search journey is different, and especially if you're not familiar with the topic, it's not always clear what your next search should be to help you learn more.
So we're introducing a new way of dynamically organizing search results that helps you more easily determine what information to explore next."
Screenshot from blog.google, October 2022
People Also Ask (PAA) is a way for Google to help users navigate to the information they're looking for, particularly when the user searches with a vague keyword phrase, like CBD.
The queries listed in the PAA are topics.
People like to think of them as keyword phrases, but they are more than keywords. They are topics for webpage of content.
Screenshot from Google search, October 2022
Clicking the first topic, "Does CBD do anything?" reveals an article on the topic of whether CBD products work.
Some people and tools like to use every single People Also Ask suggestion box as keywords for use in a single comprehensive article.
But what is missed in that approach is that every individual suggestion is a single topic for one article.
Because Google likes to rank precise content, one would have better luck creating content for each topic rather than a giant page of content on multiple topics since a giant page is not particularly precise.
Google's focus on topics continues.
On September 28, 2022, Google introduced more ways to craft search queries by topic.
As you start typing in the search box, we'll provide keyword or topic options to help you craft your question. Say you're looking for a destination in Mexico. We'll help you specify your question, so you can navigate to more relevant results for you https://t.co/oWeCGjhevS pic.twitter.com/ywoseDKOWa
— Google SearchLiaison (@searchliaison) September 28, 2022
Takeaway: Google's Focus On Topics
Keywords are important because the proper use of the correct keyword phrases will help the content connect with users who use those keywords when searching for answers or information.
Advanced users tend to use more jargon, and less advanced users who have less knowledge will use more general terms.
Given that understanding, it's important to keep in mind that Google understands the world in terms of topics and not keyword phrases.
When Google looks at a page, it's understanding the page at the level of, "What's this page about? What is the topic?"
Content can appear unnatural when the content author focuses on keywords, in my opinion.
This happens is because a keyword-focused article tends to meander as the author tries to stuff the article with the targeted keyword phrases, sometimes repeating.
Keyword-focused content feels unnatural because the author is struggling to create sentences that include the keywords.
A better way to create content, in my opinion, is to focus on topics (as well as usefulness!).
Relevance And Topic Category
For some types of search queries, Google may be ranking sites that belong to a category of sites.
There is a 2015 patent named Re-ranking resources based on categorical quality that describes a way to rank webpages based on whether the category of the content matches the category implied by the search query.
I believe this patent may be related to the August 2018 Google update known as the Medic Update.
It was called the Medic Update because it noticeably affected the category of Health websites.
This patent represents a revolutionary change in how Google determines what is relevant for certain queries and discusses how it will re-rank the search results according to whether a website belongs to a topic category.
Google's patent first describes two kinds of searches: informational and navigational.
An informational search is one that can be answered by multiple kinds of sites. Google uses examples of queries about football and space travel as the kinds of searches that are informational.
It then notes that navigational queries are when users search using the name of a site, like YouTube.
Then it gets to the point of the patent, which is a type of search query that is relevant to a category of information.
The patent says:
"Sometimes, however, users may have a particular interest in a category of information for which there are a number of well-served resources."
That's why the patent is called, "Re-ranking resources based on categorical quality" and in the abstract (the description of the patent) it states, it's about "re-ranking resources for categorical queries."
The word "categorical" is used in the sense of something belonging to a category.
A simple description of this patent is that it will rank a search query and then apply a filter to the search results that are based on categories that a search query belongs to. That's what is meant by the word "re-rank."
Re-ranking is a process of ranking websites for a search query and then selecting the top results by re-ranking the results based on additional criteria.
The following passage from the patent uses the words "quality condition" and "resources."
In the context of this patent, the "quality condition" means the quality of being a part of a category.
A "resource" is just a webpage.
It first describes two ranking scenarios. A regular ranking of websites ("search ranking") and another ranking called a "quality ranking" that ranks pages that belong to a "category."
Remember, resources mean a webpage, and the quality condition is the quality of belonging to a category.
Here's the important passage from the patent:
"By re-ranking search results for a proper subset of resources that satisfy a quality condition, the search system provides a set of search results that lists resources that belong to a category according to a quality ranking that differs from a search ranking of a received query."
Next, it explains the benefit of re-ranking search results based on the "quality with respect to the category."
"Because the search results are provided according to a ranking that is based, in part, on quality with respect to the category, the search results are more likely to satisfy a user's informational need when the users issues a query that is categorical for the category."
Lastly, I call attention to the section titled, Detailed Description, where the patent goes into more detail.
First, it notes that when users don't know much about a category, they will tend to not use the jargon that is typical for that category and instead use "broader" or more general phrases.
"…when a user knows very little about the category, the queries are more likely to be broader queries.
This is because a user may not have developed an understanding of the category, and may not be aware of the websites and resources that best serve the category."
Next, the patent says that it will take that general query that is related to a category and match it to sites that fit into that category.
As an example, if someone searches on the topic of pain in the stomach, Google might match that query to the category of medical websites and re-rank the top-ranked search results to only show websites that belong to the medical category of websites.
The patent explains:
"The systems and methods described below re-rank resources for a broad categorical query by their corresponding quality in the category to which the categorical query corresponds.
The set of re-ranked search results are more likely to show the websites and resources that best serve the category."
To Be Relevant Means To Fit Into A Category
The point of that patent from 2015 is that Google likely changed what it means to be relevant.
For example, for medical queries, Google ranks websites with traditional ranking factors like links and content.
But then Google re-ranks those search results by filtering out all the sites that don't fit into the right category for that search query.
This change was a radical departure for Google in 2018 because it meant that alternative-health sites that used to rank for medical queries stopped ranking for those queries.
Those sites were not a part of the medical category, they were a part of the alternative-health category.
Google said that the 2018 update was not targeting health sites; it was simply more noticeable in that vertical.
That means that this change applies to a wide range of other categories as well.
This means that the meaning of relevance for some queries has changed. It's not enough to have certain keywords in the content for certain verticals, the content must also fit into the right category, described by the patent as the "quality with respect to the category."
Precise Search Results And Keywords
Google's search ranking algorithms have progressively become more precise.
Precision in search results is something that took off in a big way after Google's Hummingbird update in 2013.
What made search more precise after the Hummingbird update was that Google wasn't using all the keywords in a search query to match what is on a webpage.
Instead, what was happening is that Google was ignoring some words, particularly in natural language type searches, and focusing on what that query actually means and then using that understanding to match the search query to a webpage.
Precision is something important to think about when considering how to SEO a webpage.
Google engineer (at the time) Matt Cutts explained:
"Hummingbird is a rewrite of the core search algorithm.
Just to do a better job of matching the users queries with documents, especially for natural language queries, you know the queries get longer, they have more words in them and sometimes those words matter and sometimes they don't."
Cutts is quoted again in the above article expanding on the idea of precision:
"…the idea behind Hummingbird is, if you're doing a query, it might be a natural language query, and you might include some word that you don't necessarily need…
…Some of those words don't matter as much.
And previously, Google used to match just the words in the query.
Now, we're starting to say which ones are actually more helpful and which ones are more important."
This was the beginning of Google evolving to understand topics and what users really want.
Most importantly, Google's focus on precision remains and can be seen in their increasingly sophisticated ranking technologies like Google Lens, where Google can rank webpages based on users searching with images from their cell phones.
For example, one can take a snapshot of a bug that's on the ground and search with that.
Precision In User Intent
A change in search engines dating to approximately 2012/2013 is Google's increasing use of user intent in search results.
Google didn't announce the introduction of user intent into the search results.
And the reporting of a June 2011 Q&A between Matt Cutts and Danny Sullivan where Cutts discusses user intent went over the heads of the people reporting it.
In the Q&A, Cutts talks about how Larry Page came to him and asked why the search results for [warm mangoes] weren't so good.
Cutts wondered what the user intent was for that search and discovered some facts about how warm mangoes ripen in a box.
I was there during the Q&A, and I was blown away by Google's ambition to integrate user intent into the search results.
But none of the reporting in 2011 understood how the [warm mangoes] search fit into what Cutts was talking about, even though he mentioned the phrase "user intent."
So, it was just reported as an amusing anecdote about warm mangoes.
Over 10 years later, everyone is talking about user intent.
But there's a new understanding of intent that goes beyond the current understanding of it.
It's the understanding that user intent is more than just informational, transactional, etc.
Those categories are actually very general, and there is actually a more nuanced way to understand user intent by understanding the verbs used in search queries.
Dixon Jones of content optimization tools site Inlinks shares their revolutionary approach to understanding user intent:
"Verbs fundamentally change keyword research.
My best practice recommendation is to abandon the notion of "User intent" being described as "Informational/Navigational/Transactional/commercial or Local Intent".
Boxing user intent into only four vague descriptions is not entirely accurate.
A user's intent when they search is far more nuanced than trying to do one of four things, it is more specific.
User intent is much better described by analyzing verbs.
Most keyword research data focuses on words or phrases, without understanding user intent, which can lead to fundamental errors.
For example, a site about horses might do keyword research that finds search volumes around phrases like "Mustang" or even "Horse power" which are entirely different topics and concepts, which may or may not be relevant to a website's topic.
Here is the key point: Words generated through keyword research are not specifically relevant to what anyone searches for without a verb in the search query to give the search context.
The verb "ride" and "mustang" together suggests and entirely different meaning and audience than the verb "drive" and "mustang."
Further, a phrase like "buy a Mustang" probably isn't relevant to a horse website because the most popular intent is related to an automobile.
Without any other information about the user, you cannot know for sure other than to make a guess based on the most popular intent.
But it's still just a guess.
Google may well know more about the user, based on their search history, but all you can do as an SEO is to be true to your website's topic and purpose.
If you start writing content around a keyword phrase simply because the search volumes are high, it's possible for the site to lose context, rather than improve context.
Analyzing verbs in keyword research is one of the ideas that we have been researching at InLinks.net.
Using NLP algorithms can help weed out irrelevant keyword suggestions when the entities and verbs in the user queries are checked for proximity to topics in your own content."
Search Queries Have Evolved
It's important to note that Google continues to evolve what it means to search. Initially, searching meant typing words into a desktop or laptop computer.
Then, it involved speaking those queries into a mobile phone.
Now, it's changing to include searching with images through the Google Lens app.
For example, I wanted more information about a bottle of wine at the store. I took a photo of it and submitted it to Google Lens, which returned search results about that wine.
What's notable about evolving search queries is that it's Google that is driving the evolution by creating new ways for users to search, such as Google Lens.
On September 28, 2022, Google announced nine new ways for users to conduct shopping searches.
It shared:
"Today at our annual Search On event, we announced nine new ways we're transforming the way you shop with Google, bringing you a more immersive, informed and personalized shopping experience.
Powering this experience is the Shopping Graph, our AI-enhanced model that now understands more than 35 billion product listings — up from 24 billion just last year."
And then there is multi-search, a new way to search:
With multisearch, you can take a pic *and* ask a question to get the look you want or fix something. 🤯 We're bringing this new way to search to 70+ languages. And soon, you'll be able to add "near me" to your image to find what you're looking for nearby. #SearchOn pic.twitter.com/RHxRQm42EU
— Google (@Google) September 28, 2022
Each change to how users can search and how Google presents information is an opportunity for businesses to claim a share of the new ways of searching and being discovered.
The old way of 10 blue lines is long behind us, powered by changes in technology.
It's a new era for search. Are you up to date?
Featured Image: Masson/Shutterstock
Related Topics:Meansseo
Link Building for SEO: The Beginner's Guide
How to Use ChatGPT For Blogging 2023: 15 Time-Saving Tactics!
5 Important Steps To Take in 2023
EntirewebNewsBot
Every month, 2.98 billion people around the globe open up their laptops or smart devices and navigate their way to Facebook.
That's roughly a quarter of everyone in the world, visiting the same social media platform, every single day.
Mark Zuckerberg likely didn't imagine such astounding reach in his wildest dreams when he launched the first iteration of what would become the world's most popular social networking site in 2003.
These days, nearly everyone uses Facebook, and it's become as much a part of daily life as watching television.
For marketers, this means a massive opportunity to reach and engage with new audiences.
But you can't just set up a company page and hope to attract millions of followers. You need a plan to capitalize on these opportunities and make the maximum impact.
If you're a Facebook marketing beginner, this may sound like a daunting task, but don't worry – it's easier than you think.
Continue reading for an in-depth guide to Facebook marketing that you can use to get started right away.
What Is Facebook Marketing?
Facebook marketing is the process of using the social media platform to promote your business to potential buyers.
There are a variety of ways to do this, both paid and organic.
Paid Facebook marketing means using advertising campaigns within the platform to target people on the site and ideally, convert them into customers.
Organic marketing on Facebook occurs when you post content that your targets will find valuable, with the goal of increasing your following and engaging with your audience.
Why You Should Be Marketing On Facebook
If nearly 2 billion potential customers using Facebook didn't entice you to create your own business profile, maybe this will: There are currently more than 200 million businesses already using Facebook's free tools and apps.
And, of those, more than 3 million are actively advertising on the platform.
That means there's a good chance your competition is already using this social media site to grow their business.
And if they're not, jumping on board now will give you a serious edge over them.
So, with no further ado, let's get started.
How To Set Up Facebook For Business
The very first thing you need to do to launch your marketing efforts on Facebook is to create a page for your business.
It's free to set up and gives you a place for people to like or follow you. It also gives you a chance to engage with your customers (and potential customers), and share content with them via posts.
In your web browser, go to facebook.com/pages/create and select the category that best describes your organization. For most people, that's going to be "Business or Brand."
You'll then be directed to a page where you can enter your brand's name, select the category your business falls under, and add bio information.
If you're a bit stuck on what to include in your bio, don't worry – you can always change it later.
You'll also have an opportunity to add a logo and cover image – again, don't worry, these can be changed.
Next, you'll be able to claim your unique URL, which will likely be something along the lines of facebook.com/TheNameOfYourBusiness.
The next step is an important one: editing your page info.
Make sure you provide all relevant details including your address, service hours, and other details customers and prospects might be looking for.
Congratulations – you've just created your Facebook business page. Now, it's time to figure out how to use it for marketing.
How To Build A Facebook Marketing Strategy
As you probably already know, Facebook makes its money via advertising revenue. As such, it has made it simple for even the most technologically inept person to use it for marketing.
And this includes offering free information on how to create your own social media strategy.
You can read that helpful guide at your leisure, but for now, let's break it down into eight steps:
Set your goals – What do you hope to accomplish via Facebook marketing? Facebook has three marketing objectives: awareness, consideration, and conversion.
Identify your audience – How old are they? Where do they live? What is their level of education? How can your offering solve their problem? Facebook lets your market with remarkable precision, so the more information you have on your targets, the better.
Plan your content – Decide what kind of things you'll post. It could be industry news, behind-the-scenes pictures, or promotions – get as creative as you like. Just make sure you're planning content your audience will like.
Create a content calendar – Decide when you will post specific pieces of content. Be as accurate as you can, right down to publishing time, because there will likely be times when your audience is more active.
Create your content – It's time to put step three into action and create engaging pieces. Read this article for tips on keeping your content interesting and relevant.
Explore Facebook's free tools – Facebook has several options for sharing content, including text, image, and video posts, as well as Stories and live streams.
Determine how you will use ads – You have multiple options for advertising on Facebook. We'll go into them in more detail in the next section so you can choose what's right for your needs.
Add the Facebook Pixel to your website – Don't forget to add the tracking code to your website to collect data, enable retargeting, and track conversions.
Types Of Facebook Posts For Marketing
Facebook offers incredible flexibility when it comes to marketing, with numerous post and paid ad options.
Let's first dive into the posts.
Facebook Marketing Post Types
The type of post you use when marketing on Facebook will depend on what you're hoping to accomplish. Some of the more popular are:
Text posts or status updates – these are a great way to initiate conversations, share information, and educate your followers.
Photo posts – A great way to capture attention, images are useful for attracting new customers.
Video posts – Videos are a great way to engage with your audience and encourage interaction.
Facebook Live – Use the platform's live streaming capabilities for product demonstrations, answering questions, or interacting with your followers.
Link posts – Use posts with direct links to your external website or blog. They include an automatic preview.
Stories – Just like Instagram Stories, Facebook Stories are great for building engagement without disrupting your followers' feeds.
Pinned posts – Stuck at the top of your page, these are great for maximizing the reach of top-performing posts or relaying critical information, promotions, or events.
Once you have your business page set up and you've begun sharing content, the next phase of Facebook marketing is to venture into paid ads.
Facebook Ad Types
At the moment, there are four main types of ads on the platform:
Image Ads
Screenshot from Facebook, January 2023
These are static ads in JPG or PNG format. They should include a headline of up to 40 characters and the main text of 125 characters.
You also have a link description area which should be used for a clear and succinct CTA.
Image ads are easy to set up and work well for driving traffic to your website.
For a list of best practices for this ad format, click here.
Facebook video ads are a great way to boost your brand and don't require expensive recording equipment or software. You can record these spots using your phone and there are a number of free editing apps that can help you.
Video ads can be placed in-stream (the short commercials that are shown before a video your target wants to watch), in-feed, or in Stories.
As a general rule of thumb, they should be under two minutes long and have an attention grabber within the first three seconds.
For more video best practices, click here.
Carousel Ads
Carousel ads combine multiple videos and images into a single ad, which is a great way to improve your chances of conversion.
They tend to work best for ecommerce brands, as they allow you to showcase multiple products or angles of a single product in one ad.
Ideally, these should point to a purpose-built landing page.
Here are some other best practices offered by Meta.
Collection ads are another way for e-commerce brands to showcase products but are more similar to image ads than carousels.
You are restricted to a 40-character headline and a 125-character primary text.
Read about collection ads best practices here.
Which Goal Should I Focus on For Facebook Marketing?
The type of marketing that will work best for your brand depends on your goals.
As was mentioned previously, Facebook has three objectives that correspond with the top, middle, and bottom of the sales funnel, respectively:
Facebook has two awareness objectives to help you expand your reach and generate interest:
Brand awareness – Used to entice a new audience or keep your brand top of mind. This usually results in little audience action.
Reach – Designed to reach as many people as possible within your ad budget.
Consideration lets you choose from six objectives:
Traffic – Choose this objective when you want to increase the number of visitors to your external website.
Engagement – This is used to encourage people to like and comment on your posts, or respond to event invitations.
App promotion – Used to drive downloads of your app in Google Play or the App Store.
Video views – If you're showcasing your brand or highlighting a unique value proposition (UVP). It's also a good way to lay the groundwork for future retargeting.
Lead generation – Collect information about your customers and add them to your sales funnel.
Messages – Use this when you're seeking to start conversations around your brand.
Conversions lets you choose from three objectives:
Conversions – This could be making a purchase, signing up for a newsletter, or taking any other action.
Catalog sales – By connecting your e-commerce store with Facebook Ads, you can promote products from your catalog.
Store traffic – Use this to drive traffic to your physical location by targeting nearby potential customers.
Once you have determined your objectives, you can determine which format will work best to help you accomplish your goals.
From here, you'll need to determine your budget and schedule. You can opt for either a daily or monthly budget, with the option for an end date for time-sensitive promotions.
Next, you'll choose your audience – a process we'll dive into in the next section – and select your placements.
If you've never placed ads on Facebook before, you will probably be best served by selecting Automatic Placements, which will allow the social media platform to determine where you're likely to get the best results.
If you know what you're doing, you can customize your placement and select things like device type and operating system.
When Not To Use Facebook Ads
There's no question that running Facebook ad campaigns can be extremely beneficial. But it's not a magical sales multiplier.
In fact, in some situations, it can be a complete waste of money – and Facebook Ads can be quite costly.
Here are some situations when you should not use Facebook Ads:
You're unclear on your targeting – Nothing will blow through your ad spend faster, and with less to show for it, than going after the wrong demographic.
You're not using your metrics – As with every marketing campaign, your Facebook Ads should be subject to measurement and A/B testing to find the optimal placement and format.
You don't have anything worth sharing – To get engagement, your ads need to be compelling. It could be a unique product, a special event, or a sale, but people need a reason to click your ads.
Your landing page and ad are disconnected – If you're promising one thing in your Facebook Ad and then delivering something different on your website, people will not follow through with your CTA.
Using Facebook Analytics
Facebook's biggest value to marketers lies in its analytics capabilities via Facebook Insights.
To access it, go to your Page Manager and click on Insights.
You'll be presented with quite a lot of data, created using a default range of 28 days. You can change this as needed.
The first thing you'll likely want to check is the Overview tab, which will tell you how your page is performing. This gives you key metrics about your page and your most recent posts, and compares you to similar pages.
Use the Likes tab to see the averages, growth, and source of your likes to help you understand how your page is performing.
The Reach tab tracks how many people have seen your posts, their reactions, comments, and shares, as well as how many have hidden them or reported them as spam.
Page views help you identify where your traffic is coming from and how many views your posts are receiving.
Under the Actions of Page tab, you'll get a report of what actions visitors took on your Facebook page, as well as demographic information on the people who clicked your phone number or website or took another action.
There are also separate tabs to tell you how your posts, events, and videos are performing on the platform.
The People tab gives you information about who saw and engaged with your posts or page. It gives you data on your fans, as well as reach and engagement numbers.
The Messages tab tracks Messenger analytics, including response time, while Promotions gives you an overview of recent sales and promotions.
Branded Content lists your mentions from Verified Pages (those with a blue checkmark).
Finally, there's the Local tab, which while not relevant for strictly online businesses, is extremely valuable for any company with a physical location.
It gives you information about the foot traffic in your area, as well as demographic information about these people and the number of people nearby who saw your ads.
How To Create Great Facebook Campaigns
There is no question that Facebook can be an excellent marketing tool for virtually any organization.
But if you don't pay attention to what you're doing, it can also be an easy way to blow through your advertising budget in no time.
To ensure your Facebook marketing campaigns give you the biggest bang for your buck, here are some key takeaways to keep in mind:
Identify your audience and write to it – Keep your posts only as long as is required to persuade a target. Keep your ads within specified limits. Keep your CTAs short and to the point.
Don't take a "one-size-fits-all" approach – Facebook allows you incredible targeting options. Use them. Highly targeted ads are going to perform much better than those that take a scattergun approach.
Have a good offer – Even the best copy and image can't overcome a bad offer. Make sure you're providing something people want.
Connect your visuals with your copy – Copy should reinforce your images and videos and vice versa. Make sure yours does.
Refine your strategy – You're not going to get everything perfect for your first, second, or even hundredth Facebook campaign. In fact, there are no perfect campaigns. That means you should always be working on your strategy and content, striving to find something better.
Featured Image: Production Perig/Shutterstock
It may not look like one of the fancy, paid SEO tools you're used to logging into, but Excel remains one of the most versatile and powerful tools in an SEO professional's toolbox.
You can use Excel to track and analyze key metrics such as rankings, website traffic, and backlinks.
Use it to create and update meta tags, track and analyze competitors' SEO strategies and performance, build automated reports, and take care of many of the data tasks you'll encounter every day.
Combine your Excel knowledge with Python, Tableau, R, and other tools, and there is nothing you can't do.
If you've never worked with data before, you'll find Excel has a bit of a learning curve, but you can use it right from the start. And it's flexible enough to scale and grow as your site grows.
Why Excel For SEO Tasks?
While many paid tools can help you do the same tasks, Excel is a fantastic option to enhance, combine, or replace those tools.
It's affordable and comes with a range of tools you already use.
There are a ton of resources and courses to help you learn.
Easily handles large amounts of data.
Sorting and de-duplicating – a feature often missing when you need it.
Create and manage databases with simple formulas.
Data ports easily to other tools and is available for other tasks.
Pivot tables and smart charts.
1. Combine Multiple Data Sources
You will often find yourself having to merge data from multiple sources.
This is intuitive and quick in Tableau, Python, or R, but you can do the same in Excel using Power Query.
There are a few steps to this process, but it's not as complicated as you might think – even if you are new to working with data or Excel.
Power Query has automated and simplified tasks that required a lot of time and skill.
And it is probably THE best Excel feature for business and SEO professionals.
Seem a bit daunting? Don't worry. There are several courses and tutorials on YouTube to get you started.
What It's Good For:
Building reports.
Analytics and sales data.
Combining data sources to identify opportunities and gain insights.
2. Data Cleaning
Much of your time is lost simply preparing data for analysis. It doesn't have to be that way.
Large lists are often larger than they need to be. Finding and manually removing all the duplicates, however, can be a serious pain.
Excel can do this instantly for you. Simply go to the "Data" tab and click "Remove Duplicates."
Screenshot from Excel, January 2023.
Unwanted spaces and blank lines tend to cause havoc with many tasks, formulas, and statistics.
Excel will remove them for you simply by going to Edit > Find > Go To. Select "Special," "Blanks," and tell Excel how it should handle them.
"Convert text to columns" can be a lifesaver, especially if you've received data where the addresses or names are all in the same cell or you need to extract domains from email addresses.
Go to Data > Text to Columns. Then, indicate what to use for Delimiters (comma or space) and preview the results. When you're ready, click "Next," choose a destination, and click "Finish."
When To Use It:
Data processing.
Processing and cleaning lead databases.
Working with any data.
3. Power Excel With Add-On Tools
Some of the more complex tasks, such as crawling, require a bit of coding knowledge.
If you don't have that in your skillset, however, there are tools you can download, integrate with other tools, and add on.
Screenshot from SEOTools, January 2023.
SEOTools offers off and on-page SEO tools, integrations, connectors, spiders, and several other tools that make it easy to customize your Excel and create custom projects.
SEOGadget brings the power of Moz, Grepwords, and Majestic to Excel.
Analysis ToolPak is for serious data analysis. This add-on improves and automates in-depth statistics, perfect for forecasting, trending, regression analysis, and more complex data analysis tasks you might otherwise perform in R or Python.
Reporting.
Regular data analysis.
Presentations.
Integrating and coordinating with other teams.
4. Infographics And Charts
Data is useless if you can't understand it.
In fact, data visualization and storytelling are likely some of the most important skills you can have. This is where tools like Power Query and PivotTables come in.
Built right into Excel, pivot tables are the other valuable tools you have for this purpose.
However, instead of just creating a straight pivot table and a related chart, save yourself some steps by creating a master "template" first that you can then replicate as needed and adjust to suit your needs.
In many instances, however, you will need to work with dates or segments of the data. For that, you'll want to enter splicers and timelines.
To splice data into segments: Select the pivot table and go to PivotTable Tools > Analyze > Filter > Insert Slicer. Then, simply input how you would like to segment the content (e.g., by product or topic).
To utilize timelines: Click the pivot table's tools option, go to Analyze > Filter > Insert Timeline. Once there, you can choose what you'd like to use, style it, add captions, and more.
If you've never used Excel's PivotTables before, a short tutorial will have you on your way to analyzing data in no time.
Still want a little more? Make your reports, social media, and updates even better by upping your data visualization game with add-ons like People Graph.
Daily updates.
Surface data analysis.
Team collaboration and integration.
5. Automate Common Tasks With Macros
SEO, particularly agency SEO, is full of repetitive tasks like weekly reporting that consume much of your time. Excel's macros are the answer. And they're really easy to use.
Under the "View" tab, click "Macros" and "Record Macro."
Fill out the details.
The macro is now recording. So, simply walk through the steps that you'd like to automate. And when you're done, go back to the ribbon and stop the recording.
When you're ready to run the automation, go to the macro button in the ribbon, click "View Macros," and select the desired macro from the list.
If you have some macros that you use more often than others, you can add them to the Quick Access Toolbar.
Sorting.
Calculations.
Reformatting data.
Setting up new site documents or new pages for reports.
6. Easily Import Feeds And Data Into Excel
If you use Google Alerts or publish frequently, automatically importing feeds into Excel can be a huge time saver.
To start, simply grab the RSS feed address. (Or, create an alert for Google Alerts and have them delivered as an RSS feed.)
Screenshot from Google Sheets, January 2023.
Then, go to Google Sheets and use the IMPORTFEED function to bring the updates straight into a spreadsheet.
Alternatively, you can add the information to separate columns.
From here, you can regularly download and import the data into Excel, combine it with other related data, or integrate it into your custom dashboards.
If you need something a little more automatic, use Google Apps Script or one of the add-ons available to automate the process.
Want a little more data behind your reports? You can scrape and import Google Search Results into Excel, too.
7. Backlink Analysis
To analyze backlinks with Excel, collect backlink data with tools such as Ahrefs, Majestic, or Google Search Console.
Then, import it into Excel and use it to analyze your backlinks in a number of ways:
Who links to you: Use Excel's sorting and filtering tools to filter the data and use the IF function: IF(logic, true_value,[false_value]) to sort and identify domains linking to you.
What do people link to: Sort and filter to see the anchor text used most often for your backlinks (using frequency/count).
When did people link to you: Organize the data by date to see how old your links are and when most of your backlinks were acquired.
Find trends or patterns in your backlink profiles with pivot tables, groups, charts, and graphs by combining your backlink and sales or conversion data.
Highlight specific data based on certain conditions with conditional formatting. This makes it easy to spot backlinks from high-authority websites or backlinks with specific anchor text.
Many people overlook Excel either because they think it's too basic to be of much use. Or it looks too intimidating or daunting to learn.
But those of us who use it understand just how powerful it can be and the unlimited possibilities it provides.
Hopefully, these tips will help you craft better strategies, find new opportunities, and tell your story with better reports and dashboards.
Featured Image: Paulo Bobita/Search Engine Journal
Link-building strategies, along with SEO tools, have certainly changed over the years.
Since the old automated link-building tools that automatically placed content like KontentMachine or GSA's Search Engine Ranker, modern tools have moved to manual research and outreach platforms.
Tools that many of my link-building colleagues and I use today look more like ones used for public relations (PR) rather than link-building. However, there are still tools specific to link building that aren't going anywhere.
These can be divided into four categories:
Link research.
Prospecting and outreach.
AI-powered tools.
Emerging technologies powered by AI can make the link-building process easier.
Link Research Prospecting And Outreach Reporting AI-Powered Tools
1. Majestic
Excellent for identifying the types of domains you should generate links from.
3. Pitchbox
Combines email outreach with SEO metrics.
8. Agency Analytics
Connects a variety of performance metrics.
10. Link Whisperer
Good for internal linking efforts.
Provides useful reports to analyze trends.
4. BuzzSumo
Use to identify authors and sharers/backlinkers.
9. Cyfe
Customizable but automatic reporting.
11. Postaga
Find opportunities and initiate outreach.
A browser extension that helps you find contact information.
12. CTRify
WordPress plugin that generates content.
6. BrightLocal
Submit and manage citations.
7. HARO
Link Research Tools
Link research is vital to figuring out what type of sites you should be approaching. This includes establishing quality criteria, categories of sites, authority metrics, and others.
Majestic and Ahrefs are two research tools that provide large databases and robust reporting.
I've included both of these sites as I constantly see each having data that the other doesn't.
You may find some links to your competitors' sites in Majestic that aren't listed in Ahrefs and vice versa.
These tools can be used together to build a comprehensive list of sites to analyze. As with many SEO tools, the pricing depends on how many features your team needs.
Pricing: $49.99 per month with one user for the 'Lite' package. $99.99 per month for the "Pro" package, which they recommend for SEO agencies and consultants.
Payment options: Monthly or receive a discount for an annual subscription.
Screenshot from Majestic, January 2023
Here are some recommendations on using it and what reports should influence your link-building.
Topics: This data can be used to identify the types of sites you should be generating links from. Consider running this report on the link profiles for top-ranking sites, then finding sites that fit into similar categories.
Referring Domains: Use this to evaluate the number of unique domains you should focus on building for your site. This also offers a look into the trust/citation flow distribution (count of domains by trust/citation flow).
Pricing: $99 per month with only one user for the 'Lite' plan. $199 per month for the "Standard" plan.
Screenshot from Ahrefs, January 2023
In contrast to Majestic, Ahrefs has some reports that are much easier to run inside the tool. It certainly costs more, but if you want more data, then Ahrefs is the right choice.
Here are reports to use in Ahrefs over Majestic:
Pages > Best by links: Two useful applications of this report are:
Identify competitors' most linked content to influence your content strategies.
Identify the type of sites that link to the content you will produce.
Pages > Best by link growth: This is a "trend" report providing content that has been generating links over the last 30 days. Find content here that is receiving a rapid number of links and create more robust content.
Prospecting And Outreach Tools
Finding highly relevant sites that may link to your content is the most excruciating part of link building.
You can create a large list of sites and bulk outreach to save time, but when evaluating your link-building success on links gained per hour and the quality of those links, it's best to handle prospecting manually or in a semi-automated approach.
I'll go through five tools, Pitchbox, BuzzSumo, Hunter.io, BrightLocal, and HARO.
These tools can be used for the most popular link-building strategies.
Pricing: Averages $500+ per month.
Payment options: Prices are dependent on an individual walkthrough with Pitchbox.
Pitchbox is one of the pricier tools on the market compared to email tools like MailChimp, but integrated prospecting helps reduce the time to qualify sites.
The prospecting sites list builder and SEO metrics integrated right into the opportunities report make the tool stand out.
Screenshot from Pitchbox, January 2023
Pricing: $99 per month for the "Pro" package. $179 per month for the "Plus" package. There's a pared-down free version with limited searches per month.
Payment options: There is also a free version with limited features.
This is an excellent tool for building lists of blogs, influencers, and authors. Out of all the prospecting tools on the list, BuzzSumo has the best filtering options.
You can use the tool for a lot of purposes, but for link building, these are two effective use cases:
Identifying authors: The content research and influencers sections provide lists of authors/influencers that are searchable by keywords in the content they shared or produced. One fantastic use for this is to search through the "most shared" report and find influencers that received more than 2,000 shares of their content, then outreach to them to share yours. This can yield a lot of natural links.
Identifying sharers/backlinks: The second use goes a layer deeper than the first, finding those that have shared the content. Pull a list of shares or backlinking websites by content, then create similar but better content.
Screenshot from Buzzsumo, January 2023
Pricing: Starts at free. The first two upgraded packages are $49 per month and $99 per month.
Payment options: Free for 25 monthly searches up to $399 per month for 30,000 searches.
This browser extension finds email addresses for easy contact options.
It helps cut down on time spent sifting through About pages. You can also take it a step further and use the tool for outreach.
Screenshot from Hunter.io, January 2023
Pricing: $29-$79 per month, depending on package size.
Payment options: You can also pay for the citation builder, reviews, or enterprise.
Citation building is important for local SEO and should be considered a link-building project.
One of the tools with the best value for submitting and managing citations is BrightLocal.
There are two components: citation monitoring and citation building. The tool also allows you to figure out how you're ranking based on the local competition.
Screenshot from BightLocal, January 2023
Pricing: Starts at free. The first paid plan is $19 per month, which adds alerts and search functionality.
Payment options: The free options offer media options delivered to your email three times a day and up to $149/month for premium.
While this tool is traditionally used in the journalism world, it can also help link builders. It connects you with credible sources and allows you to build natural backlinks.
Screenshot from HARO, January 2023
Although many of the tools in the previous section have reporting functionality built in, I've found them lacking in custom reporting or the ability to associate links to ranking performance.
These tools solve that issue; AgencyAnalytics and Cyfe.
Pricing: $12 per month, per campaign. $18 per month per campaign for custom reporting features.
Payment options: Pay annually to save money.
Agency Analytics automatically populates the dashboard with data from Moz and Majestic and connects that data to critical performance metrics, like ranking and organic traffic.
Qualified traffic that converts to leads or sales is the purpose of link-building and SEO efforts, so reporting needs to make a connection between them.
Screenshot from Agency Analytics, January 2023
Pricing: $19 per month for one user, with higher tiers for more users.
Payment options: Unlimited users for $89/month.
This tool can be built out as a hybrid between Google Sheets and Agency Analytics, meaning it's very customizable but can also automatically and easily aggregate data from multiple sources to create a meaningful report.
Screenshot from Cyfe, January 2023
AI-Powered Tools
AI-powered tools can significantly simplify otherwise complex and time-consuming tasks. Remember that some of your processes will require a human touch, so always evaluate how performance is impacted when integrating AI into your processes.
The following tools, Link Whisper, Postaga, and CTRify use AI to discover opportunities and automate processes.
10. Link Whisper
Pricing: $77 per month for one site, with additional plans for more sites.
Payment options: One to 50 site licenses.
Link Whisper is useful for internal link building.
AI technologies offer automatic link suggestions as content is produced. It can also help you recognize old content that needs more links directed to it.
The tools also automate links based on keywords and offer internal link reporting. It's pretty all-inclusive and can help speed up internal link-building automatically.
Screenshot from Link Whisperer, January 2023
Pricing: $84 per month for one account with five users. $250 per month for 30 accounts with unlimited users.
Payment options: Save by paying annually.
Postaga does everything from finding opportunities to initiating outreach.
AI comes into play with the outreach assistant, which finds relevant information from influencers to include in emails. You can also enter your domain into the tool to find relevant campaign ideas.
Screenshot from Postaga, January 2023
Pricing: A free version. $197 or $497, depending on the plan.
Payment options: Single payment.
CTRify is a WordPress plugin that is great for content creation.
All it takes is a single keyword, and the AI creates the content you need for a specific campaign. You can then automatically publish the posts – it doesn't get much simpler than that.
Screenshot from CTRify, January 2023
I've curated this list with the intent to offer a tool for every reader, providing enterprise-level affordable solutions and highly technical tools.
There is diversity in the available tools, and you will need to select the right one for the job.
You don't need to have a $1,000 monthly tool budget to be a link builder, but all of the tasks will take time. Allocating your time and budget in the right combination improves business outcomes.
SEARCHENGINES3 days ago
Google Publishes A New SEO Case Study
WORDPRESS7 days ago
9 Must Have WordPress Plugins for 2023
MARKETING7 days ago
15 of the Best Free Website Builders to Check Out in 2023
SEO7 days ago
How To Harness AI In Marketing
SOCIAL7 days ago
Paris caps off strong season as menswear carves out its own space
How To Create A WordPress Ecommerce Website
Top 7 SEO Keyword Research Tools For Agencies
AFFILIATE MARKETING7 days ago
21 Tips To Grow Your Profits in 2023
5 Best YouTube Comment Finder Tools For You To Try in 2023
After Google: Should SEOs Jump Ship?


text:
Home Security Threat Intelligence One-Third of Popular PyPI Packages Mistakenly Flagged as Malicious
One-Third of Popular PyPI Packages Mistakenly Flagged as Malicious
The scanners tasked with weeding out malicious contributions to packages distributed via the popular open source code repository Python Package Index (PyPI) create a significant number of false alerts, researchers have found.
According to a Chainguard analysis of PyPI — the main repository for software components used in applications written in Python — the approach catches 59% of malicious packages but also flags a third of popular legitimate Python packages and 15% of a random selection of packages.
The research aims to create a data set that Python maintainers and the PyPI repository can use to determine the efficacy of their system for scanning projects for malicious changes and supply chain attacks, the Chainguard researchers stated in a Tuesday analysis.
While the existing approach detects the majority of malware, it clearly needs significant improvements to prevent wasting project managers' time with false alarms, says Zack Newman, a senior software engineer at Chainguard, who collaborated on the research.
"These are volunteers with countless other responsibilities, not security researchers who are willing to spend all day trawling through suspicious code," he says. "They care a great deal about the security of PyPI and work very hard to improve the situation, but the return on effort just isn't there at the moment for these scanners."
False positives are the bane of many software analysis tools, and therefore security teams. Even with a system that is 100% accurate at finding malicious packages, if it has a 1% false positive rate, developers and application-security professionals would still have to dig through 200 alerts each week to determine if any of the 20,000 weekly PyPI releases are actually malicious.
"Hundreds of packages triggered alerts," Newman says. "While we did some spot checks, just a quick look isn't enough to tell for sure whether a package is malicious — that's why malware-detection tools are so important. This gave us a lot of empathy for the repository administrators, who would face this volume of alerts tenfold each week."
He adds, "To be useful, a scanner would need to reduce that false positive rate to around 0.01%, even at the expense of missing some malicious packages."
PyPI's Malware-Scanning Approach
PyPI aims to foil software supply chain attacks by checking packages and projects in two ways. The PyPI scans the package's setup.py file using signatures to detect known suspicious patterns — expressed by YARA rules, an industry standard for creating malware signatures — that could indicate the inclusion of malicious functionality. (YARA stands for Yet Another Recursive Acronym, more of an inside industry joke than a descriptive name.) In addition, the repository's scanning tools analyze a projects commits and contributors for suspicious changes that could suggest malicious contributions.
The researchers built their data set using 168 known examples of malicious attacks on the PyPI repository. They then created a second data set with the 1,000 most-downloaded packages and the 1,000 most-imported packages, and when they eliminated duplicates, they ended up with 1,430 popular packages. Finally, they also created a data set of a random selection of 1,000 packages, which resulted in 986 random Python packages, since 14 did not have any Python code.
The popular and randomly selected packages were all assumed to be legitimate, the researchers said. In addition, the popular projects likely had better security hygiene and abided by programming best practices.
"While there is a chance that some of these packages are malicious, the chance that more than a handful of these packages is malicious is vanishingly small," they wrote in the analysis, issued Tuesday. "Importantly, these packages are more likely to represent a package selected from PyPI at random."
Open Source Software Repositories Remain a Cybercrime Target
The research comes as application-security professionals and software developers look for ways to ensure the security of the open source software components that make up 78% of the code in an average program.
The Open Source Security Foundation (OpenSSF) has launched a number of initiatives to improve the security of the open source software supply chain, including identifying the most critical packages that need more security scrutiny, and support for the adoption of SigStore, a way of cryptographically linking source code to compiled packages.
Attacks on the software supply chain have increased over the past few years. In the past month alone, security firm Kaspersky found malware in the Node Package Manager (npm) repository, while security firms Check Point and Snyk found nearly a score of malicious packages hosted on the PyPI repository service.
And it came to light that a school-aged kid in Italy uploaded multiple malicious Python packages containing ransomware scripts to PyPI, supposedly as an experiment.
It's unlikely that PyPI is alone in having problematic scanning results. Going forward, the Chainguard researchers plan to extend their analysis to evaluate at least four open source software malware analyzers, such as OSSGadget Detect Backdoor, bandit4ma, and OSSF Package Analysis, as well as translating the PyPI Malware Checks rules to SemGrep, a multilanguage open source static code analyzer.
Previous articleCrypto security experts raking in $430K salaries amid spike in hacks
Next articleCharming Kitten APT Wields New Scraper to Steal Email Inboxes
LockBit, ALPHV & Other Ransomware Gang Leak Sites Hit by DDoS...
Godspeed Capital-Backed SilverEdge Partners with Counter Threat Solutions
SolarWinds Attackers Impersonate USAID in Advanced Email Campaign

redpajama_set_name: RedPajamaCommonCrawl


Before joining NYFC, Natana spent six years working as a livestock farmer and food systems educator at farms and organizations in central and western Massachusetts. When she is not at our Hudson headquarters, she is busy practicing fiber arts and raising sheep. She holds a a B.A. in cross-cultural relations from Bard College at Simon's Rock.


Instead, there was a leisurely pace to its first episode that felt at odds with the end of the cataclysmic events of season 7, especially since there are only 5 more episodes left and there's so much ground to cover. Sansa Stark (Sophie Turner) was cold towards her new queen, Daenerys Targaryen (Emilia Clarke), and asked her brother Jon Snow (Kit Harington) if he had abdicated the throne for Daenerys out of a sense of duty towards his people or his love for the Mother of Dragons.
Since the seventh season ended in August 2017, fans have been waiting for the eighth season to either confirm or deny their theories. Who do you think will sit atop the Iron Throne once all is said and done?
Despite the fact that they've already wrapped up the shooting for season 8, the actor struggled to express into words exactly how he feels about the beloved show coming to an end: 'There is not a way of saying thank you to it enough.
The initial scenes of the episode seem nearly like the reboot of a late "90s sitcom". In this moment, it felt as if they returned to season one, before Jon was a king and Arya was a serial killer.
Daenerys is definitely not winning any popularity contests in the North, and Sam implores Jon to question her lack of mercy.
Based on the popular book series "A Song of Ice and Fire", by George R.R. Martin, the Emmy-winning fantasy series chronicles an epic struggle for power in a vast and violent kingdom. The series used to be subtle and unpredictable, but this episode is anything but - each glance, snarky comment and seemingly chance encounter is blatantly intentional and meant to be interpreted that way.
An emotional Kit is hardly surprising given the show's success and fans will be the same when the final episode airs. GoT season 8's first episode refreshed memories showcasing a Northern running through the crowd to catch a glimpse of the Unsullied, who accompanied Daenerys Targaryen and Jon Snow into Winterfell.


A few months ago, a British human who has lived in federal republic of germany for many an years, alerted me to this online article entitled, 'How to be european nation in 20 elementary steps'. It is in writing by a British man who is obviously trying to become accepted in the state in which he is now resident. The article had both Sybille and I in stitches 🙂 But always since reading it, I have been formulating in my own mind, the tantamount article.
With nearly 50 years of distinguished publishing in the Social Sciences, Arts, and Humanities, Ashgate complements Routledge's participation to reenforcement scholarly investigate and erudite publishing. Ashgate is a leading look into business firm in Art History, Music, History, ethnic Work, Politics, Literary Studies, and many past disciplines. Routledge is also now home to Ashgate's imprint, Gower Publishing, one of the world's directing publishers of specializer business and management books and resources.


text:
Yurii Boyko: To avoid shocks, change of both government and political course is crucial for Ukraine
The socio-economic crisis is deepening in Ukraine. The only effective way to avoid destabilizing the country and mass protests is to run for re-election and change the government, according to the co-chair of the OPPOSITION PLATFORM - FOR LIFE party Yurii Boyko.
Viktor Medvedchuk: Lyashko's delusional statement once again raises doubts about the adequacy of the Ukrainian government
The statement of the chief sanitary doctor of Ukraine, or rather 'misunderstandings from medicine', Lyashko, that Ukraine will not register Sputnik V, since the Ministry of Health plans to use only those vaccines that have passed the third phase of clinical trials – this is marasmic chatter that has nothing in common neither with healthcare, nor with the interests of Ukrainian citizens.
Biolik enterprise applies for the Sputnik V vaccine to get registered in Ukraine
On December 30, 2020, the Biolik enterprise in Kharkiv which is one of the leaders in the pharmaceutical industry of Ukraine and has sufficient production capacity and qualified personnel for the production of COVID-19 vaccine, applied to the Ministry of Health of Ukraine and the State Expert Center of the Ministry of Health for state registration of the Sputnik V vaccine against coronavirus to guarantee vaccination of Ukrainian citizens.
Greetings on New Year on behalf of Opposition Platform - For Life
Opposition Platform - For Life is an undisputed leader among all parliamentary political forces – the results of three opinion polls as for late December
The largest sociological services – KIIS, the Democratic Initiatives Foundation and the Ukrainian Sociological Group – conducted surveys of the population electoral sentiments in the parliamentary elections in December.
There is every reason for the impeachment procedure in the actions of President Zelenskyy
President of Ukraine Volodymyr Zelenskyy, who is entrusted with the duties of guarantor of compliance with the Constitution of Ukraine, once again violated the norms of the Basic Law. By signing a decree on the removal of the Chairman of the Constitutional Court of Ukraine Oleksandr Tupitskiy from the position of judge of the Constitutional Court, the head of state committed a gross violation of the Constitution, since he had no authority to do so.
Opposition Platform - For Life and Yurii Boyko are headliners of electoral support
The OPPOSITION PLATFORM - FOR LIFE party has the largest support among the Ukrainian political forces, and Yurii Boyko, co-chair of the party, confidently ranks second in the presidential rating, only a few percent behind Volodymyr Zelenskyy, as illustrated by the results of the survey of the population of Ukraine conducted by the Ukrainian Sociological Group.
MP Lovochkin: Government Withdrew from Solving Nation's Problems in 2020
2020 turned out to be a lost year for our country not only due to the epidemic and its consequences, but also because the government had postponed solving of nation's key problems for an indefinite period. This was stated by OPPOSITION PLATFORM – FOR LIFE MP Serhiy Lovochkin summing up the year 2020.
'Loan addiction' of the government to jeopardize Ukrainian economy and citizens
Zelenskyy's government, using Poroshenko's schemes, criminally sets record gas and heat prices for the population
During the 2020-2021 heating season, citizens of Ukraine will fully experience all the unprofessionalism and criminal actions of the current Ze-team – after seeing their utility bills. To begin with, the Ukrainians were set a record gas price in the history of the country – UAH 8,800 per thousand cubic meters + delivery. In January 2021, the price will rise to UAH 9875 per thousand cubic meters + delivery. Thus, the average gas price in the country in January will amount to UAH 10779. In addition, an increase in tariffs for water supply and electricity has already been announced.


Questions about the Terms of Service should be sent to us at info@happyairsofa.com.
We do not accept returns or exchanges unless the Air Happy you bought is defective. If this is the case, please contact us at info@happyairsofa.com and provide details of its defect.
If after you opt-in, you change your mind, you may withdraw your consent for us to contact you, for the continued collection, use or disclosure of your information, at anytime, by contacting us at info@happyairsofa.com.
If you would like to: access, correct, amend or delete any personal information we have about you, register a complaint, or simply want more information contact our Privacy Compliance Officer at info@happyairsofa.com.


text:
Q: Javascript not loading after render partial via ajax I'm having troubles with the javascript of a partial that I'm rendering via ajax.
The partial has an HTML table, in this file I have javascript functions to manage the interactions with the table.
In another file, I'm rendering this partial via ajax, like this:
   $.ajax(
    type: 'GET'
    url: "#{get_debts_by_guardian_services_students_path}"
    data: person_id: person_id)

The method I'm calling via ajax returns some variables that the table needs to render.
But when the partial renders none of the javascript functions are working, I'm guessing is because the ajax call, but don't know how to solve this.
Please help, thanks.

redpajama_set_name: RedPajamaStackExchange


a significant fish found in the St George River estuary is the Australian Grayling.
The gauge board is located on the inland side of the Great Ocean Road bridge.
The lower Teddy's Lookout at the the end of George Street, Lorne.


text:
Q: Is elasticsearch multi get api realtime? Is the elasticsearch mget api realtime like the get api? The documentation only says it returns data in similar format to the get api, does not mention if it is also realtime.

A: Yes, the _mget endpoint is also realtime (by default) but can also be executed in non-realtime if desired.
A quick look at the source code of MultiGetRequest.java reveals that the realtime boolean is true by default but can also be set to false if desired.


To investigate the effects of social isolation on oral mucosal healing in rats, and to determine if wound-associated genes and microRNAs (miRNAs) may contribute to this response.
Rats were group housed or socially isolated for 4 weeks before a 3.5 mm wound was placed on the hard oral palate. Wound closure was assessed daily and tissues were collected for determination of gene expression levels and miRNAs (i.e., miR-29a,b,c and miR-203). The predicted target of these microRNAs (i.e., vascular endothelial growth factor A, VEGFA) was functionally validated.
Social isolation stress delayed the healing process of oral palatal mucosal wounds in rats. Lower mRNA levels of interleukin-1β (IL1β), macrophage inflammatory protein-1α (MIP1α), fibroblast growth factor 7 (FGF7), and VEGFA were found in the biopsied tissues of isolated animals on days 1 and/or 3 post-wounding. Intriguingly, the isolated rats persistently exhibited higher levels of miR-29 family members and miR-203. Our results confirmed that VEGFA is a direct target of these miRNAs, as both miR-29a,c and miR-203 strongly and specifically suppressed endogenous VEGFA expression in vitro.
This study in rats demonstrates for the first time that social isolation delays oral mucosal healing, and suggests a potential role for healing-associated gene and miRNA interactions during this process via modulation of VEGF expression.


So we just moved to Seal Beach (30 miles south of downton L.A.) while we look for a permanent home closer to the church. It is normally a very sleepy little town but tragedy struck today as several were killed in an apparent rampage over a child custody dispute. The man was arrested in front of our house. Kati and Avery were locked inside the house while the police surrounded the suspect in his white truck and arrested him. She saw the police cars race down the street and reverse to trap in the suspect–about 30 yards from our front door!
Apparently he was in full body armor and had several weapons which, to me, means he was ready for a shoot-out. I feel terrible for all those affected yet grateful it didn't turn out worse where my two dearest ones were just yards away. Crazy stuff.
My friend is a pastor down the street and I believe his church will be opening themselves up to provide support for those hurting in the community.
We live in a broken world that needs the hope of Christ.
Whatever city God has called you to may you be bring His comfort and hope.
Kati and I are praying for our hurting neighborhood that is still in shock.
Avery has already begun planking in our new temporary abode!
We're looking forward to getting a permanent home in LA soon but we are so grateful for friends who are allowing us to stay for awhile while we look for a place. Avery is already feeling right at home!
God has continued to provide for us, not always when we wanted Him to show up, but just in time to remind us that He is the One who has called us to L.A. and He is the One who will continue to provide for us at each step. Thanks for your prayers with selling our place (it's been a long and up-and-down journey) and continued prayers as we seek to bless the city in L.A.


NASA's Genesis spacecraft was successfully launched on its three-year, 20-million mile voyage by a Boeing Delta 2 rocket today, kicking off the $260 million mission that aims to catch particles streaming from the Sun and return them to scientists on Earth.
Running more than a week late because of a technical concern with parts on the satellite and bad weather, today's countdown was virtually trouble-free, culminating with ignition of the rocket's liquid-fueled main engine and three strap-on solid rocket motors for liftoff at 12:13:40 p.m. EDT (1613:40 GMT).
As the rocket thundered away from pad 17A at Cape Canaveral Air Force Station, Florida, a video camera mounted to the second stage captured dazzling views of launch that's becoming a trademark of Delta missions for NASA.
The "rocketcam" was built by CrossLink Inc. of Longmont, Colorado. The video system is designed for use by Delta, Atlas and Titan rockets and the space shuttle.
Some 64 minutes after liftoff, while soaring high above Australia, Genesis was deployed from the rocket's third stage, setting sail for a spot a million miles from home in search of the answer to one of the most basic, yet important, space science questions: what is the matter that formed the solar system made of?
If all goes as planned, Genesis will return to Earth in September 2004 with the first samples ever collected of the solar wind, material that will help scientists determine what was in the cloud of gas and dust from which the solar system formed 4.5 billion years ago.
"This mission will be the Rosetta Stone of planetary science data, because it will show us the foundation by which we can judge how our solar system evolved," said Chester Sasaki, Genesis project manager. "The samples that Genesis returns will show us the composition of the original solar nebula that formed the planets, asteroids, comets and the Sun we know today."
According to current models, the solar system formed when a massive cloud of gas and dust collapsed under its own gravity. Most of this mass went into what became the Sun, while other gravitational disturbances in the collapsing nebula led to the formation of smaller bodies that eventually became planets, moons, asteroids, and comets.
For years, scientists have sought to determine the composition of that original nebula and compare it to the composition of other solar system bodies to see how those bodies have evolved over time. The best way to do this is to study the composition of the Sun which, given its huge mass, is the body most likely to have retained its original composition.
Scientists have already determined the Sun's composition to some by looking for the unique spectral signatures of elements embedded in sunlight. However, even the best spectroscopic observations do not provide planetary scientists with the precision they need to compare the Sun's composition with that of other solar system bodies. To accomplish this scientists need actual samples of the Sun they can study in the lab.
While a mission to the Sun itself to obtain samples is not technically feasible, there is a far easier and less expensive alternative. The Sun emits a steady stream of particles known as the solar wind, made of material from the Sun's upper atmosphere. By collecting samples of the solar wind, one is essentially capturing the same material that made up the protosolar nebula.
To accomplish this, Genesis will fly to the Earth-Sun L1 Lagrange point, about 1.5 million kilometers (1 million miles) sunward of the Earth. This location, a common place for stationing spacecraft that study the Sun, is also free of the Earth's magnetic field, allowing Genesis to study the solar wind without interference. Genesis will spend about two and a half years there, completing five wide, looping halo orbits of L1.
While there, the spacecraft will deploy several collectors designed to capture particles entrained in the solar wind. Different collectors will be used depending on whether the solar wind is fast or slow, or if a coronal mass ejection -- a type of solar storm -- is taking place. Ion and electron detectors on the spacecraft will categorize the nature of the solar wind and determine what collector arrays should be deployed at a given time.
In addition to the collector arrays, Genesis also carries a solar wind concentrator. This concentrator is designed to increase the concentration of oxygen and nitrogen ions collected by the spacecraft. Oxygen is of particular interest to scientists because they have measured different ratios of the most common oxygen isotope, O16, to two heavier versions, O17 and O18, on different solar system bodies, but do not know what the original oxygen isotope ratios were in the protosolar nebula.
After completing its collection of the solar wind, Genesis will leave its L1 halo orbit in April 2004. The spacecraft will perform a distant flyby of the Earth and then circle the Earth-Sun L2 point, behind the Earth, to set up for a daytime reentry over the western U.S. in September. While the rest of the spacecraft burns up over the eastern Pacific Ocean, a small return canister will survive the reentry and descend to Earth by parachute over a military training range near Salt Lake City, Utah. Before landing, though, the capsule will be captured in midair by helicopter so that the impact of landing does not damage the solar wind samples.
Once on Earth, the samples will be taken to a special facility at NASA's Johnson Space Center, where scientists will study them with advanced laboratory equipment to determine their composition and draw conclusions about what was in the protosolar nebula.
Scientists have high hopes that the solar wind returned by Genesis will help them resolve some key mysteries about the solar system. "Genesis will return a small but precious amount of data crucial to our knowledge of the Sun and the formation of our solar system," said Donald Burnett, principal investigator of Genesis. "Data from Genesis will provide critical pieces for theories about the birth of the Sun and planets."
Today's launch marked the 287th for a Delta rocket dating back to 1960 and the 271st successful flight. For the Delta 2 vehicle, it was the 98th launch since 1989 and 96th success, extending the workhorse rocket's consecutive successful string to 43 since 1997.
September 15: Dual launch of NASA's TIMED atmospheric research satellite and the French/U.S. Jason-1 oceanography craft.
October 18: Launch of the commercial QuickBird-2 Earth-imaging satellite.
December 20: Launch of NASA's Aqua Earth Observing System spacecraft.


Payless Kitchen Cabinets is a full-service, independently owned retailer from Los Angeles, CA. We sell and install kitchen cabinets, countertops, stone tile and bathroom vanities. We have everything you need for your kitchen and bath, give you an easy one-stop shopping.
At Payless Kitchen Cabinets, we know that a successful home remodeling project starts with a great design. Every project is given a high level of commitment to help make your decorating ideas come true. Our professional designers and installers are dedicated to providing you with a kitchen or bathroom that suits your lifestyle. From concept to completion, Payless Kitchen Cabinets is committed to offering you professional and responsive home improvement services. not just satisfying your expectations, but exceeding them.


Home/Sunday Was Funday for Kidz Klub Members!
Thanks to all of our Kidz Klub members who came out to play today! Lots of rides, games and fun and a lot of Free Ice Cream cones too! The sun was shining and the go karts were racing – the unlimited ride bracelets seemed to be on everyone's wrist as they had a blast on the bumper boats, went round and round on the Himalaya and enjoyed a leisurely game of mini-golf. Free video games were included too! Great day for family fun! Check our Kidz Klub page for our next event coming soon!


Each week brings documents, emails, new projects, and job lists. How much of this is different from the work you've done? Odds are, not much. Many of our day-to-day tasks are variations on something we have done countless times before.
Don't reinvent the wheel each time you start something new. Use templates–as starting point for 17, standardized files. As soon as you save a separate version of the template, just add, eliminate, or change any data for that unique record, and you'll have the new work.
Templates work everywhere: in word processors, spreadsheets, project management apps, survey programs, and email. Here's how to use templates in your favorite programs –and to automatically create documents from a template–so you can get your tasks faster.
Programs take time to build, and it's easy to wonder if they are worth the investment. The answer: absolutely. Editing a template takes much less time than formatting some thing from scratch. It is the distinction between retyping it, or copying and pasting some text.
That is not the only benefit: Using a template means you are less likely to leave out crucial information, also. By way of instance, if you need to send freelance writers a contributor agreement, modifying a standard contract template (instead of writing a new contract each time) ensures you won't leave out the crucial clause about owning the material as soon as you've paid for this.
Templates additionally guarantee consistency. Perhaps you send regular project updates to customers or investors. With a template, you know the update will have the formatting, design, and structure.
Imagine you are creating a template of your own resume. You would want to record in-depth facts about your responsibilities and accomplishments, so you'll have.
Some tools will automatically fill in all these variables for you (more on this in a little ). But should you need to fill in the information on your own, add some text that's obvious and easy to search for so you can find.


Mrs. Jenny Lawrence is a 2nd grade teacher at NextGeneration STEAM Academy. She received her Masters and Bachelors of Arts in English degrees from California State University, Stanislaus in 2010 and 2013, respectively. She graduated with distinction and with honors for both degrees. Mrs. Lawrence is a professional member of Sigma Tau Delta (English Honor Society), and was the recipient of the Ronald E. McNair Post-Baccalaureate Achievement Award, first-place winner of the University's 2011 Graduate Research Award, and a Graduate Equity Fellowship Award. She previously taught First-Year Composition at CSUS, and was the librarian for Aspire Rosa Parks Academy and August Knodt Jr. Elementary Schools.
She is recently married to her best friend Allen, and lives in Stockton. In her free time (ha!), she likes to rock climb, swim, hike, cook, travel, and make crafty projects. She is very excited about working with her students, their parents and guardians, and faculty/staff this year.


text:
import { getScreenSize, getScreenOrientation, copyTextToClipboard } from './helpers/dom';
import { createElem, buildElemClass } from './helpers/elem';
import { getStack, getFilenameWithPosition, getMessage, ExtendedError } from './helpers/error';

export interface ShowJSErrorSettings {
    reportUrl?: string;
    templateDetailedMessage?: string;
}

interface ShowJSErrorElems {
    actions: HTMLDivElement;
    close: HTMLDivElement;
    container: HTMLDivElement;

    body: HTMLDivElement;
    message: HTMLDivElement;
    title: HTMLDivElement;

    filename: HTMLDivElement;

    arrows: HTMLDivElement;
    prev: HTMLInputElement;
    num: HTMLSpanElement;
    next: HTMLInputElement;

    report: HTMLInputElement;
    reportLink: HTMLLinkElement;
}

interface ShowJSErrorState {
    appended: boolean;
    detailed: boolean;
    errorIndex: number;
    errorBuffer: ExtendedError[];
}

class ShowJSError {
    private elems: Partial<ShowJSErrorElems> = {};

    private settings: Required<ShowJSErrorSettings>;

    private state: ShowJSErrorState = {
        appended: false,
        detailed: false,
        errorIndex: 0,
        errorBuffer: [],
    };

    constructor() {
        this.settings = this.prepareSettings();

        window.addEventListener('error', this.onerror, false);
        window.addEventListener('unhandledrejection', this.onunhandledrejection, false);
        document.addEventListener('securitypolicyviolation', this.onsecuritypolicyviolation, false);
    }

    public destruct() {
        window.removeEventListener('error', this.onerror, false);
        window.removeEventListener('unhandledrejection', this.onunhandledrejection, false);
        document.removeEventListener('securitypolicyviolation', this.onsecuritypolicyviolation, false);
        document.removeEventListener('DOMContentLoaded', this.appendToBody, false);

        if (document.body && this.elems.container) {
            document.body.removeChild(this.elems.container);
        }

        this.state.errorBuffer = [];
        this.elems = {};
    }

    public setSettings(settings: ShowJSErrorSettings) {
        this.settings = this.prepareSettings(settings);

        if (this.state.appended) {
            this.updateUI();
        }
    }

    /**
     * Show error panel with transmitted error.
     */
     public show(error: string | ExtendedError | Error) {
        if (!error) {
            this.showUI();

            return;
        }

        if (typeof error === 'string') {
            this.pushError({ message: error });
        } else {
            this.pushError(
                typeof error === 'object' ?
                    error :
                    new Error(error)
            );
        }
    }

    /**
     * Hide error panel.
     */
    public hide() {
        if (this.elems.container) {
            this.elems.container.className = buildElemClass('', {
                hidden: true
            });
        }
    }

    /**
     * Clear error panel.
     */
    public clear() {
        this.state.errorBuffer = [];
        this.state.detailed = false;

        this.setCurrentError(0);
    }

    /**
     * Toggle view (shortly/detail).
     */
    public toggleView() {
        this.state.detailed = !this.state.detailed;
        this.updateUI();
    }

    private prepareSettings(rawSettings?: ShowJSErrorSettings): Required<ShowJSErrorSettings> {
        const settings: ShowJSErrorSettings = rawSettings || {};

        return {
            reportUrl: settings.reportUrl || '',
            templateDetailedMessage: settings.templateDetailedMessage || '',
        };
    }

    private onerror = (event: ErrorEvent) => {
        const error = event.error;

        this.pushError({
            title: 'JavaScript Error',
            message: error.message,
            filename: error.filename,
            colno: error.colno,
            lineno: error.lineno,
            stack: error.stack,
        });
    }

    private onsecuritypolicyviolation = (error: SecurityPolicyViolationEvent) => {
        this.pushError({
            title: 'CSP Error',
            message: `blockedURI: ${error.blockedURI || ''}\n violatedDirective: ${error.violatedDirective} || ''\n originalPolicy: ${error.originalPolicy || ''}`,
            colno: error.columnNumber,
            filename: error.sourceFile,
            lineno: error.lineNumber,
        });
    }

    private onunhandledrejection = (error: PromiseRejectionEvent) => {
        this.pushError({
            title: 'Unhandled promise rejection',
            message: error.reason.message,
            colno: error.reason.colno,
            filename: error.reason.filename,
            lineno: error.reason.lineno,
            stack: error.reason.stack,
        });
    }

    private pushError(error: ExtendedError) {
        this.state.errorBuffer.push(error);
        this.state.errorIndex = this.state.errorBuffer.length - 1;

        this.updateUI();
    }

    private appendUI() {
        const container = document.createElement('div');
        container.className = buildElemClass('');

        this.elems.container = container;

        this.elems.close = createElem({
            name: 'close',
            props: {
                innerText: '×',
                onclick: () => {
                    this.hide();
                }
            },
            container
        });

        this.elems.title = createElem({
            name: 'title',
            props: {
                innerText: this.getTitle()
            },
            container
        });

        const body: HTMLDivElement = createElem({
            name: 'body',
            container
        });

        this.elems.body = body;

        this.elems.message = createElem({
            name: 'message',
            props: {
                onclick: () => {
                    this.toggleView();
                }
            },
            container: body
        });

        this.elems.filename = createElem({
            name: 'filename',
            container: body
        });

        this.createActions(body);

        if (document.body) {
            document.body.appendChild(container);
        } else {
            document.addEventListener('DOMContentLoaded', this.appendToBody, false);
        }
    }

    private appendToBody = () => {
        document.removeEventListener('DOMContentLoaded', this.appendToBody, false);
        if (this.elems.container) {
            document.body.appendChild(this.elems.container);
        }
    }

    private createActions(container: HTMLDivElement) {
        const actions: HTMLDivElement = createElem({
            name: 'actions',
            container
        });

        this.elems.actions = actions;

        createElem({
            tag: 'input',
            name: 'copy',
            props: {
                type: 'button',
                value: 'Copy',
                onclick: () => {
                    const error = this.getCurrentError();
                    copyTextToClipboard(this.getDetailedMessage(error));
                }
            },
            container: actions
        });

        const reportLink: HTMLLinkElement = createElem({
            tag: 'a',
            name: 'report-link',
            props: {
                href: '',
                target: '_blank'
            },
            container: actions
        });

        this.elems.reportLink = reportLink;

        this.elems.report = createElem({
            tag: 'input',
            name: 'report',
            props: {
                type: 'button',
                value: 'Report'
            },
            container: reportLink
        });

        this.createArrows(actions);
    }

    private createArrows(container: HTMLDivElement) {
        const arrows: HTMLDivElement = createElem({
            tag: 'span',
            name: 'arrows',
            container
        });

        this.elems.arrows = arrows;

        this.elems.prev = createElem({
            tag: 'input',
            name: 'prev',
            props: {
                type: 'button',
                value: '←',
                onclick: () => {
                    this.setCurrentError(this.state.errorIndex - 1);
                }
            },
            container: arrows
        });

        this.elems.num = createElem({
            tag: 'span',
            name: 'num',
            props: {
                innerText: this.state.errorIndex + 1
            },
            container: arrows
        });

        this.elems.next = createElem({
            tag: 'input',
            name: 'next',
            props: {
                type: 'button',
                value: '→',
                onclick: () => {
                    this.setCurrentError(this.state.errorIndex + 1);
                }
            },
            container: arrows
        });
    }

    private getDetailedMessage(error?: ExtendedError) {
        let text = [
            ['Title', this.getTitle(error)],
            ['Message', getMessage(error)],
            ['Filename', getFilenameWithPosition(error)],
            ['Stack', getStack(error)],
            ['Page url', window.location.href],
            ['Refferer', document.referrer],
            ['User-agent', navigator.userAgent],
            ['Screen size', getScreenSize()],
            ['Screen orientation', getScreenOrientation()],
            ['Cookie enabled', navigator.cookieEnabled]
        ].map(item => (item[0] + ': ' + item[1] + '\n')).join('');

        if (this.settings.templateDetailedMessage) {
            text = this.settings.templateDetailedMessage.replace(/\{message\}/, text);
        }

        return text;
    }

    private getTitle(error?: ExtendedError) {
        return error ? (error.title || 'Error') : 'No errors';
    }

    private showUI() {
        if (this.elems.container) {
            this.elems.container.className = buildElemClass('');
        }
    }

    private hasStack() {
        const error = this.getCurrentError();

        return error && (error.stack || error.filename);
    }

    private getCurrentError(): ExtendedError | undefined {
        return this.state.errorBuffer[this.state.errorIndex];
    }

    private setCurrentError(index: number) {
        const length = this.state.errorBuffer.length;

        let newIndex = index;
        if (newIndex > length - 1) {
            newIndex = length - 1;
        } else if (newIndex < 0) {
            newIndex = 0;
        }

        this.state.errorIndex = newIndex;

        this.updateUI();
    }

    private updateUI() {
        const error = this.getCurrentError();

        if (!this.state.appended) {
            this.state.appended = true;
            this.appendUI();
        }

        if (this.elems.body) {
            this.elems.body.className = buildElemClass('body', {
                detailed: this.state.detailed,
                'no-stack': !this.hasStack(),
                hidden: !error,
            });
        }

        if (this.elems.title) {
            this.elems.title.innerText = this.getTitle(error);
            this.elems.title.className = buildElemClass('title', {
                'no-errors': !error
            });
        }

        if (this.elems.message) {
            this.elems.message.innerText = getMessage(error);
        }

        if (this.elems.actions) {
            this.elems.actions.className = buildElemClass('actions', { hidden: !error });
        }

        if (this.elems.reportLink) {
            this.elems.reportLink.className = buildElemClass('report', {
                hidden: !this.settings.reportUrl
            });
        }

        if (this.elems.reportLink) {
            this.elems.reportLink.href = this.settings.reportUrl
                .replace(/\{title\}/, encodeURIComponent(getMessage(error)))
                .replace(/\{body\}/, encodeURIComponent(this.getDetailedMessage(error)));
        }

        if (this.elems.filename) {
            this.elems.filename.className = buildElemClass('filename', { hidden: !error });
            this.elems.filename.innerText = getStack(error) || getFilenameWithPosition(error);
        }

        this.updateArrows(error);

        this.showUI();
    }

    private updateArrows(error?: ExtendedError) {
        const length = this.state.errorBuffer.length;
        const errorIndex = this.state.errorIndex;

        if (this.elems.arrows) {
            this.elems.arrows.className = buildElemClass('arrows', { hidden: !error });
        }

        if (this.elems.prev) {
            this.elems.prev.disabled = !errorIndex;
        }

        if (this.elems.num) {
            this.elems.num.innerText = (errorIndex + 1) + '\u2009/\u2009' + length;
        }

        if (this.elems.next) {
            this.elems.next.disabled = errorIndex === length - 1;
        }
    }
};

const showJSError = new ShowJSError();

export default showJSError;

redpajama_set_name: RedPajamaGithub