Documentation

Table of contents

About

Welcome to SEO Studio! This is a small script that contains specialized tools for search engine optimization. These tools make a great offering to your visitors and customers.

Requirements

Before installing, please ensure that you have a web server which meets these requirements:

You will also need an empty MySQL database to install the script into. Please do not use a database that is shared with another platform at the same time. Please ensure it is indeed empty before installing.

Please note that if you install the script in an environment with a PHP version older than 8.0, your installation may stop receiving automatic updates in the next few years until you upgrade to 8.0 or newer.

Installation

Installation is very simple!

Inside the download from codecanyon.net, there is a folder called Upload These Files. Open this folder and look for the install.php file. Upload this file to your website and open it in your browser. Then follow the on-screen instructions to complete the installation.

💡
When you finish installing the script, all of the tools should work out of the box without further configuration. However, you’re not done. Make sure to visit the quick start wizard in the script’s admin panel to finish setting up the script after installation.

Common installation questions

Common installation issues

Support

If you’re having trouble with the installation, or need help with anything else, please visit my profile at the following link and send me a message using the contact form on the right side:

https://codecanyon.net/user/baileyherbert

Developers

If you’re a developer, please do not use the Source folder included in the product download. This folder exists for reference only and is not suitable for installation.

Instead, please the install.php file on your local web server and run it in your browser to install the application in the same directory. Then, you can delete the installer files and commit the remaining files if desired. Follow the above installation instructions if needed.

🚨
Attention all developers! Please make sure to disable the “send errors to the developer” option in the script if you intend to customize the code.


Tools

Google & Bing SERP

These tools will test a provided keyword against your website in order to find your rank on the search results page. They will check up to 100 results depending on the query and position of your target website. The number of results may increase in the future.

Top Search Queries

This tool uses spyfu.com to find a website’s most popular search queries in a small number of popular regions around the world. The following columns are displayed:

Indexed Pages

This tool checks both Google & Bing to determine the number of indexed pages.

Robots.txt

This tool parses and displays the rules in your robots.txt file, organized into a table. It also displays any sitemaps from the robots.txt file, followed by the raw text.

Sitemap

This tool looks for sitemaps on a domain like a web crawler would, and shows the following information for each:

This tool is capable of reading sitemaps in the XML or RSS format. It will discover sitemaps from the robots.txt file, and will attempt to load the root sitemap.xml file. It will also follow a single layer of nested sitemaps from inside the sitemap.xml file.

Submit Sitemaps

This tool can be used to easily submit a root sitemap to Google and Bing. It is recommended to instead use the Webmaster Tools for the respective services if possible, as those requests are likely prioritized and their statuses can be tracked.

High Quality Backlinks

This tool shows up to 250 backlinks for the target website. For a backlink to show on this page, it must have a page authority score of at least 20 and a domain authority score of at least 50.

New Backlinks

This tool shows up to 250 backlinks that were discovered in the last two months for the target website, sorted by newest first.

Poor Backlinks

This tool checks the last 500 backlinks to be discovered for the target website to see if they are low quality, risky, or spammy. For a backlink to show on this page, it must have a page authority score below 7 and must not be marked as nofollow. These rules might change in the future.

Top Referrers

This tool shows the top 100 domain names which link to your website, sorted by the number of backlinks. It also shows the number of dofollow links, the domain’s authority score, and the date at which the first backlink was discovered.

Check Domain Authority

This tool estimates the authority of a domain name.

This is a score which estimates the link’s popularity and importance, and is determined by the number and quality of incoming links to the page (both internal and external). It’s calculated logarithmically on a scale from 0 to 100 and is updated for all domains at least once per month.

Check Page Authority

This tool estimates the authority of a specific page on a domain name. The scoring works just like described in the tool above.

Crawlability Test

This tool allows you to test specific pages on your website to see if they can be crawled and indexed by the various search engines. It looks at rules defined in meta tags and the website’s robots.txt file.

