Senior Web Developer - Local Service Sites (SEO + Conversion Copy)

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

TYPE OF WORK

Part Time

SALARY

$8-$10/hr DOE + per-project bonus

HOURS PER WEEK

35

DATE UPDATED

Sep 2, 2026

JOB OVERVIEW

Plain Media LLC is a web design and digital marketing agency in Salt Lake City, Utah. We build and rank websites for local service businesses - roofers, contractors, disposal companies, home service brands. We are hiring ONE senior web developer to help us build client sites.

You'll work directly with one of our marketing consultants that has been working one-on-one with the client. You will never have to work with the client. You always work with somebody who understands web development and can get you the information that you need.

What we typically do is we will build a couple of sections and blocks for the site. We will d ---------- on hosting, CMS or no CMS, and how we're building it. Then we'll design the home page, service page template, area service page template, amongst a couple other key pages, and land on copy direction after we've completed keyword research and finished URL mapping. We also will typically run a listings campaign for NAP consistency.

WHAT YOU WILL DO
- Build fast, clean marketing sites in WordPress or a modern JS framework (React, Astro, Next)
- Plan site structure and URL mapping BEFORE a single page gets built
- Collaborate and write/optimize on-page copy: titles, metas, H1s, service pages, FAQs
- Handle local SEO fundamentals: service area pages, NAP consistency, schema markup, Google Business Profile alignment
- Do keyword research and turn it into a real page map
- Use CSS animation to guide attention, not to decorate
- Build content-heavy, skimmable pages that answer the questions real customers actually ask
- Set up tracking and security: GA4, Search Console, GTM, Meta Pixel, reCAPTCHA / Cloudflare Turnstile
- Integrate CRM, build lead magnets and email marketing integrations.
- Landing pages and detailed GTM

MUST HAVE
- Senior-level front end: HTML, CSS, JavaScript
- WordPress AND at least one modern JS framework (React, Astro, or Next)
- Strong CSS animation skills
- On-page SEO and local SEO experience you can prove with live URLs
- Copywriting in excellent written English - headlines, service pages, CTAs that convert, PROPER HTML structure
- A real understanding of consumer psychology: why people hesitate, what makes them trust a local business, what makes them pick up the phone and how we design based on those emotions. This is the piece we care about most. Anyone can build a page. We need someone who knows why a page works and how to accomplish the sites goal.

NICE TO HAVE
- Advanced technical SEO, schema, Core Web Vitals
- Ahrefs, Semrush, or BrightLocal experience
- CRM integration, landing pages, lead magnets
- Custom embeddable widgets and calculators
- A CMS setup that lets non-technical clients edit their own content
- RankMath SEO Pro experience

ABOUT AI
You are welcome to use AI to build. We use Claude Code on most of our projects. But AI only multiplies what you already know. If you do not have a foundational grasp of proper site structure and buyer psychology on your own, the output shows it immediately - and we will notice. We have a chief web developer that will monitor output and work closely with you to align on direction.

THE DETAILS
- Part time, 35 hours per week, long term
- $8-$10 per hour depending on skill, PLUS per-project bonuses tied to results
- Paid on time, every time
- Hours and pay grow as our client load grows
- Bonuses Available
- Hiring bonuses available
- Build your own team and be apart of a fast growing business

HOW TO APPLY - read carefully. Applications that skip these steps are deleted without reply.
1) Subject line: LOCAL RANK - [name your favorite CSS property]
2) Send 2-3 live URLs of local service business sites you built. For each one, tell me what you did and what it produced (rankings, calls, form fills). Did you work with a team and how long did it take?
3) Answer in 3-5 sentences: A homeowner lands on a roofing site the day after a hailstorm. What are the first three things that page must do to earn the call, and why?
4) Tell me your stack (WordPress or which framework) and which SEO tools you actually use week to week.
5) Tell me your available hours in US Mountain Time. Bonus if you have Friday, Saturday, Sunday availability.

Thank YOU!

VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0010
Controller Execution Time ( Jobseekers / Job )  0.0281
Total Execution Time  0.0306
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,511,232 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Senior-Web-Developer-Local-Service-Sites-SEO-Conversion-Copy-1713748
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0147 seconds)  (Hide)
0.0005   SELECT *
                                
FROM exrates
                                WHERE rate_name 
= 'USD-PHP' 
0.0004   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1713748
 LIMIT 1 
0.0010   SELECT *
FROM `employers`
WHERE `employer_id` = 963246
 LIMIT 1 
0.0010   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `misc` ON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1713748
AND `misc`.`id` IS NULL 
0.0011   SELECT e.business_name, e.logo, e.website, e.rebill_date, e.date_added member_date, hits, DATEDIFF('2026-09-24',ej.date_added) duration_days, DATEDIFF('2026-09-24',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-09-24',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != 1 AND ej.deleted = 0 AND job_id = '1713748' 
0.0008   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1713748 
0.0011   UPDATE employer_jobs SET hit_counts = '***Aug-20-2026=419***Aug-21-2026=450***Aug-22-2026=119***Aug-23-2026=57***Aug-24-2026=102***Aug-25-2026=68***Aug-26-2026=57***Aug-27-2026=31***Aug-28-2026=16***Aug-29-2026=8***Aug-30-2026=8***Aug-31-2026=30***Sep-01-2026=7***Sep-02-2026=233***Sep-03-2026=300***Sep-04-2026=81***Sep-05-2026=23***Sep-06-2026=30***Sep-07-2026=35***Sep-08-2026=44***Sep-09-2026=24***Sep-10-2026=19***Sep-11-2026=18***Sep-12-2026=12***Sep-13-2026=11***Sep-14-2026=12***Sep-15-2026=8***Sep-16-2026=15***Sep-17-2026=7***Sep-18-2026=8***Sep-19-2026=3***Sep-24-2026=1' WHERE job_id= '1713748'  
0.0034   UPDATE employer_jobs SET monthly_hits = '***Aug-2026=1365***Sep-2026=891' WHERE job_id= '1713748'  
0.0010   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id = '' AND job_id = '1713748' AND status LIKE 'sent%' ORDER BY id DESC  
0.0004   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1713748 
0.0028   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '963246'
AND `date_added` >= '2022-06-08' 
0.0005   select * from teasers 
0.0007   SELECT * FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)