Full Stack SEO Expert

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Any

SALARY

N/A

HOURS PER WEEK

TBD

DATE UPDATED

Sep 8, 2026

JOB OVERVIEW

About the Role

We're looking for a Full Stack SEO Expert to own organic growth strategy end-to-end — from technical audits and on-page optimisation to content strategy, link building, and reporting. This isn't a siloed specialist role; you'll need to move fluently across technical SEO, content, analytics, and (ideally) some development/CMS work to get results without waiting on other teams.

Responsibilities

Conduct technical SEO audits (site architecture, crawlability, indexation, Core Web Vitals, structured data/schema)
Own keyword research, topic clustering, and content strategy (hub-and-spoke models, cannibalization audits)
Optimise on-page elements: meta titles/descriptions, headers, internal linking, content briefs
Manage or execute basic technical fixes directly in CMS/platforms (WordPress, Shopify, Webflow, etc.)
Build and execute link-building/digital PR strategies
Set up and interpret analytics (GA4, Search Console, rank trackers like Ahrefs/SEMrush)
Report on organic performance with clear, actionable insights for clients or stakeholders
Stay current with algorithm updates and search behaviour shifts (including AI Overviews/SGE impact)
Collaborate with content writers, designers, and paid media to align on unified digital strategy

Requirements

3+ years in SEO with demonstrable ranking/traffic results
Strong grasp of technical SEO fundamentals (site speed, mobile-first indexing, structured data, redirects/canonicals)
Experience with SEO tools: Ahrefs, SEMrush, Screaming Frog, GSC, GA4
Comfortable working across CMS platforms (WordPress, Shopify, etc.)
Content strategy experience — able to brief or write SEO-optimised content
Basic HTML/CSS knowledge (JS a bonus)
Strong analytical skills and comfort with reporting/data storytelling
Experience managing multiple client accounts or projects simultaneously (agency experience a plus)

Nice to Have

Experience with local SEO / Google Business Profile optimisation
E-commerce SEO experience (PDP optimisation, faceted navigation)
Familiarity with schema markup implementation
CRM/marketing automation exposure (e.g. GoHighLevel)

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0008
Controller Execution Time ( Jobseekers / Job )  0.0163
Total Execution Time  0.0176
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,491,304 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Full-Stack-SEO-Expert-1693442
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0108 seconds)  (Hide)
0.0004   SELECT *
                                
FROM exrates
                                WHERE rate_name 
= 'USD-PHP' 
0.0004   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1693442
 LIMIT 1 
0.0004   SELECT *
FROM `employers`
WHERE `employer_id` = 873554
 LIMIT 1 
0.0014   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `misc` ON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1693442
AND `misc`.`id` IS NULL 
0.0005   SELECT e.business_name, e.logo, e.website, e.rebill_date, e.date_added member_date, hits, DATEDIFF('2026-10-03',ej.date_added) duration_days, DATEDIFF('2026-10-03',e.rebill_date) duration_rebill, ej.*, e.deactivate FROM employers e, employer_jobs ej WHERE e.employer_id = ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id = '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-10-03',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != 1 AND ej.deleted = 0 AND job_id = '1693442' 
0.0008   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1693442 
0.0009   UPDATE employer_jobs SET hit_counts = '***Jul-21-2026=393***Jul-22-2026=69***Jul-23-2026=26***Jul-24-2026=56***Jul-25-2026=20***Jul-26-2026=26***Jul-27-2026=23***Jul-28-2026=19***Jul-29-2026=16***Jul-30-2026=18***Jul-31-2026=14***Aug-01-2026=15***Aug-02-2026=13***Aug-03-2026=15***Aug-04-2026=12***Aug-05-2026=2***Aug-06-2026=3***Aug-07-2026=1***Aug-08-2026=2***Aug-12-2026=1***Aug-16-2026=1***Aug-21-2026=5***Aug-22-2026=4***Aug-23-2026=1***Aug-26-2026=1***Aug-27-2026=3***Aug-29-2026=1***Aug-30-2026=1***Aug-31-2026=4***Sep-01-2026=2***Sep-05-2026=1***Sep-06-2026=1***Sep-08-2026=510***Sep-09-2026=87***Sep-10-2026=52***Sep-11-2026=38***Sep-12-2026=21***Sep-13-2026=9***Sep-14-2026=7***Sep-15-2026=5***Sep-16-2026=8***Sep-17-2026=6***Sep-18-2026=8***Sep-19-2026=2***Sep-20-2026=2***Sep-21-2026=4***Sep-22-2026=5***Sep-23-2026=10***Sep-24-2026=1***Sep-26-2026=4***Sep-28-2026=4***Sep-30-2026=1***Oct-01-2026=5***Oct-03-2026=1' WHERE job_id= '1693442'  
0.0007   UPDATE employer_jobs SET monthly_hits = '***Jul-2026=679***Aug-2026=85***Sep-2026=787***Oct-2026=6' WHERE job_id= '1693442'  
0.0012   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id = '' AND job_id = '1693442' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1693442 
0.0032   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '873554'
AND `date_added` >= '2022-06-08' 
0.0004   select * from teasers 
0.0002   SELECT * FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)