Mobile Support Test

This tool checks a website’s source code to detect whether or not it will be considered responsive or mobile friendly by a search engine. It checks meta tags, stylesheets, and embedded styles. Please note that this is a best guess tool, and may not always be fully accurate.

Headers

This tool shows the headers of a specific page on your website. It also checks for redirection and explains whether the redirection is permanent or temporary.

Speed Test

This tool uses pingdom.com to test the performance of a website at one of a selection of regions across the world.

The results of the test will be displayed, including the overall load time, a score of the website’s performance, the total size of the page as transmitted over the network, and the number of HTTP requests it took to load.

The response codes for the various content will also be displayed. In general, you will want to avoid redirections (301 and 302) and any erroneous requests in the 400s or 500s.

Finally, it will show a breakdown of the types of content which make up the page’s size and request count.

Link Analysis

This tool analyzes and shows a breakdown of the links on a webpage. You will see the anchor text, link location, the type (external or internal) and whether it or not search engines can follow it.

Keyword Density

This tool analyzes a webpage and shows a breakdown of the density of its keywords. It will analyze the page’s title, meta tags, and body content.

Each phrase will show the number of occurrences on that page, whether or not the phrase is in the title and description, as well as a computed weight score for the phrase.

💡
The keywords on a page with the highest weights will likely be indexed with more strength than other keywords. The actual percentages are meaningless except in comparison to other keywords — whether the top keyword’s weight is 2% or 20% makes no difference.

Extract Meta Tags

This tool analyzes a webpage and shows its meta tags. It also indicates whether each tag is used by Google and Bing.

Keyword Research

This tool finds keyword suggestions based on your input keyword and region using a combination of Google Suggest and Surfer SEO. It shows the cost-per-click and search volume in the specified region for each keyword.

Competition

This tool performs a Google search with the specified query and checks up to 200 results for the rank of your website. It will then show your website with the surrounding results, and will show a comparison of backlink and authority data for those results.


Administration

Accessing the admin panel

To access the admin panel you must sign into the public website as an account with admin privileges. Then a dark gray bar will appear at the top of the screen with a link to the admin panel.

Configuring the script

The Settings page in the admin panel has various subsections which allow you to change the configuration of the website. Each ambiguous item will have an encircled question mark (?) which you can hover with your mouse to learn more about.

Configuring tool caching

The Settings > Cache subsection allows you to configure tool caching. Most data-driven tools cache their results into the database, while site-driven tools like Keyword Density will avoid caching their results at all.

You can configure the duration to store cached results on this page in days, or disable caching completely. When configuring a number of days, it will only apply to tools that need caching (data-driven tools).

Running the script with a cache is recommended. If desired, set the cache to 1 day to maintain freshness. Also make sure the cron job is running as it will clean the cache periodically.

Configuring outgoing mail

The Settings > Mail subsection configures the outgoing mail server settings. If you’re on a server that supports sending email, such as a cPanel server, the default Built-in PHP mail() option should work for you. Try the “send a test email” feature and check your spam inbox just in case.

For servers that do not support email, or for advanced users, you can configure a mail service from the available options: SMTP, Mailgun, and SendGrid.

You will also see the following options:

Configuring email templates

The Settings > Email templates subsection allows you to customize the plain-text email templates that the script uses when sending various messages to users.

Configuring permalinks

The Settings > Permalinks subsection allows you to enable permalinks (pretty URLs) on the public website on supported servers. To enable it, the script will first perform an eligibility check where it tests a temporary directory on the server to make sure permalinks won’t cause any fatal errors.

Once enabled, you can customize the permalink paths across the script.

Please note that the permalinks will be written directly to the .htaccess file in the root directory of the script. If something goes wrong and the website starts displaying an error after changing permalinks, try renaming this file to .htaccess.old to access the website again.

Configuring rate limiting

The Settings > Rate limiting subsection allows you to block or CAPTCHA users who are sending too many requests for tools, login, and contact form submissions.

