How to use Seowolf's Notepad, and what each of its tools does — with real SEO examples. New here? Read the Quick Start (two minutes), or jump to any operation below and press Try it to open it in the tool.
Paste anything into the editor — keywords, URLs, domain names, titles, or any line-based data — or drop a .txt / .csv file onto it. Each line is one item. The bar under the editor counts lines and flags duplicates as you type.
💡 Press Example to try it on a sample keyword list first.Click the search bar above the editor (or press Ctrl+K or /) and type what you want: dedupe, lowercase, extract domains, combine. With the bar empty you'll see fixes suggested for your list, your recent operations and every tool grouped by category. The Suggested chips under the bar are one-click fixes worked out from your list — e.g. “Remove 3 duplicates”.
Operations that need input — a word to filter on, a prefix, a second list — open their settings right under the search bar, with a live preview such as “3 lines removed” before you press Apply.
💡 Example: Find & Replace asks for Find and Replace with; Compare two lists operations ask for the second list.Your list changes in place and each operation appears as a step chip above the editor. Click ✕ on any step to take just that one out — the list is recalculated from your original — or click the step to change its settings. Copy, .txt and .csv sit under the editor, and Diff shows exactly which lines were added and removed. Reports such as Word Frequency open in a side panel and never change your list.
Not sure which tool you need? Each task page opens the Notepad with the right ones ready: tick the fixes you want (the number beside each shows how many lines it would change) and apply them in one go.
Paste a messy keyword export and clean it in one go: trim spaces, fix blank rows, lowercase and remove duplicates. Free, instant, nothing uploaded.
Compare two keyword lists: find the overlap, the keyword gap (only in yours or theirs), or merge them without duplicates. Free and runs in your browser.
Generate every combination of two keyword lists — modifiers × products, cities × services — or add a prefix, suffix or search operator to every line. Free.
Normalise a URL list in one go: strip UTM and query parameters, upgrade to https, trim and dedupe — or reduce URLs to domains. Free, runs in your browser.
Check hundreds of meta titles and descriptions at once: flag titles over 60 characters and descriptions over 160, or preview them as Google results.
Analyse a keyword list: word frequency, keyword cannibalization groups, unique vocabulary and line statistics. Free and private — runs in your browser.
Every operation you apply is kept as a step — a chip above the editor. The editor always shows your original text run through the steps, which is what makes each one reversible on its own.
Click ✕ on a step and the list is recalculated from your original without it — you can take out the dedupe you ran three steps ago and keep everything after it. Click the step's name to change its settings.
Ctrl+Z and Ctrl+Y step backwards and forwards through everything — operations, pastes, clears and typing. The message that appears after an operation also has an Undo button.
Open Steps & recipes to switch steps off (to see what one does), reorder them or edit them. Save recipe keeps the steps under a name so you can apply the same clean-up to next month's export in one click.
Copy share link gives you a URL containing the steps — never your list. Whoever opens it gets the recipe ready to apply to their own list.
Editing the text by hand merges the current steps into it (the chips disappear because your edit can't be replayed). Undo brings them back if that wasn't what you wanted.
Your list and its steps are saved in your browser as you work and restored when you come back. Saved lists and recipes also live in your browser — nothing is stored on our servers.
Always start here when you paste raw data from scrapers, exports, or copy-paste from spreadsheets. Messy input gives messy results.
Strips invisible spaces from the beginning and end of every line, then deletes any line that ends up empty. This is the single most useful starting operation — run it first on any raw data.
💡 Before: running shoes → After: running shoes
Deletes lines that contain only whitespace, without touching the content of other lines. Useful after splitting CSV data or copying from a spreadsheet that left empty rows between entries.
Keeps only the first time each line appears. The match is character-perfect — Buy Shoes and buy shoes are treated as different lines and both kept.
Same as above but ignores capitalisation — BUY SHOES, Buy Shoes, and buy shoes are all treated as the same line. The first version found is kept.
Collapses multiple internal spaces into one and trims the edges — fixes the messy spacing that comes from copy-pasting out of spreadsheets or PDFs.
💡 Fix keyword lists copied from a PDF or scanned documentStrips HTML tags and BBCode markup from every line, leaving only the readable text content behind.
💡 Strip formatting out of a CMS export before reusing the textRemoves commas, brackets, quotation marks and other punctuation, leaving only words and numbers.
💡 Normalise keyword variants that differ only by punctuationRemoves any line whose entire content is numeric — prices, IDs, years — while leaving lines with mixed text and numbers untouched.
💡 Filter out ID or price columns accidentally pasted into a keyword listRemoves a line only when it is identical to the line directly above it. Most useful right after a sort, when duplicates end up sitting next to each other.
💡 Clean a list immediately after sorting, when duplicates end up adjacentRemoves bullets and numbering from the start of lines — “1.”, “2)”, “-”, “•”, “*”, “a)”, “[ ]” — left over from copying lists out of documents, emails or slides.
1. running shoes - trail shoes • hiking boots 12) socks a) laces [x] insoles plain line
running shoes trail shoes hiking boots socks laces insoles plain line
Turns curly quotes into straight ones, en/em dashes into hyphens, “…” into three dots and unusual spaces (non-breaking, thin) into normal spaces — so lines copied from Word or a CMS match the rest.
“Best” shoes – 2025’s pick…
"Best" shoes - 2025's pick...
Deletes zero-width spaces, byte-order marks, soft hyphens and control characters you can’t see — the usual reason two identical-looking lines don’t count as duplicates.
running shoes trail shoes hiking
running shoes trail shoes hiking
Turns &, ", – and similar codes back into the characters they stand for — or the reverse, for pasting text into HTML safely.
Tom & Jerry – "classic"
Tom & Jerry – "classic"
Turns %20, %2F and + back into spaces and characters (handy for keywords exported from URLs and logs), or encodes lines for use in a URL.
running%20shoes%2Fmen best+trail+shoes
running shoes/men best trail shoes
Repairs text that was saved as UTF-8 but opened as Windows-1252 — “café” back to “café”, “don’t” to “don’t”. Lines that aren’t garbled are left untouched.
café near me don’t miss already fine é
café near me don’t miss already fine é
Strips emoji and pictographic symbols from every line and tidies the spaces they leave behind.
great shoes 👟🔥 ⭐ top pick ⭐
great shoes top pick
Removes lines written mostly in a non-Latin script (Cyrillic, Chinese, Arabic…) — useful for stripping foreign-language queries out of a keyword export. Accented letters such as é and ñ count as Latin.
running shoes кроссовки 跑鞋 café de paris 2025
running shoes café de paris 2025
Every filter operation has two modes — Remove (delete matching lines) and Keep (delete everything that doesn't match). Think of Keep as a search within your list.
Type a word or phrase in the field that appears. Every line containing that text is removed or kept. Tick Case insensitive to ignore capitalisation.
💡 Have a list of URLs and want only the blog posts? Use Keep Lines Containing with/blog/. Want to remove all product pages? Use Remove Lines Containing with /product/.
Try it: Remove Lines Containing · Keep Lines Containing Full guide
Only matches at the very beginning of the line. Useful for stripping comment lines, filtering URLs by protocol, or keeping only lines that begin with a specific keyword.
💡 Remove lines starting with# to clean up a robots.txt or config file you've pasted in. Keep lines starting with https:// to isolate absolute URLs.
Try it: Remove Lines Starting With · Keep Lines Starting With Full guide
Matches at the very end of the line. Great for filtering file types or URL extensions.
💡 Keep lines ending with.html to isolate static pages. Remove lines ending with /feed/ to drop RSS URLs from a crawl export.
Try it: Remove Lines Ending With · Keep Lines Ending With Full guide
One click — no text field needed. Removes or keeps any line that contains at least one number anywhere in it.
💡 Keyword list containsbest laptop 2024 and best laptop? Use Remove Lines With Digits to drop the year-specific versions in one click.
Try it: Remove Lines With Digits · Keep Lines With Digits Full guide
Enter a character count. Lines shorter than that number are removed (to kill noise like single words or stop words), or lines longer than the limit are removed (to drop over-stuffed phrases).
💡 Remove lines shorter than10 characters to filter out single-word keywords. Remove lines longer than 60 to keep only titles that fit in a Google SERP.
Try it: Remove Lines Shorter Than · Remove Lines Longer Than Full guide
For advanced users. Type a regular expression (without the surrounding slashes) and toggle case-insensitive matching. Every line that matches the pattern is removed or kept.
💡 Keep only lines that look like email addresses:[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}. Remove lines that contain a year between 2000–2029: 20[0-2][0-9].
Try it: Remove Lines Matching Regex · Keep Lines Matching Regex Full guide
Removes every line that contains any word or phrase from a list — a whole negative-keyword or brand list in one go.
cheap running shoes best running shoes free shoe laces freestyle shoes
best running shoes freestyle shoes
Keeps only lines that contain at least one word or phrase from a list — pull every keyword about your products or topics at once.
trail running shoes hiking boots running socks yoga mat
trail running shoes hiking boots
Keeps only lines with a number of words in the range you set — e.g. 3 to 6 words for long-tail keywords, or exactly 1 for head terms.
shoes running shoes best trail running shoes best waterproof trail running shoes for women
running shoes best trail running shoes
Keeps lines that are questions — starting with who, what, why, how, can, does, is… or ending in “?” — the raw material for FAQs and People Also Ask content.
how to clean running shoes best running shoes are running shoes waterproof running shoes for flat feet?
how to clean running shoes are running shoes waterproof running shoes for flat feet?
Removes lines that differ from an earlier one only by capitals, punctuation, plural vs singular, or word order — “running shoe”, “Running Shoes!” and “shoes running” become one. Keeps the first.
running shoe Running Shoes! shoes running trail shoes trail shoe
running shoe trail shoes
Removes a line when it appears word-for-word inside a longer line of the list — “running shoes” goes if “best running shoes” is there. Leaves only the most specific keywords.
running shoes best running shoes shoes hiking boots
best running shoes hiking boots
Keeps either the keywords that mention your brand terms or the ones that don’t — the first split in almost every keyword and Search Console analysis.
nike running shoes best running shoes air max review trail shoes
best running shoes trail shoes
Adds your chosen text to the beginning of every line. Whatever you type in the field is glued to the front of each item.
💡 Turn a list of page slugs into full URLs: prefixhttps://example.com/ to about-us → https://example.com/about-us. Or prefix buy (with a space) to a product keyword list.
Adds your chosen text to the end of every line.
💡 Append review to a product list to generate review keyword variants. Append ?utm_source=email to tag a URL list for campaign tracking.
Puts double or single quote marks around every line. Choose the quote type from the dropdown that appears.
💡 Wrap keywords in double quotes to create phrase-match ready strings for Google search:"best running shoes". Wrap values in single quotes to generate a SQL IN ('val1','val2') list.
Adds a Google search operator to the start of every line. Pick from allintitle:, intitle:, inurl:, site:, or link:.
site: to create site:competitor.com queries you can run one by one in Google to check their indexed pages.
Prepends 1., 2., 3.… to every line in order. Instant numbered list — useful for ranking lists, ordered reports, or creating a numbered keyword list to share with a client.
Wraps every line in a pattern you write. Use {line} for the line, {n} for its number, {lower}, {upper} or {slug} for converted versions.
running shoes trail shoes
<li>1. running shoes</li> <li>2. trail shoes</li>
Formats keywords for Google Ads or Microsoft Ads: "phrase", [exact], all three match types, or as negative keywords. Existing quotes and brackets are cleaned first.
running shoes "trail shoes"
running shoes "running shoes" [running shoes] trail shoes "trail shoes" [trail shoes]
Alphabetical sort in either direction. Good for normalising a list before comparing it with another, or for producing a tidy client-ready deliverable.
Try it: Sort A to Z · Sort Z to A Full guide
Sorts by the number of characters in each line. Short lines first = head terms at the top. Long lines first = long-tail at the top. Very useful for spotting which keywords are broad vs. specific.
💡 Shortest first quickly separates 1-2 word head terms from 5+ word long-tail phrases — helps you decide which need a landing page vs. a blog post.Try it: Sort by Length (Shortest First) · Sort by Length (Longest First) Full guide
Counts the number of words (not characters) in each line and sorts accordingly. Especially useful for keyword clustering — single-word terms at the top, multi-word intent phrases at the bottom.
Try it: Sort by Word Count (Fewest First) · Sort by Word Count (Most First) Full guide
Randomises the order. Useful for unbiased sampling from a large list, randomising the order of ad copy variations for testing, or anonymising the ranking within a list before sharing.
Flips the entire list upside down. If you had it sorted A→Z, reversing gives you Z→A without re-running a sort. Also useful if a tool outputs items in ascending order and you want descending.
Sorts the individual words inside each line alphabetically, which helps surface duplicate phrase variants.
💡 Normalise word order to spot duplicate phrase variantsSorts so numbers inside lines go in numeric order — “page 2” before “page 10”, “size 9” before “size 11” — which plain A→Z sorting gets wrong.
page 10 page 2 Page 1 page 21
Page 1 page 2 page 10 page 21
Sorts URLs by their root domain (so each site’s URLs sit together) or keywords by their last word (so “running shoes”, “trail shoes” and “walking shoes” sit together).
trail shoes hiking boots running shoes wool socks
hiking boots running shoes trail shoes wool socks
These four operations work with two lists. When you select one, a second text area appears beneath the first — paste your second list there. The top area is always List 1.
Combines both lists into one. Tick Remove duplicates after union to automatically deduplicate the result. This is the everyday "merge and clean" operation.
💡 You've exported keywords from Ahrefs into List 1 and from SEMrush into List 2. Union + deduplicate gives you one clean master list with no repeats.Creates every possible pairing of one line from List 1 with one line from List 2, joined by a separator (space by default, but you can change it). If List 1 has 5 items and List 2 has 10, you get 50 combinations.
List 1: best, cheap, buy List 2: running shoes, sneakers Result: best running shoes best sneakers cheap running shoes cheap sneakers buy running shoes buy sneakers💡 The fastest way to generate a long-tail keyword list at scale. Use modifiers as List 1 (best, top, cheap, near me, for women) and seed keywords as List 2.
Returns only lines that appear in both lists. Lines unique to either list are dropped.
💡 List 1 = your ranking keywords. List 2 = a competitor's ranking keywords. Intersection shows where you're competing head-to-head. These are your battleground terms — prioritise them.Returns lines from List 1 that do not appear in List 2. Lines that exist in both are removed.
💡 List 1 = competitor's keywords. List 2 = your own keywords. The result is your keyword gap — terms they rank for that you don't. Swap the lists to find your exclusive wins.Alternates lines from two lists (A1, B1, A2, B2…), useful for pairing ad headline and description variants.
💡 Pair ad headlines with matching descriptions for a bulk uploadReturns the lines that appear in one list but not the other — your list’s unique lines first, then the second list’s. The two-way keyword gap in one step.
running shoes trail shoes hiking boots
running shoes hiking boots wool socks
Joins line 1 of your list with line 1 of the second list, line 2 with line 2, and so on — “old | new” pairs for redirects, keyword | URL mappings, or two columns for a spreadsheet.
/old-shoes/ /old-boots/
/old-shoes/ | /shoes/ /old-boots/ | /boots/
Like VLOOKUP: for each line in your list, finds it in a “key | value” table (the second list) and adds the value — search volume, a URL, a category — or marks it as not found.
running shoes trail shoes socks
running shoes | 49,500 trail shoes | 12,100 socks | (not found)
Splits each line at a character you specify (comma by default) and keeps only the column at the index you choose. Column numbering starts at 0, so the first column is 0, second is 1, and so on.
keyword,clicks,impressions. Set delimiter to , and column to 0 to extract just the keywords in one click.
Changes every character in every line to lower or upper case. Run Lowercase before deduplicating case-insensitively, or before merging lists from different sources to normalise everything first.
💡 Always lowercase your keyword list before running Remove Duplicate Lines (case-insensitive) to guarantee a clean result.Try it: Convert Text to Lowercase · Convert Text to Uppercase Full guide
Capitalises the first letter of every word in every line. Perfect for turning a raw keyword list into page titles, H1 headings, or meta titles without manually editing each one.
💡 Before:best running shoes for flat feet → After: Best Running Shoes For Flat Feet
Lowercases everything, then capitalises only the first letter of each line (and after sentence-ending punctuation like ., !, ?). Ideal for meta descriptions and ad copy.
BEST RUNNING SHOES FOR FLAT FEET → After: Best running shoes for flat feet
Turns any line of text into a clean, URL-safe slug: lowercased, spaces replaced with hyphens, special characters and punctuation stripped, double hyphens collapsed.
💡 Before:Best Running Shoes For Flat Feet (2024) → After: best-running-shoes-for-flat-feet-2024. Paste a list of blog post titles and get all your slugs in one go.
Strips over 80 common English stop words (the, a, an, and, in, of, for, with, is, are, etc.) from every line. What's left is the semantic core of each phrase — the words that actually carry meaning.
💡 Before:what are the best running shoes for flat feet → After: best running shoes flat feet. Great for extracting topic clusters from a long-tail keyword list.
Removes every numeric character from every line. Useful when you want to group keywords by topic regardless of year, model number, or price.
💡 Before:best smartphone 2024 review → After: best smartphone review. Then deduplicate to consolidate year-variants under one topic.
Adds a [N words] tag to the end of each line. Useful for auditing title lengths or quickly seeing how many words are in each keyword without counting manually.
best running shoes for flat feet [6 words]
Adds a [N chars] tag to the end of each line. Extremely useful for meta title and description audits — paste your titles, append char count, and instantly see which ones are too long.
Best Running Shoes For Flat Feet [33 chars]. Any line showing over 60 chars needs trimming for Google's title display.
Replaces all occurrences of a word or phrase with something else across every line. Tick Case insensitive to catch all capitalisation variants.
💡 Localise a UK keyword list for the US market: replacecolour with color, tyre with tire. Or replace your old domain name with a new one across a URL list.
Pulls every unique word used across the entire list into a single sorted list — a fast way to map topics.
💡 Map every distinct topic mentioned across a large keyword exportSplits a long list into a set number of equal batches, separated by clear headers, ready to hand out across a team.
💡 Divide a huge keyword list evenly across a content teamConverts each line into camelCase, for developers who need keyword lists inside code or JSON.
💡 Convert keyword lists into variable names for a script or APIConverts each line into snake_case.
💡 Generate database-friendly identifiers from a list of labelsConverts each line into PascalCase.
💡 Convert a list of feature names into class-name format for developersRuns many replacements at once from a list of “old | new” pairs — localise keywords, rename products or swap a set of terms in one pass.
running shoes uk cheap trainers uk
running shoes usa cheap sneakers usa
Operations that generate and label keyword ideas — autocomplete seeds, modifiers, permutations, intent and length tags, and quick topic groups.
Adds each letter a–z (and optionally 0–9) after — or before — every keyword: “running shoes a”, “running shoes b”… Paste the result into an autocomplete scraper or Google to find long-tail ideas.
running shoes
Expands every keyword with the modifiers people actually search with — questions (how to, what is, why…) and/or buying words (best, cheap, review, vs, near me…).
running shoes
how to choose running shoes what are running shoes why running shoes where to buy running shoes when to replace running shoes which running shoes are running shoes worth it running shoes for beginners
Writes every order of the words in each line — “running shoes women” → “women running shoes”, “shoes women running”… Useful for exact-match ad groups and spotting how people phrase things. Lines over 7 words are left as they are.
red running shoes
red running shoes red shoes running running red shoes running shoes red shoes red running shoes running red
Replaces one year with another wherever it appears as a year on its own — “best shoes 2024” → “best shoes 2025” — without touching longer numbers such as model or product codes.
best running shoes 2024 model 20245 2024 buyers guide
best running shoes 2025 model 20245 2025 buyers guide
Labels each keyword as informational, commercial, transactional or navigational from the words it contains (how, best, buy, login…). A quick first pass for sorting a list — not a substitute for checking the SERP.
how to clean running shoes best running shoes buy running shoes online nike login running shoes
how to clean running shoes | informational best running shoes | commercial buy running shoes online | transactional nike login | navigational running shoes | unclear
Labels each keyword by length: head (1 word), body (2–3 words) or long-tail (4+ words), so you can sort or filter a list by how specific it is.
shoes running shoes best trail running shoes
shoes | head running shoes | body best trail running shoes | long-tail
Groups keywords under the most common meaningful word they share — every “boots” keyword together, every “socks” keyword together — with a heading and count per group. Quicker and looser than the cannibalization detector.
trail running shoes hiking boots waterproof boots running shoes for women wool socks
=== shoes (2) === trail running shoes running shoes for women === boots (2) === hiking boots waterproof boots … 3 more lines
These operations are built for lists of URLs — from crawl exports, backlink reports, Search Console, or any SEO tool. They all handle both full URLs (https://example.com/page/) and bare paths (/page/).
Strips everything except the root domain from each URL. Protocol (https://) and www. are removed. Paths, query strings, and fragments are all dropped.
https://www.example.com/blog/post-1/?utm_source=google → After: example.com. Paste a backlink report URL list and get a clean domain list to check in your Domain Authority checker or Whois tool.
Keeps the full protocol and domain but removes the path and everything after it. Unlike Extract Domain, this keeps https:// so the results are still clickable URLs.
https://example.com/blog/seo-tips/ → After: https://example.com. Useful when you need the homepage URLs from a list of deep links.
Removes everything from the ? (or #) onwards. The path stays intact. Useful for cleaning up crawl exports or analytics reports full of tracking parameters.
https://example.com/page/?utm_source=google&utm_medium=cpc → After: https://example.com/page/. Run this before deduplicating a URL list to collapse all UTM variants to their canonical URL.
Collapses your entire list into a single line, with each item separated by the delimiter you choose (default: comma). Produces a flat string from a vertical list.
💡 Need a SQLIN clause? Join with , then wrap in quotes → 'keyword1','keyword2','keyword3'. Need a comma-separated value for an AdWords upload? Join is your tool.
The opposite of Join — takes a single line of comma- (or any delimiter-) separated values and explodes it into one item per line. Trims whitespace from each item automatically.
💡 Someone sent you keywords asshoes, boots, trainers, sandals in one line. Split by , and you have a proper line-by-line list ready to process.
When you copy a column from Google Sheets or Excel and paste it, the values are separated by tab characters. This operation splits on those tabs, giving you a clean one-item-per-line list.
💡 Copy a keyword column from Sheets → paste into the input → run Google Sheets Column → Lines → done. No need to export a CSV first.Ensures every URL ends in a forward slash — useful for normalising a list before deduplicating it.
💡 Normalise a URL list before deduplicating near-identical entriesStrips the trailing slash from every URL in the list.
💡 Match a URL format required by a specific API or import toolReplaces "http://" with "https://" across every line in one pass.
💡 Update an old URL list after a site-wide HTTPS migrationScans free-form text and pulls out every URL it finds, one per line.
💡 Pull every link out of a scraped page's raw HTML or textScans free-form text and pulls out every email address it finds, automatically deduplicated.
💡 Pull contact addresses out of a scraped directory or contact pageTurns old → new URL pairs into 301 redirect rules for .htaccess or nginx, or a CSV. Use lines of “old | new”, or old URLs in the editor and new URLs (same order) in the second list.
https://example.com/old-shoes/ | https://example.com/shoes/ /sale-2023/ | /sale/
Redirect 301 /old-shoes/ https://example.com/shoes/ Redirect 301 /sale-2023/ /sale/
For a site migration: finds the most similar new URL for each old URL by comparing the words in their paths, and outputs “old | new | score” lines ready for Build Redirect Rules.
https://old.com/blog/best-running-shoes-2023/ https://old.com/about-us.html
Removes only the query parameters you list — utm_*, gclid, fbclid and similar by default — and keeps the ones that change the page, such as ?page=2 or ?colour=red.
https://example.com/shoes?utm_source=news&page=2&gclid=abc#reviews https://example.com/?ref=nav
https://example.com/shoes?page=2#reviews https://example.com/
Adds utm_source, utm_medium, utm_campaign (and optionally utm_term / utm_content) to every URL — correctly placed before any #anchor and after any existing parameters.
https://example.com/shoes?size=9#reviews
https://example.com/shoes?size=9&utm_source=newsletter&utm_medium=email&utm_campaign=spring%20sale#reviews
Pulls one part out of every URL: the path, the last segment (slug), the host, the root domain, the subdomain, the TLD, the first folder, the folder depth or the query string. Knows two-part TLDs such as .co.uk and .com.au.
https://shop.example.co.uk/guides/running/shoes.html?x=1 https://example.com/
example.co.uk example.com
Makes URLs consistent so duplicates can be found: lowercases the domain, adds or removes www, forces https, collapses double slashes and optionally lowercases the path.
HTTP://WWW.Example.com//Blog//Post example.com/shoes
https://example.com/Blog/Post https://example.com/shoes
Turns relative links such as /about or ../contact into full URLs using a base address you give — handy for links scraped from HTML.
/about contact ../shop/ https://other.com/
https://example.com/about https://example.com/blog/post/contact https://example.com/blog/shop/ https://other.com/
These two operations are audit tools. Paste a list of titles or descriptions, run the validator, and every line gets tagged instantly — no spreadsheet formulas needed.
Checks every line against Google's recommended title tag length of 60 characters. Each line gets a status tag prepended showing whether it passes and its exact length.
[OK 45 chars] Best Running Shoes For Flat Feet [TOO LONG 78 chars] The Definitive Guide to Choosing Running Shoes for People With Flat Feet in 2024💡 Paste a list of page titles from a crawl export. Every line flagged TOO LONG needs editing before your next site audit or relaunch. Use Keep Lines Containing with
TOO LONG afterwards to isolate just the problem titles.
Same concept but for meta descriptions — Google typically truncates anything over 160 characters in search results. Each line is tagged OK or TOO LONG with its exact character count.
[OK 118 chars] Find the best running shoes for flat feet in our 2024 guide. Expert picks, buying advice and top-rated options reviewed. [TOO LONG 184 chars] Discover our comprehensive guide to the very best running shoes designed specifically for people with flat feet, including expert reviews, comparison tables and buying tips for 2024.💡 After validating, use Remove Lines Containing with
[OK to strip the passing ones and keep only the descriptions that need shortening.
Turns your list into a regular expression for the Search Console query or page filter, escaping special characters. Splits into several regexes if one would pass the 4,096-character limit.
running shoes shoes (mens) nike
(?i)running shoes|shoes \(mens\)|nike
Turns a list of backlink URLs or domains into a Google disavow file: one domain: line per site (or individual URLs), deduplicated and sorted, with a dated header.
https://spam.example.com/page-1 http://www.bad-links.net/x domain:bad-links.net
domain:bad-links.net domain:spam.example.com
Measures each line in pixels the way Google renders it (title: 20px Arial, about 580px shown; description: 14px Arial, about 920px) and tags it OK or TOO LONG. More accurate than counting characters.
Best Running Shoes 2025 – Tested & Reviewed WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
Turns a list of URLs into a valid XML sitemap (duplicates removed, characters escaped), with optional lastmod and changefreq values. Save the output as sitemap.xml.
https://example.com/ https://example.com/shoes?size=9&colour=red https://example.com/
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url><loc>https://example.com/</loc></url> <url><loc>https://example.com/shoes?size=9&colour=red</loc></url> </urlset>
Writes a <link rel="canonical"> tag for every URL, with characters escaped for HTML.
https://example.com/shoes/ https://example.com/a?b=1&c=2
<link rel="canonical" href="https://example.com/shoes/"> <link rel="canonical" href="https://example.com/a?b=1&c=2">
Turns “Question | Answer” lines into FAQPage structured data, ready to paste into a page’s HTML. Lines without a separator are skipped.
How long do running shoes last? | About 500–800 km. Are trail shoes waterproof? | Some are — look for a GTX label.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How long do running shoes last?",
… 16 more linesTurns “title | description” lines into <title> and meta description tags (with optional Open Graph tags), escaped for HTML and separated by a blank line per page.
Best Running Shoes 2025 | Tested by runners & coaches.
<title>Best Running Shoes 2025</title> <meta name="description" content="Tested by runners & coaches.">
Turns a list of paths or URLs into robots.txt Disallow (or Allow) rules for the user-agent you choose, with an optional Sitemap line.
/wp-admin/ https://example.com/cart/ search
User-agent: * Disallow: /wp-admin/ Disallow: /cart/ Disallow: /search Sitemap: https://example.com/sitemap.xml
Displays four numbers about your list: total lines, non-empty lines, total word count, and total character count. No extra inputs needed — just process and read the dashboard.
💡 Useful as a sanity check after merging two lists — confirms you ended up with the number of items you expected. Also handy for estimating content volume (total words across a set of titles).Counts how often each word appears across all lines in your list, ignoring single letters and sorting by frequency. The result is displayed as a bar chart showing the top words.
💡 Paste 500 keywords and run Word Frequency. If best, cheap, and review dominate, your list skews towards commercial intent — useful insight before you start mapping keywords to content types.Tests a list of URLs against your robots.txt rules and flags URLs that match common noindex patterns. Two things are checked for each URL:
Robots.txt check: Paste your full robots.txt content into the field that appears. The tool parses all User-agent: * and Googlebot rules and applies Google's longest-match algorithm to each URL. Each URL gets ✓ Allowed, ⛔ Blocked, or – No rules.
Noindex risk check: Even if robots.txt allows a URL, certain URL patterns are commonly noindexed in CMS settings. The tool flags these automatically: tag archives, paginated pages (/page/2/), search results (?s=), author/date archives, RSS feeds, AMP pages, print parameters, WordPress internals, and more.
Input list (top textarea): https://example.com/blog/ https://example.com/tag/shoes/ https://example.com/page/2/ https://example.com/wp-admin/ Robots.txt field: User-agent: * Disallow: /wp-admin/ Allow: / Results: /blog/ → ✓ Allowed | ✓ Clean /tag/shoes/ → ✓ Allowed | ⚠ Tag archive /page/2/ → ✓ Allowed | ⚠ Pagination /wp-admin/ → ⛔ Blocked | ✓ Clean💡 After a migration, paste your new sitemap URLs as the list and your new robots.txt as the rules — instantly see if any pages you want indexed are accidentally blocked. Export the full report as CSV for your audit document.
Renders a Google-style search snippet preview from a Title ||| URL ||| Description formatted line, so you can see how a page will actually look in the results before you publish it.
💡 Preview exactly how a new title and description will look in Google before publishingGroups keywords that share two or more meaningful words, flagging phrases that are likely competing with each other for the same search intent.
💡 Spot near-duplicate keywords competing for the same search intentOutputs ready-to-paste hreflang <link> tags from a simple URL | language-code list, including the required x-default tag.
💡 Generate hreflang tags for a new multi-region site launchCounts the two- and three-word phrases that recur across your list — where topic clusters and modifiers show up that single-word counts miss.
best running shoes cheap running shoes running shoes for women
Counts how many URLs belong to each domain, root domain or top-level folder — see which sites dominate a backlink export or which sections of a site a crawl covers.
https://a.com/x https://blog.a.com/y https://b.org/z
Lists every line that appears more than once and how many times (ignoring capitals and extra spaces) — find duplicate titles, descriptions or H1s in a crawl export before you fix them.
Home Running Shoes home Trail Shoes HOME running shoes
Classifies a list of backlink anchor texts as brand, exact-match, partial-match, bare URL, generic (“click here”) or other, with the share of each — a quick over-optimisation check.
Acme running shoes best running shoes for women https://acme.com click here this article
Shows at a glance how two lists overlap: how many lines are only in yours, only in the second list, and in both — with the lines in each group.
running shoes trail shoes hiking boots
Get a list into the shape another tool needs — HTML, Markdown, JSON, SQL or CSV — or cut it down to a sample or a range of lines.
Turns the list into an HTML list, a Markdown list, a JSON array, an SQL IN (…) clause or a one-column CSV — with the right quoting and escaping for each.
running shoes Tom's "trail" shoes
[ "running shoes", "Tom's \"trail\" shoes" ]
Keeps the first N lines, the last N lines, every Nth line, or N lines picked at random — for spot-checking a huge export or pulling a test set.
a b c d e f
b d f
Keeps lines by position — e.g. lines 101 to 200 — counting from 1 and including blank lines, the way an editor numbers them.
one two three four five
two three four
Removes duplicates and tells you how many times each line appeared, most frequent first — “running shoes (4)”. Choose tab-separated output to paste into a spreadsheet.
shoes boots shoes socks shoes boots
shoes (3) boots (2) socks (1)
Breaks pasted paragraphs into one sentence per line, or one word per line — for auditing copy, building a vocabulary or feeding text into the other operations.
Trail shoes grip better. Road shoes are lighter! Which do you need?
Trail shoes grip better. Road shoes are lighter! Which do you need?
These are step-by-step sequences that combine multiple operations. Each operation you apply stacks up as a step, so you can run a whole workflow in a row — then open Steps & recipes and save it as a recipe to repeat it on the next list in one click.
Paste raw keyword dumps from Ahrefs, SEMrush, and Google Suggest into the input area.
Run Trim & Remove Empty Lines → clean consistent input.
Run Convert to Lowercase → normalise capitalisation.
Run Remove Duplicate Lines (case-insensitive) → unique set.
Run Remove Lines Shorter Than… (set to 10 chars) → filter stop-word noise.
Run Word Frequency Report → identify your top modifier words.
Run Keep Lines Containing… with a top modifier → focused sub-list.
Run Sort by Word Count (Most First) → long-tail at the top for content planning.
List 1: your seed keywords (e.g. running shoes, trainers, sneakers).
List 2: intent modifiers (e.g. best, cheap, buy, review, for women, near me, 2024).
Run Cartesian Product → generates every combination.
Run Remove Duplicate Lines (case-insensitive) → clean up any accidental duplicates.
Run Sort by Word Count (Fewest First) → head terms at top, long-tail below.
Run Validate Meta Title Length → check none are too long for a title tag.
Export your ranking keywords from Google Search Console → List 1.
Export a competitor's top keywords from Ahrefs or SEMrush → List 2.
Run Difference (Only in List 1) → keywords you rank for that they don't. Your exclusive wins.
Swap the lists. Run Difference (Only in List 1) again → keywords they have that you don't. Your opportunity gaps.
On the gap list: run Sort by Word Count (Fewest First) → prioritise shorter, broader gap terms first.
Export your backlink report from Ahrefs or Majestic as a CSV. Paste the URL column into the input.
Run Google Sheets Column → Lines if you pasted directly from Sheets.
Run Strip Query Strings from URLs → clean up any tracking params on the linking URLs.
Run Extract Domain from URLs → get just the root domains.
Run Remove Duplicate Lines (case-insensitive) → unique domain list.
Run Sort A → Z → alphabetical for easy scanning.
Export as CSV → paste into your Domain Authority checker or Whois tool.
Crawl your site with Screaming Frog. Export the Title column as a CSV. Paste the title column into the input (use Google Sheets Column → Lines if pasting from Sheets).
Run Trim & Remove Empty Lines → clean the data.
Run Validate Meta Title Length → every title gets tagged OK or TOO LONG with its length.
Run Keep Lines Containing… with TOO LONG → isolate only the problem titles.
Export as CSV → your title audit deliverable is ready.
Repeat with the Description column and Validate Meta Desc Length.
Fetch your new site's /sitemap.xml and extract all the <loc> URLs. Paste them into the input (one per line).
Type robots in the search bar and choose Robots.txt / Noindex Tester.
Fetch your live /robots.txt (just open it in your browser and copy-paste the whole thing) into the robots.txt field that appears.
Press Open report. Any URLs showing ⛔ Blocked need investigating — check your robots.txt rules haven't accidentally blocked indexable pages.
Review the ⚠ Noindex Risk column — pagination, tag archives, and author pages flagged here should be verified in your CMS that they actually carry a noindex tag.
Export the full table as CSV → attach to your migration QA document.
Ctrl+K or / opens the search bar; ↑ ↓ and Enter pick an operation; Esc goes back or closes. Ctrl+Z / Ctrl+Y undo and redo (Cmd on a Mac). Press ? in the tool for a quick reminder.
Yes. Every operation runs in your browser, so your keywords and URLs never reach our server. The only exception is if JavaScript is switched off, when a basic form processes the list on the server instead (it isn't stored).
The .csv button under the editor downloads your list as a two-column CSV (No and Line) ready for Google Sheets or Excel. The Robots.txt and cannibalization reports have their own Export CSV buttons.
The editor fills the screen and the Actions button at the bottom opens the search, suggestions and settings as a panel within thumb reach, next to Undo and Copy.
Every operation on this page also has its own dedicated article at seowolf.org/notepad/blog/ — one in-depth guide per tool, each with a real before/after example, common marketer use cases, an FAQ, and a small standalone version of that single tool you can try right on the page.
Every operation's settings panel has a Guide ↗ link, and every report ends with one — both go straight to that operation's article, no searching needed.
The blog index lists every article grouped by category (Cleaning, Filtering, Sorting, URL Tools, and so on) with a search box at the top — the same fast way to find a tool as the search bar, just in article form.
Each article's mini-tool loads pre-filled with an example relevant to that specific operation and shows a working result immediately — a fast way to understand what a tool does before pasting in your own data on the main page.