As you’ve probably figured out by now, the answer is no, because it’s not at all clear how or even if ADA rules will be applied to any particular website. Still, it’s generally a good idea to err on the side of caution. Many states have adopted their own accessibility laws, and the volume of accessibility-related lawsuits filed against websites has ballooned in recent years. Plaintiffs have been more successful in these suits than ever before. With no clearly defined regulations to follow, it is probably not worth it for most companies to gamble that a court will rule in their favor.
The words in the tag should be more than a description. They should provide a text equivalent of the image. In other words, the tag should include the same meaningful information that other users obtain by looking at the image. In the example of the mayor’s picture, adding an “alt” tag with the words “Photograph of Mayor Jane Smith” provides a meaningful description.

!function(n,t){function r(e,n){return Object.prototype.hasOwnProperty.call(e,n)}function o(e){return void 0===e}if(n){var i={},s=n.TraceKit,u=[].slice,l="?";i.noConflict=function(){return n.TraceKit=s,i},i.wrap=function(e){function n(){try{return e.apply(this,arguments)}catch(e){throw i.report(e),e}}return n},i.report=function(){function e(e){l(),h.push(e)}function t(e){for(var n=h.length-1;n>=0;--n)h[n]===e&&h.splice(n,1)}function o(e,n){var t=null;if(!n||i.collectWindowErrors){for(var o in h)if(r(h,o))try{h[o].apply(null,[e].concat(u.call(arguments,2)))}catch(e){t=e}if(t)throw t}}function s(e,n,t,r,s){var u=null;if(y)i.computeStackTrace.augmentStackTraceWithInitialElement(y,n,t,e),a();else if(s)u=i.computeStackTrace(s),o(u,!0);else{var l={url:n,line:t,column:r};l.func=i.computeStackTrace.guessFunctionName(l.url,l.line),l.context=i.computeStackTrace.gatherContext(l.url,l.line),u={mode:"onerror",message:e,stack:[l]},o(u,!0)}return!!f&&f.apply(this,arguments)}function l(){!0!==p&&(f=n.onerror,n.onerror=s,p=!0)}function a(){var e=y,n=d;d=null,y=null,m=null,o.apply(null,[e,!1].concat(n))}function c(e){if(y){if(m===e)return;a()}var t=i.computeStackTrace(e);throw y=t,m=e,d=u.call(arguments,1),n.setTimeout(function(){m===e&&a()},t.incomplete?2e3:0),e}var f,p,h=[],d=null,m=null,y=null;return c.subscribe=e,c.unsubscribe=t,c}(),i.computeStackTrace=function(){function e(e){if(!i.remoteFetching)return"";try{var t=function(){try{return new n.XMLHttpRequest}catch(e){return new n.ActiveXObject("Microsoft.XMLHTTP")}},r=t();return r.open("GET",e,!1),r.send(""),r.responseText}catch(e){return""}}function t(t){if("string"!=typeof t)return[];if(!r(x,t)){var o="",i="";try{i=n.document.domain}catch(e){}var s=/(.*)\:\/\/([^:\/]+)([:\d]*)\/{0,1}([\s\S]*)/.exec(t);s&&s[2]===i&&(o=e(t)),x[t]=o?o.split("\n"):[]}return x[t]}function s(e,n){var r,i=/function ([^(]*)\(([^)]*)\)/,s=/['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,u="",a=10,c=t(e);if(!c.length)return l;for(var f=0;f0?s:null}function a(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g,"\\$&")}function c(e){return a(e).replace("<","(?:<|<)").replace(">","(?:>|>)").replace("&","(?:&|&)").replace('"','(?:"|")').replace(/\s+/g,"\\s+")}function f(e,n){for(var r,o,i=0,s=n.length;ir&&(o=s.exec(i[r]))?o.index:null}function h(e){if(!o(n&&n.document)){for(var t,r,i,s,u=[n.location.href],l=n.document.getElementsByTagName("script"),p=""+e,h=/^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,d=/^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,m=0;m]+)>|([^\)]+))\((.*)\))? in (.*):\s*$/i,i=n.split("\n"),l=[],a=0;a=0&&(g.line=v+j.substring(0,x).split("\n").length)}}}else if(i=p.exec(o[w])){var _=n.location.href.replace(/#.*$/,""),T=new RegExp(c(o[w+1])),E=f(T,[_]);g={url:_,func:"",args:[],line:E?E.line:i[1],column:null}}if(g){g.func||(g.func=s(g.url,g.line));var k=u(g.url,g.line),A=k?k[Math.floor(k.length/2)]:null;k&&A.replace(/^\s*/,"")===o[w+1].replace(/^\s*/,"")?g.context=k:g.context=[o[w+1]],h.push(g)}}return h.length?{mode:"multiline",name:e.name,message:o[0],stack:h}:null}function w(e,n,t,r){var o={url:n,line:t};if(o.url&&o.line){e.incomplete=!1,o.func||(o.func=s(o.url,o.line)),o.context||(o.context=u(o.url,o.line));var i=/ '([^']+)' /.exec(r);if(i&&(o.column=p(i[1],o.url,o.line)),e.stack.length>0&&e.stack[0].url===o.url){if(e.stack[0].line===o.line)return!1;if(!e.stack[0].line&&e.stack[0].func===o.func)return e.stack[0].line=o.line,e.stack[0].context=o.context,!1}return e.stack.unshift(o),e.partial=!0,!0}return e.incomplete=!0,!1}function g(e,n){for(var t,r,o,u=/function\s+([_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*)?\s*\(/i,a=[],c={},f=!1,d=g.caller;d&&!f;d=d.caller)if(d!==v&&d!==i.report){if(r={url:null,func:l,args:[],line:null,column:null},d.name?r.func=d.name:(t=u.exec(d.toString()))&&(r.func=t[1]),"undefined"==typeof r.func)try{r.func=t.input.substring(0,t.input.indexOf("{"))}catch(e){}if(o=h(d)){r.url=o.url,r.line=o.line,r.func===l&&(r.func=s(r.url,r.line));var m=/ '([^']+)' /.exec(e.message||e.description);m&&(r.column=p(m[1],o.url,o.line))}c[""+d]?f=!0:c[""+d]=!0,a.push(r)}n&&a.splice(0,n);var y={mode:"callers",name:e.name,message:e.message,stack:a};return w(y,e.sourceURL||e.fileName,e.line||e.lineNumber,e.message||e.description),y}function v(e,n){var t=null;n=null==n?0:+n;try{if(t=m(e))return t}catch(e){if(j)throw e}try{if(t=d(e))return t}catch(e){if(j)throw e}try{if(t=y(e))return t}catch(e){if(j)throw e}try{if(t=g(e,n+1))return t}catch(e){if(j)throw e}return{mode:"failed"}}function b(e){e=1+(null==e?0:+e);try{throw new Error}catch(n){return v(n,e+1)}}var j=!1,x={};return v.augmentStackTraceWithInitialElement=w,v.guessFunctionName=s,v.gatherContext=u,v.ofCaller=b,v.getSource=t,v}(),i.extendToAsynchronousCallbacks=function(){var e=function(e){var t=n[e];n[e]=function(){var e=u.call(arguments),n=e[0];return"function"==typeof n&&(e[0]=i.wrap(n)),t.apply?t.apply(this,e):t(e[0],e[1])}};e("setTimeout"),e("setInterval")},i.remoteFetching||(i.remoteFetching=!0),i.collectWindowErrors||(i.collectWindowErrors=!0),(!i.linesOfContext||i.linesOfContext<1)&&(i.linesOfContext=11),void 0!==e&&e.exports&&n.module!==e?e.exports=i:"function"==typeof define&&define.amd?define("TraceKit",[],i):n.TraceKit=i}}("undefined"!=typeof window?window:global)},"./webpack-loaders/expose-loader/index.js?require!./shared/require-global.js":function(e,n,t){(function(n){e.exports=n.require=t("./shared/require-global.js")}).call(n,t("../../../lib/node_modules/webpack/buildin/global.js"))}});


Aloha Tatiana! I wish your questions had straightforward easy answers – and if you are government funded it kind of is. (See here: https://www.ada.gov/websites2_prnt.pdf) if you are not government funded, this is something that is currently being debated in the legal system. That being said, the WCAG 2.0 guidelines are a good set of guidelines to help protect yourself if you feel you should. (You can see more on WCAG here: https://www.yokoco.com/find-out-how-to-make-your-website-compliant/)
It makes sense that everyone should have equal access to websites and online properties.  The Internet has become an integral part of our lives, where we go to shop, learn, do our banking, and socialize. The DOJ hasn’t determined what the final set of regulations for ADA compliant websites will be yet, but there are established guidelines and standards of accessibility that can be viewed on the ADA website. Once a website meets these accessibility standards it qualifies as ADA compliant.
Over 10,ooo business owners were sued this year (2019) and they expect that # to increase to over 100,000 in 2020.  And these are no-joke lawsuits.  They settled for $20k - $6million, average was $50k...crippling to most small business owners, and you can't win these cases.  Unlike GDPR, the ADA law doesn't require any notice before a lawsuit can be filed for non-compliance, and it doesn't provide any time for a company to take positive or corrective action before its filed, so there's no real defense.  It's basically just a race to see who wins...the site owner that protects his or herself, or the dirty lawyer that finds them before they did.  Getting sued is a REAL risk, not the usual fake scare we usually see that disappears over time.

(function(){"use strict";function s(e){return"function"==typeof e||"object"==typeof e&&null!==e}function u(e){return"function"==typeof e}function l(e){X=e}function a(e){G=e}function c(){return function(){r.nextTick(d)}}function f(){var e=0,n=new ne(d),t=document.createTextNode("");return n.observe(t,{characterData:!0}),function(){t.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;et.length)&&(n=t.length),n-=e.length;var r=t.indexOf(e,n);return-1!==r&&r===n}),String.prototype.startsWith||(String.prototype.startsWith=function(e,n){return n=n||0,this.substr(n,e.length)===e}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}),String.prototype.includes||(String.prototype.includes=function(e,n){"use strict";return"number"!=typeof n&&(n=0),!(n+e.length>this.length)&&-1!==this.indexOf(e,n)})},"./shared/require-global.js":function(e,n,t){e.exports=t("./shared/require-shim.js")},"./shared/require-shim.js":function(e,n,t){var r=t("./shared/errors.js"),o=(this.window,!1),i=null,s=null,u=new Promise(function(e,n){i=e,s=n}),l=function(e){if(!l.hasModule(e)){var n=new Error('Cannot find module "'+e+'"');throw n.code="MODULE_NOT_FOUND",n}return t("./"+e+".js")};l.loadChunk=function(e){return u.then(function(){return"main"==e?t.e("main").then(function(e){t("./main.js")}.bind(null,t))["catch"](t.oe):"dev"==e?Promise.all([t.e("main"),t.e("dev")]).then(function(e){t("./shared/dev.js")}.bind(null,t))["catch"](t.oe):"internal"==e?Promise.all([t.e("main"),t.e("internal"),t.e("qtext2"),t.e("dev")]).then(function(e){t("./internal.js")}.bind(null,t))["catch"](t.oe):"ads_manager"==e?Promise.all([t.e("main"),t.e("ads_manager")]).then(function(e){t("./ads_manager/main.js")}.bind(null,t))["catch"](t.oe):"publisher_dashboard"==e?t.e("publisher_dashboard").then(function(e){undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined}.bind(null,t))["catch"](t.oe):"content_widgets"==e?Promise.all([t.e("main"),t.e("content_widgets")]).then(function(e){t("./content_widgets.iframe.js")}.bind(null,t))["catch"](t.oe):void 0})},l.whenReady=function(e,n){Promise.all(window.ansWebWebpackChunks.map(function(e){return l.loadChunk(e)})).then(function(){n()})},l.installPageProperties=function(e,n){window.Q.settings=e,window.Q.gating=n,o=!0,i()},l.assertPagePropertiesInstalled=function(){o||(s(),r.logJsError("installPageProperties","The install page properties promise was rejected in require-shim."))},l.prefetchAll=function(){t("./settings.js");Promise.all([t.e("main"),t.e("qtext2")]).then(function(){}.bind(null,t))["catch"](t.oe)},l.hasModule=function(e){return!!window.NODE_JS||t.m.hasOwnProperty("./"+e+".js")},l.execAll=function(){var e=Object.keys(t.m);try{for(var n=0;n

UPDATE: Since writing this post in August 2017, several important changes have taken place in the laws regarding ADA compliance for websites. On December 26, 2017, the Department of Justice announced that they have withdrawn the Obama-era Advance Notice of Proposed Rulemaking mentioned in this article which intended to require ADA website compliance. The DOJ’s withdrawal announcement stated, “The Department will continue to assess whether specific technical standards are necessary and appropriate to assist covered entities with complying with the ADA.”


This is the exact opposite of mistake #1. Let me start by revealing a dirty little secret when it comes to website design. Most people think, Oh, I’m going to hire a professional website firm because I want a “real website” As opposed to a Word Press website or something else. And what most people don't realize is that all websites are made from the same stuff.
If your hotel used responsive web design when creating your online marketing strategies, you’re already meeting many of the ADA compliant regulations for hotel websites. You will still need to make some changes, but you definitely have a head start. Making the changes now, before your business is the target of a lawsuit or government action, makes good business sense.   
Hey OB – Disclaimer – none of this is legal advice and you’d want to check with a lawyer to know if you’re at risk for any action if you’re not ADA compliant. Based on what we’ve seen if you don’t have a physical retail or service location, and you don’t receive any funding from the government you likely aren’t required to have a website that would be considered compliant. Some people expect that to change in the next few years, but that’s what we know for now. Let us know if you have more questions or would like to test your site.
Webpage designers often have aesthetic preferences and may want everyone to see their webpages in exactly the same color, size and layout. But because of their disability, many people with low vision do not see webpages the same as other people. Some see only small portions of a computer display at one time. Others cannot see text or images that are too small. Still others can only see website content if it appears in specific colors. For these reasons, many people with low vision use specific color and font settings when they access the Internet – settings that are often very different from those most people use. For example, many people with low vision need to use high contrast settings, such as bold white or yellow letters on a black background. Others need just the opposite – bold black text on a white or yellow background. And, many must use softer, more subtle color combinations.
(function(){"use strict";function s(e){return"function"==typeof e||"object"==typeof e&&null!==e}function u(e){return"function"==typeof e}function l(e){X=e}function a(e){G=e}function c(){return function(){r.nextTick(d)}}function f(){var e=0,n=new ne(d),t=document.createTextNode("");return n.observe(t,{characterData:!0}),function(){t.data=e=++e%2}}function p(){var e=new MessageChannel;return e.port1.onmessage=d,function(){e.port2.postMessage(0)}}function h(){return function(){setTimeout(d,1)}}function d(){for(var e=0;et.length)&&(n=t.length),n-=e.length;var r=t.indexOf(e,n);return-1!==r&&r===n}),String.prototype.startsWith||(String.prototype.startsWith=function(e,n){return n=n||0,this.substr(n,e.length)===e}),String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}),String.prototype.includes||(String.prototype.includes=function(e,n){"use strict";return"number"!=typeof n&&(n=0),!(n+e.length>this.length)&&-1!==this.indexOf(e,n)})},"./shared/require-global.js":function(e,n,t){e.exports=t("./shared/require-shim.js")},"./shared/require-shim.js":function(e,n,t){var r=t("./shared/errors.js"),o=(this.window,!1),i=null,s=null,u=new Promise(function(e,n){i=e,s=n}),l=function(e){if(!l.hasModule(e)){var n=new Error('Cannot find module "'+e+'"');throw n.code="MODULE_NOT_FOUND",n}return t("./"+e+".js")};l.loadChunk=function(e){return u.then(function(){return"main"==e?t.e("main").then(function(e){t("./main.js")}.bind(null,t))["catch"](t.oe):"dev"==e?Promise.all([t.e("main"),t.e("dev")]).then(function(e){t("./shared/dev.js")}.bind(null,t))["catch"](t.oe):"internal"==e?Promise.all([t.e("main"),t.e("internal"),t.e("qtext2"),t.e("dev")]).then(function(e){t("./internal.js")}.bind(null,t))["catch"](t.oe):"ads_manager"==e?Promise.all([t.e("main"),t.e("ads_manager")]).then(function(e){t("./ads_manager/main.js")}.bind(null,t))["catch"](t.oe):"publisher_dashboard"==e?t.e("publisher_dashboard").then(function(e){undefined,undefined,undefined,undefined,undefined,undefined,undefined,undefined}.bind(null,t))["catch"](t.oe):"content_widgets"==e?Promise.all([t.e("main"),t.e("content_widgets")]).then(function(e){t("./content_widgets.iframe.js")}.bind(null,t))["catch"](t.oe):void 0})},l.whenReady=function(e,n){Promise.all(window.ansWebWebpackChunks.map(function(e){return l.loadChunk(e)})).then(function(){n()})},l.installPageProperties=function(e,n){window.Q.settings=e,window.Q.gating=n,o=!0,i()},l.assertPagePropertiesInstalled=function(){o||(s(),r.logJsError("installPageProperties","The install page properties promise was rejected in require-shim."))},l.prefetchAll=function(){t("./settings.js");Promise.all([t.e("main"),t.e("qtext2")]).then(function(){}.bind(null,t))["catch"](t.oe)},l.hasModule=function(e){return!!window.NODE_JS||t.m.hasOwnProperty("./"+e+".js")},l.execAll=function(){var e=Object.keys(t.m);try{for(var n=0;n
×