On this page, you will see a table of number inputs. Each column in this table represents a time interval, while each row represents a type of user action. If a user performs any action more than the specified number of times within each interval, they will be rate limited for the specified duration (in minutes).

💡
Examples The default rate limits for the “tools” action are 15 (1 min), 40 (5 min), 75 (15 min), 100 (30 min), 125 (1 hour). Here are some examples of how these intervals will be applied: Example 1. A visitor has used the “domain authority” tool 15 times in the last minute, but only 30 times in the last 5 minutes. They have reached the 1-minute interval and are now rate limited. Example 2. A visitor has used the “domain authority” tool only 3 times in the last minute, but 75 times in the last 15 minutes. They have reached the 15-minute interval and are now rate limited. Example 3. A visitor has used the “domain authority” tool 14 times in the last minute, 39 times in the last 5 minutes, and 74 times in the last 15 minutes. They have not hit any intervals, and are not rate limited. In examples 1 and 2, the users are blocked for the duration configured in the last column of the table. By default, this is 120 minutes (or 2 hours). When a CAPTCHA service is configured, the user can complete a CAPTCHA to immediately circumvent the block.
🚨
The default rate limits are extremely generous. If you are concerned about bots, please reduce the intervals as necessary.

Changing the website’s appearance

The admin panel has a Customize section in the sidebar which is dedicated to changing the appearance of the website. You will find three subsections under this section:

For now, this is as much as we can customize the appearance. There are additional customization features planned for the future, but no immediate guarantees.

Changing the website’s content

The admin panel has a content section in the sidebar which is dedicated to changing the content of the website, such as the text, tools, and advertising banners.

Translating the website

The Content > Languages subsection allows you to create and manage languages for the website. When multiple languages exist at the same time, a language selector bar will automatically appear at the top of the website. You can edit or set a language as the default by clicking the ••• button.

To create a new language, click the Create new button at the top right of the page. Give the language a name, a display direction, a default Google domain, and set the locales. Then translate each row on the screen and click the Create button at the very bottom to finish.

💡
When creating a new language, you will see an option to Auto translate to a specific language. This will use Google Translate and is a recommended way to start quickly. However, please check the results of this tool for completeness, as not all phrases may be translated at this time.

Editing pages

The Content > Pages subsection allows you to edit one of the script’s default pages. It is not possible to fully customize these built-in pages, but you will find many customization options. In addition to editing page titles and meta tags, you will find the following specialized options:

💡
You will find a language dropdown at the top right while editing a page. When multiple languages are installed at once, you can toggle between the languages to customize the page for each. All page customizations are done on a per-language basis.

Editing tools

The Content > Tools subsection allows you to manage the tools on the system, including:

With these options it is possible to further personalize your website, and to further increase the content value and search indexability.

Embedding tools onto another website

It is quite common that this script is installed into a hidden subdirectory on a WordPress website, and then the tools are embedded individually onto the main WordPress website, effectively turning this script into a WordPress plugin.

To embed a tool, go to Content > Tools and click the Embed tools button at the top right. Select the tool that you’d like to embed and customize the options to suit your needs, then click Generate. You will want to copy and paste the resulting snippet onto another website.

📢
I have found that some web hosts will enforce an X-Frame-Options header on the website, which prevents these embeds from working on other domains. This will often manifest with the embed showing a “Refused to connect” error. If you are experiencing this issue, please contact your web host and ask them to remove this header.

Inserting ad banners

The Content > Advertising subsection allows you to insert ad banners into the script. I do not recommend any specific advertising vendor. However, if you have an approved advertising account, you may insert your ad banner snippet codes into the slots shown in this section.

You will find various slot sizes, such as 728x90 and 120x600. Generate banner codes with your advertising vendor that are equal to or slightly less than the specified sizes. Do not exceed these sizes in either direction to ensure a consistent layout.

