Digital Marketing (Growth and Analytics) · Projects
Project 3: A technical SEO audit, with the fixes
Marking guide version 1 · Lessons: DM1 lessons 1–5, DM2 lessons 1–5, DM3 lessons 1–5, DM10 lesson 4
The problem and who it's for
MittiMart's robots.txt was copied from a staging site and blocks every product page. Most pages share one title, few have descriptions,
none has a canonical link, and an old copy of the kulhad set page competes with the real one. The sitemap uses relative addresses, lists
the cart and checkout, and leaves out products. Images have no alt text or size, product pages have no structured data, and a 500 KB
slider script in the head blocks the home page. The owners want people searching for clay kitchenware to find their products, and want
to know honestly whether the fixes helped.
Scope
- Give every indexable page a unique title (10 to 60 characters) and description (50 to 160), one
h1, a language and a mobile viewport. - Add canonical links with the full address, pointing the old copy to the real kulhad set page.
- Fix
robots.txtso search engines can reach the shop and find the sitemap, and mark the cart, checkout and thank-you pagesnoindex. - Rebuild
sitemap.xmlwith exactly the indexable pages, at their canonical addresses. - Fix broken links and images, add alt text and sizes, and add Product structured data that matches each page.
- Keep the home page at 250 KB or less, with no script in the head that blocks the first paint.
- Write
seo/audit.mdwith the issues, their fixes and status, and the search traffic before and after, with honest limits.
Not included
- Link building, content marketing or a real Search Console account (optional extra on a site you own).
- Pages in other languages (DM2 lesson 4 covers
hreflang; optional extra). - Measuring Core Web Vitals from real users (DM3 explains field data; the kit checks page weight and blocking scripts).
Before you start
- Core: Module 12 (Webpage Content), Module 16 (Responsive Websites), Module 39 (Frontend Quality), Module 66 (Web Server Configuration).
- Path: DM1, DM2 and DM3 complete.
npm run test:seorunning (all 10 of its tests fail at first).
Starter files
mittimart/site/robots.txt: copied from the staging site, blocking/product/.mittimart/site/sitemap.xml: relative addresses, private pages, the duplicate and missing products.mittimart/site/*.htmlandmittimart/site/product/*.html: shared titles, few descriptions, no canonicals, blocking scripts.mittimart/site/js/vendor/big-slider.js: a 500 KB script loaded in the head of the home page.mittimart/seo/search-console.csv: an invented export of clicks and impressions for the 28 days before and the 28 days after the fixes.mittimart/seo/README.md: the headings and labelsaudit.mdmust use.mittimart/tests/seo.test.js: the 10 acceptance tests for this project.
Download everything at once: starter/digital-marketing-starter.zip.
Milestones
- Run
npm run test:seo, then crawl the site by hand with JavaScript turned off, listing every issue you find with its pages. - Fix
robots.txt,noindex, canonicals and the sitemap (tests 3, 4 and 5). - Fix titles, descriptions, headings, language and viewport (tests 1 and 2).
- Fix links and images, and add Product structured data (tests 6, 7 and 8).
- Make the home page light and remove blocking scripts (test 9).
- Write
seo/audit.mdfrom your list and the Search Console data (test 10), then run all 10 tests twice in a row.
Expected outputs
- 10 of 10 SEO tests passing, twice in a row.
- The fixed pages,
robots.txtandsitemap.xml, andseo/audit.md. - A one-page summary for the shop's owners: the three most important fixes, what changed in search, and what the figures can't prove.
Acceptance tests
| # | Input | Expected result |
|---|---|---|
| 1 | npm run test:seo |
10 of 10 pass, twice in a row |
| 2 | Every page, read with JavaScript off | Indexable pages have their own title and description, one h1, a language and a viewport; canonicals are full addresses, and the copy points to the kulhad set page (tests 1 to 3) |
| 3 | robots.txt and sitemap.xml |
/product/ is reachable and the sitemap is named; cart, checkout and thank-you are noindex; the sitemap lists exactly the indexable pages (tests 4 and 5) |
| 4 | Links, images and product pages | No broken links or images; alt text and sizes on images; one valid Product JSON-LD block per product whose name matches the h1 and whose price matches the page, in INR (tests 6 to 8) |
| 5 | The home page | 250 KB or less in total, and no script in the head without defer (test 9) |
| 6 | seo/audit.md |
At least 8 issues with a fix and a status; clicks 993 before and 1,841 after (85.4%); impressions before and after; limits that mention the season and say the fixes aren't proven to be the only cause (test 10) |
Failure and recovery exercises
- Put
Disallow: /product/back inrobots.txtand run test 4. Explain what would happen to the shop's product listings in search over the following weeks, then restore your fix. - Change one product's price on the page but not in its JSON-LD, and run test 8. Explain why a price in search results that doesn't match the page is a problem for shoppers and for the shop, then fix it.
- Load the slider script in the head again without
deferand measure the home page in your browser's Network tab. Write the before and after weights, then restore your fix.
Evidence to submit
- The deliverable link to your repository or folder with the SEO changes.
- The output of
npm run test:seoshowing 10 passed, pasted into test evidence. - Your
seo/audit.mdand the summary for the shop's owners. - Your explanation: how you ranked the issues, why the copy page has a canonical instead of being deleted, and why the traffic change isn't proof that the fixes caused it.
Marking guide and self-check
Pass rule: every Safety-critical (S) and Mandatory (M) item must be met. A single unmet safety item means the project is not complete, whatever else is done. Quality items are for your own improvement.
Your answers are saved in this browser on this device. Self-checked means you checked your own work against this guide; it is not a reviewer's approval. Never paste passwords, keys, tokens or real customer data here.
