MediaWiki uses a VARBINARY(255) NOT NULL for   page_title

in doubt, you would use VARCHAR(255) over other length, since that's the largest value for a VARCHAR (a value larger than 255 would automatically become a MEDIUMTEXT column)

 > sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (1709, 'Index column size too large. The maximum column size is 767 bytes.')

This depends on the column collation. if you store ASCII characters, that's one byte per character. If you store utf-8 characters, each of them could be several bytes (also depending if you only support the Basic Multilingual Plane, as "old utf8", or all of them, "utf8_mb4").
It is possible to define the index as the first N bytes of the column (generally more than enough for what you will need).

But in this case, using varbinary should solve your issue;

Regards