There is a Preview mode available for your convenience. Simply enable this mode and view the public website to see where the various ad banner slots will appear. Please note that this is not fully accurate, as the slots can rearrange slightly based on which slots are filled and which are empty.

💡
Make sure to disable Preview mode when you are finished previewing! Otherwise your ad banners will not appear.

You will also find a settings section on this page, where you can limit the number of ad banners that will be shown on a single page at once, as well as disable advertising banners for certain user groups (such as for premium users).

Managing cloud services

Setting up the cron job

The Services > Cron subsection helps configure or track the status of the application’s cron job. This cron job is a small script that must run periodically. It will perform various important functions:

There are two ways to activate the cron job:

So which method is best? Well, the remote method is most ideal if you have a high traffic website, because my system will always run your cron job immediately after a new update is released. This means if a new update is released to fix a broken tool, for example, your downtime will be minimal.

Please note that the remote method only works on public web servers. In some cases, firewalls or security services (such as Cloudflare) may prevent the connection, in which case the script will tell you that it cannot activate the service.

Finally, please note that enabling the remote service will send the public URL of your website to me, the developer (it’s required in order to run the cron job remotely, after all). This information is normally private to me, but I won’t abuse it in any way, I promise! 👍

Setting up custom proxies

The Services > Proxies subsection allows you to import HTTP proxies into the script. When importing proxies, you can choose which service(s) they can be used for. In most cases, you will want to enable proxying for all services, unless your proxies have a transfer cap.

If a connection error is encountered, the script will temporarily disable the proxy and will use another. If too many proxies fail or no working proxies are available, the user will be shown an error.

We recommend enabling rate limiting (from Settings > Rate limiting) when using proxies to prevent bots from using up your resources.

We also recommend enabling the script’s free automatic search proxies (detailed in the section below) when using custom proxies. These will be used as fallbacks if your proxies go offline or are being used too frequently.

💡
How many proxies do I need? The script will use proxies in a round-robin fashion for each service. This means all proxies will be used once before the script reuses any of them. We recommend that you base your calculations around Google, since it’s the most likely service to encounter a rate limit with. The tools that use Google include: Google SERP, Indexed Pages, and Competition. In general, you want to have enough proxies that no single IP address will be used to scrape from Google more than once per 5 minutes (in a worst case scenario) when your tools are seeing peak demand. If possible, aim for one request per 10 minutes during normal traffic/demand.
🚨
What happens if I don’t have enough proxies? If the number of available proxies is insufficient to handle your website’s demand, then your proxies may end up sending more than one request to Google per 5 minutes. If this continues for too long, the proxies will be rate limited. When a proxy is rate limited, the script will temporarily disable the proxy for that specific service. This timeout can last for more than an hour and will reduce the number of available proxies further, potentially compounding the problem. For this reason, it’s recommended to enable the script’s free automatic search proxies (detailed in the section below) when using custom proxies. These will be used as fallbacks if your proxies go offline or are being used too frequently.

Setting up free automatic search proxying

This script comes with a built-in service at Services > Search that offers free, automatic proxying of Google & Bing searches with a daily quota.

When enabled, the script will continue to use your server’s own IP address for scraping from these search engines. However, if your server’s IP is being used too often (and the risk of being rate limited is elevated) then it will temporarily switch to using our network of servers.

Enabling this service will opt your own server into the network to perform occasional queries for other users, in exchange for an increased daily quota. Work is being done to make this an option, check back soon if you don’t want to opt your server into the network.

🚨
Before you activate, read this! It’s important to read the terms of the service. They’re not so much terms as they are an explanation of how it works. In short, by opting into the service, the script will automatically proxy searches (when necessary) using a network of servers. However, in doing so, you will also make your own server available as a part of the network to very periodically perform a search for the network. It’s sort of like torrenting, but for searching the web, and is the best solution I could come up with that was free. As your server handles more queries for the network, your quota will increase further over time, allowing you to request more queries from the network. If this sounds alright to you, then go ahead and give it a try. You can disable it at any time.
💡
Developers who are curious about this offering, read here! If you are concerned about this being abused, please do not worry. The searches are performed on your server using the includes/execute/google.php file. This file is a bundle, just like the script’s installer, whose source code can be read entirely using Packr. The script is hard-coded to only accept requests for a specific list of search engines, and it authenticates each request to ensure it is coming from my servers. In addition, I act as a middleman for all requests, so your server IP or domain is never exposed.

