Keyword Monitor is a web application built with Laravel framework. It allows users to track the position of their website for specific keywords on search engines like Google. The application provides features such as:
- Keyword management: Add, edit, and delete keywords to track.
- Search engine selection: Choose the service to track (e.g., google.selenium, tools.seo.ai, seremium).
- Position tracking: Monitor the position of your website for each keyword on the selected search engine.
- Reporting: Generate reports to analyze the performance of your keywords over time.
- User authentication: Secure access to the application with user registration and login.
- Laravel 11.9 as the backend framework
- Vue.js 3 with Inertia.js for the frontend
- Tailwind CSS for styling
- Configuration files for Vite, Tailwind, and PHPUnit
- Clone the repository:
git clone https://github.com/yasinkuyu/keyword-monitor.git - Navigate to the project directory:
cd keyword-monitor - Install dependencies:
composer installandnpm install - Copy the environment file:
cp .env.example .env - Generate an application key:
php artisan key:generate - Configure your database credentials in the
.envfile - Run database migrations:
php artisan migrate - Seed the database with languages and countries:
php artisan db:seed - Start the development server:
php artisan serve&&npm run dev
The application uses database-driven lists for languages and countries. To add new languages or countries:
- Open
database/seeders/LanguagesTableSeeder.php - Add a new entry to the
$languagesarray withcodeandname:['code' => 'hi', 'name' => 'Hindi'],
- Run the seeder:
php artisan db:seed --class=LanguagesTableSeeder- The seeder is idempotent, so you can run it multiple times safely
- Existing records will be updated if you change the name
- Open
database/seeders/CountriesTableSeeder.php - Add a new entry to the
$countriesarray withcodeandname:['code' => 'nz', 'name' => 'New Zealand'],
- Run the seeder:
php artisan db:seed --class=CountriesTableSeeder- The seeder is idempotent, so you can run it multiple times safely
- Existing records will be updated if you change the name
- Language and country codes must be unique (enforced by database constraints)
- New languages and countries will automatically appear in the dashboard dropdowns
- No code changes are required in controllers or views
- You can run all seeders with
php artisan db:seedor specific seeders as shown above
* * * * * /opt/homebrew/Cellar/php/8.3.6/bin/php /DEV/KeywordMonitor/artisan schedule:run >> /dev/null 2>&1
This cron job runs the schedule:run command every minute. This command will run any scheduled tasks that are defined in the App\Console\Kernel class. The >> /dev/null 2>&1 part of the command redirects the output of the command to the /dev/null file, which is a special file that discards all data written to it. This prevents the output of the command from being displayed in the terminal.
If you encounter any router issues, run the php artisan ziggy:generate command.
- Register a new account or log in with your existing credentials
- Add keywords you want to track
- Select the search engine for tracking
- Monitor the position of your website for the added keywords
- Generate reports to analyze the performance over time
The Seremium service is a SERP API provider that requires configuration:
- Obtain an API key from your Seremium provider
- Add the following to your
.envfile:SEREMIUM_API_KEY=your_api_key_here SEREMIUM_API_URL=https://api.seremium.com/v1/search SEREMIUM_DEBUG=false - Set
SEREMIUM_DEBUG=trueto enable debug logging for troubleshooting- Debug logs will show request/response details without exposing secrets
- Logs are written to your configured Laravel log channel
The Seremium service distinguishes between different error types:
- Authentication errors (401/403): Invalid API key
- Quota exceeded (402): API quota limit reached
- Rate limiting (429): Too many requests - automatic retry with exponential backoff
- Server errors (5xx): Provider outage - automatic retry with exponential backoff
- Domain not found: Returns position 0 (valid result, not an error)
- Provider failures: Throw exceptions with clear error messages
The service implements retry logic with exponential backoff for transient failures (rate limits and server errors).
php artisan migrate:rollback && php artisan migrate && php artisan db:seed
Demo data usage instructions:
- You can restore, recreate, and add demo data to the database by running the above command.
- These commands will delete all existing data in your database. So use them carefully.
- Demo data can be used to test certain features of your application.
Laravel has the most extensive and thorough documentation and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.
You may also try the Laravel Bootcamp, where you will be guided through building a modern Laravel application from scratch.
If you don't feel like reading, Laracasts can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
Thank you for considering contributing to the Keyword Monitor application! The contribution guide can be found in the Laravel documentation.
The Keyword Monitor application is open-sourced software licensed under the Apache License.




