SEO: robots.txt + sitemap.xml + <noscript> content block + 301 redirect old->new domain

This commit is contained in:
drjones
2026-09-01 21:30:26 -07:00
parent 9ed89ae6ea
commit 7266c2920a
4 changed files with 105 additions and 0 deletions

42
add_seo.py Normal file
View File

@@ -0,0 +1,42 @@
import io
p = "/Users/drjones/pest-nocturne/index.html"
s = open(p).read()
NOSCRIPT = '''<noscript>
<div style="font-family:system-ui,sans-serif;max-width:720px;margin:2rem auto;padding:0 1rem;color:#1a1a1a">
<h1>Evergreen Applicator — Washington Pesticide Applicator Exam Prep</h1>
<p>Free study suite to pass the Washington State Department of Agriculture (WSDA) pesticide applicator license. 318 practice questions, a timed 50-question mock exam, and a pest identification field guide.</p>
<h2>License categories covered</h2>
<ul>
<li><strong>Core</strong> (general standards) — required for every commercial applicator</li>
<li><strong>Structural</strong> — structural pest control: wood-destroying organisms, cockroaches, ants, rodents, bed bugs</li>
<li><strong>Ornamental &amp; Turf</strong> — lawn and landscape pests, weeds, turf disease</li>
<li><strong>Agricultural</strong> — crop pest control and field application</li>
</ul>
<h2>Exam knowledge areas</h2>
<ul>
<li>Pesticide safety, storage, and formulations</li>
<li>Label reading (signal words, directions for use)</li>
<li>Environmental protection (drift, buffer zones, groundwater, pollinators)</li>
<li>Laws &amp; regulations (FIFRA, Worker Protection Standard, recordkeeping)</li>
<li>Integrated Pest Management (IPM) — monitoring, thresholds, biological control</li>
<li>Toxicology — LD50, exposure routes, first aid</li>
<li>Application equipment, nozzles, and calibration</li>
<li>Personal protective equipment (PPE)</li>
<li>Worker Protection Standard (WPS) and restricted-entry intervals</li>
<li>Calibration &amp; math — GPA, mixing ratios, nozzle output</li>
</ul>
<h2>Washington exam format</h2>
<p>50–100 multiple-choice questions, 120 minutes, closed book, 70% to pass. Exam fee $33, license fee $73. Renew every 5 years with 40 continuing-education units (CEUs). Administered by WSDA at (360) 902-2020 (agr.wa.gov).</p>
<h2>Pest identification field guide</h2>
<p>13 chapters covering dampwood and subterranean termites, carpenter ants, cockroaches, stored-product pests, rodents, spiders, and more — with real photographs and Washington-specific field notes.</p>
<p><em>Enable JavaScript to use the interactive study suite, flashcards, and practice exams.</em></p>
</div>
</noscript>'''
# inject the noscript right after </main>
s = s.replace("</main>", "</main>\n" + NOSCRIPT, 1)
open(p, "w").write(s)
print("noscript SEO block injected; size", len(s))

24
app.py
View File

@@ -60,6 +60,30 @@ def index():
def images(filename):
return send_from_directory(os.path.join(BASE_DIR, "images"), filename)
@app.route("/robots.txt")
def robots():
body = (
"User-agent: *\n"
"Allow: /\n"
"Sitemap: https://evergreenapplicator.thetempleofdoom.com/sitemap.xml\n"
)
return body, 200, {"Content-Type": "text/plain; charset=utf-8"}
@app.route("/sitemap.xml")
def sitemap():
body = (
'<?xml version="1.0" encoding="UTF-8"?>\n'
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n'
' <url>\n'
' <loc>https://evergreenapplicator.thetempleofdoom.com/</loc>\n'
' <lastmod>2026-09-01</lastmod>\n'
' <changefreq>weekly</changefreq>\n'
' <priority>1.0</priority>\n'
' </url>\n'
'</urlset>\n'
)
return body, 200, {"Content-Type": "application/xml; charset=utf-8"}
@app.route("/api/status")
def api_status():
oid = request.args.get("order", "")

View File

@@ -375,6 +375,37 @@ mark{background:color-mix(in srgb,var(--brass) 30%,transparent); color:inherit;
<section class="view" id="v-wa"></section>
<section class="view" id="v-waprep"></section>
</main>
<noscript>
<div style="font-family:system-ui,sans-serif;max-width:720px;margin:2rem auto;padding:0 1rem;color:#1a1a1a">
<h1>Evergreen Applicator — Washington Pesticide Applicator Exam Prep</h1>
<p>Free study suite to pass the Washington State Department of Agriculture (WSDA) pesticide applicator license. 318 practice questions, a timed 50-question mock exam, and a pest identification field guide.</p>
<h2>License categories covered</h2>
<ul>
<li><strong>Core</strong> (general standards) — required for every commercial applicator</li>
<li><strong>Structural</strong> — structural pest control: wood-destroying organisms, cockroaches, ants, rodents, bed bugs</li>
<li><strong>Ornamental &amp; Turf</strong> — lawn and landscape pests, weeds, turf disease</li>
<li><strong>Agricultural</strong> — crop pest control and field application</li>
</ul>
<h2>Exam knowledge areas</h2>
<ul>
<li>Pesticide safety, storage, and formulations</li>
<li>Label reading (signal words, directions for use)</li>
<li>Environmental protection (drift, buffer zones, groundwater, pollinators)</li>
<li>Laws &amp; regulations (FIFRA, Worker Protection Standard, recordkeeping)</li>
<li>Integrated Pest Management (IPM) — monitoring, thresholds, biological control</li>
<li>Toxicology — LD50, exposure routes, first aid</li>
<li>Application equipment, nozzles, and calibration</li>
<li>Personal protective equipment (PPE)</li>
<li>Worker Protection Standard (WPS) and restricted-entry intervals</li>
<li>Calibration &amp; math — GPA, mixing ratios, nozzle output</li>
</ul>
<h2>Washington exam format</h2>
<p>50–100 multiple-choice questions, 120 minutes, closed book, 70% to pass. Exam fee $33, license fee $73. Renew every 5 years with 40 continuing-education units (CEUs). Administered by WSDA at (360) 902-2020 (agr.wa.gov).</p>
<h2>Pest identification field guide</h2>
<p>13 chapters covering dampwood and subterranean termites, carpenter ants, cockroaches, stored-product pests, rodents, spiders, and more — with real photographs and Washington-specific field notes.</p>
<p><em>Enable JavaScript to use the interactive study suite, flashcards, and practice exams.</em></p>
</div>
</noscript>
<footer class="foot">
Built from <b>EM019 — Study Manual for Pest Management Professionals</b>, WSU Extension (rev. April 2021).<br>

View File

@@ -1,5 +1,13 @@
# 301 redirect: old domain -> new (SEO consolidation)
server {
listen 80;
server_name nocturne.thetempleofdoom.com;
return 301 https://evergreenapplicator.thetempleofdoom.com$request_uri;
}
# main site (default for everything else)
server {
listen 80 default_server;
server_name _;
location / {