Installing updates

The Updates section in the admin sidebar allows you to check for and install the latest updates. This is the only recommended way to install updates to the script.

💡
When updates are available, you can click on the More options button to see each available update in detail, including the files it will modify. You can also download the update’s files as an archive, but this is only for auditing and is not intended for installation.

It is recommended to enable the Automatically update Studio setting in the Settings > Configuration subsection of the admin panel, and to ensure the cron job is running periodically. This will automatically install updates to keep your tools working, as they do sometimes break.

You can monitor when updates are installed automatically in two ways:

Managing users & groups

The Users section in the admin sidebar allows you to manage users and groups, and to monitor the usage of your website’s tools.

Managing users

The Users > Users subsection shows a list of users registered in the system. By default, you will see your default administrative account as the first user. Click on an email address or the ••• button to view and edit the user’s profile.

While viewing a user’s profile, you will see a list of the websites saved to their account and a list of their recent tool usage. You’ll also find options at the top right to change their password, override their email address, and assign them to a new group.

You can also create new users, and export a list of users as a CSV file, from the top right of the users list.

Managing user groups

The Users > Groups subsection shows a list of groups registered in the system. Groups are a way to organize your users and to change what permissions they have. Other parts of the application, such as the advertising system or extensions, can change their behavior for specific groups.

Monitoring tool usage

The Users > Tool usage subsection shows a complete list of recent tool usage by both your registered users and visitors.

For each row, you will find the unique ID of the tool, the domain name that was entered into the tool (if applicable) as well as any extra tool input (where applicable), and the time at which this usage occurred. You can hover over the time to see a full timestamp.

Extensions

Setting up a contact page

The application includes a free, built-in extension which adds a contact page to the public website when enabled. You can enable this extension from Settings > Extensions > Easy Contact Page.

Once enabled, if the extension has not yet been configured, a message will appear at the top of the admin panel saying:

The contact page will not work until you configure the extension.

In this case you must head into the extension’s settings, either by clicking the Settings button from the extension list, or by clicking on the configure the extension link in the notification bar as was quoted above.

Then configure the following options on the extension:

Finally, make sure that your system is configured to send email by going to Settings > Mail and sending a test email, or you can test the contact form on the website to see if it works.

Setting up subscription plans

The application includes an experimental extension which adds pricing plans to the script. These pricing plans can be assigned recurring or one-time fees which will be charged using PayPal. If this sounds interesting to you, please review the following warnings first:

🚨
An extended license from CodeCanyon is required to use this extension in production, however it is still available on regular licenses for testing, experimentation, and trial. Please contact Envato Support to upgrade your license if necessary.
🚨
There isn’t a live demo with this extension because it’s purely experimental. This application is not intended for commercialization due to the web scraping nature. Please review your local laws on commercial use of scraped data, and use at your own risk!
🚧
This extension was only intended as a proof-of-concept, though it has been used by many websites successfully. If you’re a developer, please feel free to reference the extension’s code and build upon it.

First, enable the extension under Settings > Extensions from within the admin panel. You will see an extension named Subscriptions & Plans, with a button to enable it.

