Keyword Density Checker
See which words and phrases dominate a page, with density figures and over-use warnings.
Turn pasted rows into a clean Markdown table, and Q: / A: pairs into valid FAQPage JSON-LD, with both escaping and padding handled.
Your result is ready — download it below:
Re-encoded without size gain Download links expire within 30 minutes.
No result to display for the current input.
Turn pasted rows into a clean Markdown table, and Q: / A: pairs into valid FAQPage JSON-LD, with both escaping and padding handled.
Paste spreadsheet rows and get a Markdown table. Paste question and answer pairs and get FAQPage JSON-LD. Do both in one go and it produces both, without the Q:/A: block ending up as two stray rows in your table. The escaping is handled, which is the part that usually goes wrong: a pipe inside a cell silently starts a new column, and the table renders wrong on a page nobody checks on a phone.
The output is deliberately plain. Markdown for the table because that is what goes in a README or a docs site, and JSON-LD for the FAQ because that is what a validator will ask you to paste.
Three things go wrong in hand-written Markdown tables, and none of them produce an error. A | inside a cell starts a new column, so A|B becomes two cells and your data quietly shifts. A newline inside a cell ends the row entirely. And a row with fewer cells than the header leaves a table that is not rectangular, which some renderers pad and some do not.
This tool escapes pipes as \|, turns newlines inside a cell into <br> rather than dropping them, and pads short rows to the width of the widest one. Crucially it does not fix them silently: when rows were padded, the notes tell you how many, because a row that was short a value is usually a mistake in the source data rather than something to paper over.
The delimiter is detected from whichever the text uses most — tabs for a spreadsheet paste, pipes for hand-written rows, commas for CSV, and runs of two or more spaces as a last resort. Single spaces are never treated as a delimiter, because the space between every pair of words in a sentence would otherwise turn any prose into a hundred-column table.
Column count comes from the widest row, not the first, so one extra cell does not truncate the rest. Alignment is read from a separator row when the input has one: --- means default, :--- left, ---: right and :---: centre. That is more specific than the dropdown, so it wins, and the dropdown only applies to tables with no separator row. Every column is padded to a common width, so the table lines up in a code block as well as on the page.
Read this before you build a strategy on it. Google only shows FAQ rich results for a small number of authoritative government and health sites. For an ordinary site, expect no stars, no expanded dropdowns and no traffic from it. The markup is still valid schema.org, still useful for screen readers and other consumers, and is what many third-party tools read — it is simply not a traffic lever for most publishers.
What is generated is a FAQPage with a mainEntity array of Question objects, each with an acceptedAnswer. Answer text continues past its A: marker until the next question and is joined into one paragraph, which is what the format expects. The page name is taken from your title field, or guessed from the first question if you leave it blank — and it should be set to the real page title, because the markup and the visible heading disagreeing is exactly the kind of inconsistency validators flag.
If you add the optional speakable block, it only does anything if you wrap each answer in an element with class="faq-answer" yourself. The schema cannot add that wrapper, and a selector pointing at elements that do not exist does nothing at all.
In auto mode the tool runs both detectors, and that creates a problem worth naming. A page that has a pricing table and then a list of questions is one piece of text, so a naive table parser reads the Q: and A: lines as two more rows of the table with one cell each. The result looks plausible and is completely wrong.
So the FAQ parser reports which lines it did not consume, and the table is built from that remainder. Everything before the first Q: becomes the table; the questions and answers become the schema. Choosing Table or FAQ mode explicitly bypasses this and uses the whole text, which is the right behaviour when the Q:/A: lines really are table data.
If the text contains fewer than two columns once split, and no question and answer pairs, there is nothing to convert, and the tool says so rather than producing a one-column table with a header and no data. The most common cause is a table pasted with single spaces between columns, which is not a format any Markdown parser can detect reliably. Use tabs, pipes or commas.
Everything runs on the server and nothing is sent anywhere, so pasting a draft pricing table or an unpublished FAQ does not put it on a third party's machine.
Almost certainly not. Google restricts FAQ rich results to a small number of authoritative government and health sites, so on a normal site the markup produces nothing visible. It remains valid schema.org, is read by other tools, and can help screen reader users, but treat it as groundwork rather than a traffic strategy.
For a table, anything with tabs, pipes or commas. For a FAQ, lines starting with Q: and A: — Question: and Answer: also work. Single spaces between columns are not detected, because every sentence in the world has those and treating them as delimiters would turn prose into a table.
It is escaped as \| so it renders as a literal pipe instead of starting a new column. The result notes tell you how many cells were affected. The same applies to newlines inside a cell, which become <br> rather than silently ending the row.
It is padded with empty cells so the table stays rectangular, and the notes report how many rows were short. A ragged row is nearly always a mistake in the source data rather than a formatting choice, so it is worth going back and filling it in — the tool cannot know whether the missing value was zero, empty or not yet decided.
Yes, in auto mode. The FAQ is built from the lines starting at the first question, and the table from everything before it, so appending a Q:/A: list to a table does not turn the questions into table rows. Pick Table or FAQ mode if you want the whole text treated as one thing.
Use a separator row: --- for default, :--- for left, ---: for right and :---: for centre. It overrides the dropdown, which only applies when the input has no separator row. The result tells you which one it used.
Only if you wrap each answer in an element with class="faq-answer" in your own page. The JSON-LD carries the selector but cannot add the elements, and a selector matching nothing does nothing. Leave it off unless you are building that markup anyway.
The conversion runs on this site's server, and the text is not sent anywhere else. It is still a server-side tool, so treat it the same way as any form on a site you did not build: fine for a draft pricing table, worth a thought before pasting something unpublished.
Text to Markdown Table & FAQPage Schema Generator converts pasted text into a Markdown table and/or FAQPage structured data. Pipes inside cells are escaped, short rows are padded and reported, and the JSON-LD is valid on the way out.
How to use: paste your rows or Q:/A: pairs, choose a mode, then press Run.
See which words and phrases dominate a page, with density figures and over-use warnings.
Turn a title or headline into clean, lowercase URL slugs with your own separator and length limit.
Build a valid robots.txt with crawler groups, disallow rules, crawl delay and a sitemap line.
Paste your page source and see every title, description, Open Graph and robots tag checked at once.