Once the extension is enabled, two new links will appear in the left admin sidebar under a category named Subscriptions. Follow the below instructions to set up the extension:

  1. Click on the Subscriptions > Options link in the admin sidebar and configure the extension’s settings. You will need to enter your PayPal account’s business email address and set the currency code to match your account.
  1. Click on the Subscriptions > Plans link in the admin sidebar. You will see that a default Free plan has been configured automatically. The following instructions will assume that you wish to enter a free plan. Even if you don’t want this, you should still try it out for learning.
    1. Click the Edit button on the Free plan.
    1. Note that the plan has been assigned to the default user group, which is normally named Standard unless you have customized it. This extension uses user groups to determine which plan a user is on. This means each plan must be assigned its own unique group.
    1. The Allowed tools section will grant users on this plan access to all of the selected tools. By default, all of the tools will be selected. Edit this field and select which tools you want users to access for free. Hold the Ctrl key to select multiple tools.
    1. The Pricing section allows you to define the cost for one-time, monthly, and annual subscriptions to this plan.
      1. Setting all of the costs to 0 will make the plan free.
      1. However, if you set a cost greater than 0 for one field, setting the others to 0 will disable them. For example, if monthly cost is $20, and annual cost is $0, then users can pay monthly but not annually.
    1. The Options section allows you to change the behavior of the plan. In nearly all cases, you will want to set the When a user purchases this plan, move them to the following group field to match the user group defined in step b.
    1. Click the Save button.

Now with the Free plan configured as desired, it’s time to create a new premium plan. These instructions will create a new plan named “Pro” which costs $9 /month or $90 /year.

  1. Create a new user group at Users > Groups named “Pro”. Leave all permissions at their default selections unless desired and click the Create group button.
  1. At the top right of the Subscriptions > Plans page, click the New plan button.
  1. Enter the name “Pro”.
  1. Select the “Pro” group.
  1. Select the tools that this group will have access to. Hold the Ctrl key to select multiple. You will also need to make sure you select all of the tools that the lesser plan(s) have access to. In this case, make sure to also select everything that you selected in the Free plan configured above.
  1. Enter a monthly cost of 9 and an annual cost of 90.
  1. Under the When a user purchases this plan, move them to the following group option, select the “Pro” group.
  1. Click the Save button.

Now visit the public website and head over to the new Pricing page in the header. You should see your two plans with a breakdown of their enabled tools and their prices.

I recommend creating a new standard account on the website for testing. Go ahead and sign out, then register a new account from the pricing page by clicking “sign up” under the free plan. In the below section, I’ll show you how to manage that user’s subscription from the admin panel.

Managing user subscriptions

When the subscriptions extension is active, the Users > Users subsection of the admin panel will have additional options when viewing a user’s profile. Click on the user you’d like to manage.

At the top of their profile will appear a subscription section showing their current plan and details about the subscription, such as when it expires, when they first subscribed, and when their last payment was received.

To change the user’s plan, click on the Change plan button and select the new plan. By default, their current expiration date will be transferred to the new plan. If you are moving a user from the Free plan to a premium plan, this means their premium plan will never expire.

To change the user’s expiration date, click on the Manual adjust button. If the user’s subscription is currently set to never expire, you should first click the Expire now button. Then, click on either the +1 month or the +1 year button to set or add to the duration of the subscription.

Debugging

Due to the dynamic nature of this application, errors do periodically occur. In most cases, the application will handle those errors silently and the page will work as expected. If something isn’t working quite right in the application, here are some things you can try.

Viewing the error log

Open the Help > Diagnostics subsection of the admin panel. You will find an Errors section near the bottom of this page which shows recent errors that have occurred in the script.

Running diagnostic tests

If there is a problem in the script, the diagnostics in the admin panel might be able to detect the issue and provide further details. Open the Help > Diagnostics subsection of the admin panel and click the Start button near the top.

Activation

Activating the application

To activate the application from the admin panel, go to the Help > Diagnostics admin subsection and click the activate button on the right side. You will be prompted to sign in with your Envato account, after which you will be able to choose from a list of licenses under your account.

Deactivating or moving the license

You don’t need to deactivate your application under any circumstance. If you wish to activate an installation with the same license later, you will automatically be taken to a license manager where you can deactivate the old installation.

In some cases, the license manager will deactivate the old installation automatically, and the new activation will be seamless. Regardless, you don’t need to worry about it, just follow the steps during the new activation and you’ll be on your way. 👍

Technical information

Telemetry & data collection

In the Settings > Configuration subsection of the admin panel, an option is presented titled Send anonymous usage info. When enabled, the application will send some basic information to the developer (that’s me!) every few days. This information is limited to:

This information does not include any data on you or your users, it does not include any inputs or script settings, it’s exactly as listed above.

I use this information to make informed decisions about increasing server requirements. For instance, in 2018 I increased the script’s minimum PHP version 5.5 when I actually wanted to increase it to 5.6, however my telemetry showed too many users were still on 5.5.

I also use this information to monitor the popularity of tools, which allows me to focus my development in those areas.

I strongly recommend enabling this option to make sure you are included in these kinds of decisions and targeted development!

💡
Nothing to hide here! You can always view the last usage report that was sent to the developer. It will be saved to /resources/bin/last-usage.txt in the script.

Update backups

In the Settings > Configuration subsection of the admin panel, an option is shown titled Save files before updating. When enabled, the script will create before each update a zipped archive with a copy of all files that the update will modify.

For example, if you’ve made changes to a file in the script and accidentally left updates enabled, your work is saved inside one of these archives and can be recovered.

These archives are saved under the /resources/bin/ directory and have randomized names in the format: backup-update-7b0e0a11a2180-d1315e94dab53d64a6-1651992500.zip. You can reference the creation time of these files to find the one from the most recent update.

Recovering from failed updates

This is such a rare event that to my knowledge it hasn’t happened even once in the lifetime of this application. For example, if server unexpectedly shuts down while the script is updating, corruption may occur.

In this case, the update manager will automatically lock both the public website and the admin panel with the following message:

Critical error A recent update failed during file extraction. In order to protect the system, the site has been disabled. Please contact customer support for help on restoring the overwritten files.

This error is shown due to the presence of a lock file at one or both of the following locations which signals that the update process did not exit cleanly:

You can open these files with a text editor to learn more about what went wrong. There will be a list of files that the update manager successfully modified, as well as a file path under the FAILED_ON key which is where the failure occurred.

To recover from this event, please refer to the Update backups section directly above this section, where you will learn how to restore the modified files to their original versions.

Please restore all files in the backup, even if they were not responsible for the failure, to fully return to the prior version. Then delete both of the lock files and reattempt the update.

Disclaimers

This script is a web scraper

It’s important to note that this application is a web scraper. This means it retrieves most of its data from other websites, and it typically does so by disguising itself as a normal user of those websites. This has some important implications:

Data sources can go offline

The above scenarios happened in 2022, when the data sources we used for domain analysis (alexa.com) and backlinks (seoprofiler.com) both shut down within a week of eachother.

I managed to find alternative data sources for both and released an update after about one week of downtime, but we had to remove an Alexa Rank tool. In its place, I released two new tools for checking page and domain authority.

There’s no guarantee that when a data source shuts down we’ll be able to find a replacement for it. This means you should be prepared, however unlikely it may be, that tools can be suddenly removed from the script if absolutely necessary.

However, my guarantee to you is that when tools are removed from the script, I will endeavor to add at least the same number of new tools to the script as quickly as possible.

📢
The most likely data sources to stop working are those for keyword research, which I find myself having to replace every couple of years. The number of available data sources for keyword research has been declining rapidly in recent years, so be prepared for the worst.
Make sure to enable automatic updates in the script, and ensure that your cron job is running periodically, so your tools can be updated with new fixes or data sources!

Credits

The following assets and libraries were used in this application. Please note that all of these assets have been licensed for this usage.

You are not authorized to use these assets and libraries without acquiring your own additional license, except in the context of this application, or a single derived work without modifying the assets.

You are not authorized to modify any bundled image assets derived from the following items without acquiring your own additional license. For example, you cannot take the existing SEO Studio logo and change its text.